CCS PCM C Compiler, Version 4.106, 47914 23-4-13 11:23Filename: C:\Users\Honza\Documents\pic\I2C_akcelerometr\main.lstROM used: 4183 words (51%)Largest free fragment is 2048RAM used: 10 (3%) at main() level70 (19%) worst caseStack: 2 locations*0000: MOVLW 100001: MOVWF 0A0002: GOTO 0000003: NOP.................... //For AKCE.................... //ADRESA pro èteni 0x39.................... //pro zápis 0x38................................................................................ #include "C:\Users\Honza\Documents\pic\I2C_akcelerometr\main.h".................... #include <16F887.h>.................... //////// Standard Header file for the PIC16F887 device ////////////////.................... #device PIC16F887.................... #list........................................ #device adc=8........................................ #FUSES NOWDT //No Watch Dog Timer.................... #FUSES INTRC //Internal RC Osc.................... #FUSES NOPUT //No Power Up Timer.................... #FUSES MCLR //Master Clear pin enabled.................... #FUSES NOPROTECT //Code not protected from reading.................... #FUSES NOCPD //No EE protection.................... #FUSES NOBROWNOUT //No brownout reset.................... #FUSES IESO //Internal External Switch Over mode enabled.................... #FUSES FCMEN //Fail-safe clock monitor enabled.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O.................... #FUSES NODEBUG //No Debug mode for ICD.................... #FUSES NOWRT //Program memory not write protected.................... #FUSES BORV40 //Brownout reset at 4.0V........................................ #use delay(clock=8000000)*075E: MOVLW 3D075F: MOVWF 040760: BCF 03.70761: MOVF 00,W0762: BTFSC 03.20763: GOTO 7710764: MOVLW 020765: MOVWF 780766: CLRF 770767: DECFSZ 77,F0768: GOTO 7670769: DECFSZ 78,F076A: GOTO 766076B: MOVLW 97076C: MOVWF 77076D: DECFSZ 77,F076E: GOTO 76D076F: DECFSZ 00,F0770: GOTO 7640771: BCF 0A.30772: BSF 0A.40773: GOTO 64E (RETURN)............................................................ #define EEPROM_SDA PIN_C4.................... #define EEPROM_SCL PIN_C3.................... #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)*0104: MOVLW 080105: MOVWF 780106: NOP0107: BCF 07.30108: BCF 20.30109: MOVF 20,W010A: BSF 03.5010B: MOVWF 07010C: NOP010D: BCF 03.5010E: RLF 3C,F010F: BCF 07.40110: BTFSS 03.00111: GOTO 1180112: BSF 20.40113: MOVF 20,W0114: BSF 03.50115: MOVWF 070116: GOTO 11C0117: BCF 03.50118: BCF 20.40119: MOVF 20,W011A: BSF 03.5011B: MOVWF 07011C: NOP011D: BCF 03.5011E: BSF 20.3011F: MOVF 20,W0120: BSF 03.50121: MOVWF 070122: BCF 03.50123: BTFSS 07.30124: GOTO 1230125: DECFSZ 78,F0126: GOTO 1060127: NOP0128: BCF 07.30129: BCF 20.3012A: MOVF 20,W012B: BSF 03.5012C: MOVWF 07012D: NOP012E: BCF 03.5012F: BSF 20.40130: MOVF 20,W0131: BSF 03.50132: MOVWF 070133: NOP0134: NOP0135: BCF 03.50136: BSF 20.30137: MOVF 20,W0138: BSF 03.50139: MOVWF 07013A: BCF 03.5013B: BTFSS 07.3013C: GOTO 13B013D: CLRF 78013E: NOP013F: BTFSC 07.40140: BSF 78.00141: BCF 07.30142: BCF 20.30143: MOVF 20,W0144: BSF 03.50145: MOVWF 070146: BCF 03.50147: BCF 07.40148: BCF 20.40149: MOVF 20,W014A: BSF 03.5014B: MOVWF 07014C: BCF 03.5014D: RETURN014E: MOVLW 08014F: MOVWF 3D0150: MOVF 77,W0151: MOVWF 3E0152: BSF 20.40153: MOVF 20,W0154: BSF 03.50155: MOVWF 070156: NOP0157: BCF 03.50158: BSF 20.30159: MOVF 20,W015A: BSF 03.5015B: MOVWF 07015C: BCF 03.5015D: BTFSS 07.3015E: GOTO 15D015F: BTFSC 07.40160: BSF 03.00161: BTFSS 07.40162: BCF 03.00163: RLF 78,F0164: NOP0165: BCF 20.30166: MOVF 20,W0167: BSF 03.50168: MOVWF 070169: BCF 03.5016A: BCF 07.3016B: DECFSZ 3D,F016C: GOTO 152016D: BSF 20.4016E: MOVF 20,W016F: BSF 03.50170: MOVWF 070171: NOP0172: BCF 03.50173: BCF 07.40174: MOVF 3E,W0175: BTFSC 03.20176: GOTO 17C0177: BCF 20.40178: MOVF 20,W0179: BSF 03.5017A: MOVWF 07017B: BCF 03.5017C: NOP017D: BSF 20.3017E: MOVF 20,W017F: BSF 03.50180: MOVWF 070181: BCF 03.50182: BTFSS 07.30183: GOTO 1820184: NOP0185: BCF 07.30186: BCF 20.30187: MOVF 20,W0188: BSF 03.50189: MOVWF 07018A: NOP018B: BCF 03.5018C: BCF 07.4018D: BCF 20.4018E: MOVF 20,W018F: BSF 03.50190: MOVWF 070191: BCF 03.50192: RETURN.................... #use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8) //rcv TXD xmit RXD*0098: BCF 20.70099: MOVF 20,W009A: BSF 03.5009B: MOVWF 07009C: BCF 03.5009D: BCF 07.7009E: MOVLW 08009F: MOVWF 7800A0: GOTO 0A100A1: NOP00A2: BSF 78.700A3: GOTO 0B200A4: BCF 78.700A5: RRF 49,F00A6: BTFSC 03.000A7: BSF 07.700A8: BTFSS 03.000A9: BCF 07.700AA: BSF 78.600AB: GOTO 0B200AC: BCF 78.600AD: DECFSZ 78,F00AE: GOTO 0A500AF: GOTO 0B000B0: NOP00B1: BSF 07.700B2: MOVLW 3F00B3: MOVWF 0400B4: DECFSZ 04,F00B5: GOTO 0B400B6: NOP00B7: BTFSC 78.700B8: GOTO 0A400B9: BTFSC 78.600BA: GOTO 0AC00BB: RETURN.................... #include <math.h>.................... ////////////////////////////////////////////////////////////////////////////.................... //// (C) Copyright 1996,2008 Custom Computer Services ////.................... //// This source code may only be used by licensed users of the CCS C ////.................... //// compiler. This source code may only be distributed to other ////.................... //// licensed users of the CCS C compiler. No other use, reproduction ////.................... //// or distribution is permitted without written permission. ////.................... //// Derivative programs created using this software in object code ////.................... //// form are not restricted in any way. ////.................... ////////////////////////////////////////////////////////////////////////////.................... //// ////.................... //// History: ////.................... //// * 9/20/2001 : Improvments are made to sin/cos code. ////.................... //// The code now is small, much faster, ////.................... //// and more accurate. ////.................... //// * 2/21/2007 : Compiler handles & operator differently and does.................... //// not return generic (int8 *) so type cast is done ////.................... //// ////.................... ////////////////////////////////////////////////////////////////////////////........................................ #ifndef MATH_H.................... #define MATH_H........................................ #ifdef PI.................... #undef PI.................... #endif.................... #define PI 3.1415926535897932............................................................ #define SQRT2 1.4142135623730950........................................ //float const ps[4] = {5.9304945, 21.125224, 8.9403076, 0.29730279};.................... //float const qs[4] = {1.0000000, 15.035723, 17.764134, 2.4934718};........................................ ///////////////////////////// Round Functions //////////////////////////////........................................ float32 CEIL_FLOOR(float32 x, unsigned int8 n).................... {.................... float32 y, res;.................... unsigned int16 l;.................... int1 s;........................................ s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y <= 32768.0).................... res = (float32)(unsigned int16)y;........................................ else if (y < 10000000.0).................... {.................... l = (unsigned int16)(y/32768.0);.................... y = 32768.0*(y/32768.0 - (float32)l);.................... res = 32768.0*(float32)l;.................... res += (float32)(unsigned int16)y;.................... }........................................ else.................... res = y;........................................ y = y - (float32)(unsigned int16)y;........................................ if (s).................... res = -res;........................................ if (y != 0).................... {.................... if (s == 1 && n == 0).................... res -= 1.0;........................................ if (s == 0 && n == 1).................... res += 1.0;.................... }.................... if (x == 0).................... res = 0;........................................ return (res);.................... }........................................ // Overloaded Functions to take care for new Data types in PCD.................... // Overloaded function CEIL_FLOOR() for data type - Float48.................... #if defined(__PCD__).................... float48 CEIL_FLOOR(float48 x, unsigned int8 n).................... {.................... float48 y, res;.................... unsigned int16 l;.................... int1 s;........................................ s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y <= 32768.0).................... res = (float48)(unsigned int16)y;........................................ else if (y < 10000000.0).................... {.................... l = (unsigned int16)(y/32768.0);.................... y = 32768.0*(y/32768.0 - (float48)l);.................... res = 32768.0*(float32)l;.................... res += (float48)(unsigned int16)y;.................... }........................................ else.................... res = y;........................................ y = y - (float48)(unsigned int16)y;........................................ if (s).................... res = -res;........................................ if (y != 0).................... {.................... if (s == 1 && n == 0).................... res -= 1.0;........................................ if (s == 0 && n == 1).................... res += 1.0;.................... }.................... if (x == 0).................... res = 0;........................................ return (res);.................... }............................................................ // Overloaded function CEIL_FLOOR() for data type - Float64.................... float64 CEIL_FLOOR(float64 x, unsigned int8 n).................... {.................... float64 y, res;.................... unsigned int16 l;.................... int1 s;........................................ s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y <= 32768.0).................... res = (float64)(unsigned int16)y;........................................ else if (y < 10000000.0).................... {.................... l = (unsigned int16)(y/32768.0);.................... y = 32768.0*(y/32768.0 - (float64)l);.................... res = 32768.0*(float64)l;.................... res += (float64)(unsigned int16)y;.................... }........................................ else.................... res = y;........................................ y = y - (float64)(unsigned int16)y;........................................ if (s).................... res = -res;........................................ if (y != 0).................... {.................... if (s == 1 && n == 0).................... res -= 1.0;........................................ if (s == 0 && n == 1).................... res += 1.0;.................... }.................... if (x == 0).................... res = 0;........................................ return (res);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float floor(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : rounds down the number x..................... // Date : N/A.................... //.................... float32 floor(float32 x).................... {.................... return CEIL_FLOOR(x, 0);.................... }.................... // Following 2 functions are overloaded functions of floor() for PCD.................... // Overloaded function floor() for data type - Float48.................... #if defined(__PCD__).................... float48 floor(float48 x).................... {.................... return CEIL_FLOOR(x, 0);.................... }........................................ // Overloaded function floor() for data type - Float64.................... float64 floor(float64 x).................... {.................... return CEIL_FLOOR(x, 0);.................... }.................... #endif............................................................ ////////////////////////////////////////////////////////////////////////////.................... // float ceil(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : rounds up the number x..................... // Date : N/A.................... //.................... float32 ceil(float32 x).................... {.................... return CEIL_FLOOR(x, 1);.................... }.................... // Following 2 functions are overloaded functions of ceil() for PCD.................... // Overloaded function ceil() for data type - Float48.................... #if defined(__PCD__).................... float48 ceil(float48 x).................... {.................... return CEIL_FLOOR(x, 1);.................... }........................................ // Overloaded function ceil() for data type - Float64.................... float64 ceil(float64 x).................... {.................... return CEIL_FLOOR(x, 1);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float fabs(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the absolute value of floating point number x.................... // Returns : returns the absolute value of x.................... // Date : N/A.................... //.................... #define fabs abs........................................ ////////////////////////////////////////////////////////////////////////////.................... // float fmod(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the floating point remainder of x/y.................... // Returns : returns the value of x= i*y, for some integer i such that, if y.................... // is non zero, the result has the same isgn of x na dmagnitude less than the.................... // magnitude of y. If y is zero then a domain error occurs..................... // Date : N/A.................... //........................................ float fmod(float32 x,float32 y).................... {.................... float32 i;.................... if (y!=0.0).................... {.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y);.................... return(x-(i*y));.................... }.................... else.................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... }.................... //Overloaded function for fmod() for PCD.................... // Overloaded function fmod() for data type - Float48.................... #if defined(__PCD__).................... float48 fmod(float48 x,float48 y).................... {.................... float48 i;.................... if (y!=0.0).................... {.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y);.................... return(x-(i*y));.................... }.................... else.................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... }.................... // Overloaded function fmod() for data type - Float64.................... float64 fmod(float64 x,float64 y).................... {.................... float64 i;.................... if (y!=0.0).................... {.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y);.................... return(x-(i*y));.................... }.................... else.................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... }.................... #endif.................... //////////////////// Exponential and logarithmic functions ////////////////////.................... ////////////////////////////////////////////////////////////////////////////.................... // float exp(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the value (e^x).................... // Date : N/A.................... //.................... #define LN2 0.6931471805599453........................................ float const pe[6] = {0.000207455774, 0.00127100575, 0.00965065093,.................... 0.0554965651, 0.240227138, 0.693147172};............................................................ float32 exp(float32 x).................... {.................... float32 y, res, r;.................... #if defined(__PCD__).................... int8 data1;.................... #endif.................... signed int8 n;.................... int1 s;.................... #ifdef _ERRNO.................... if(x > 88.722838).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... n = (signed int16)(x/LN2);.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... n = -n;.................... y = -y;.................... }........................................ res = 0.0;.................... #if !defined(__PCD__).................... *((unsigned int8 *)(&res)) = n + 0x7F;.................... #endif........................................ #if defined(__PCD__) // Takes care of IEEE format for PCD.................... data1 = n+0x7F;.................... if(bit_test(data1,0)).................... bit_set(*(((unsigned int8 *)(&res)+2)),7);.................... rotate_right(&data1,1);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&res)+3)) = data1;.................... #endif........................................ y = y/LN2 - (float32)n;........................................ r = pe[0]*y + pe[1];.................... r = r*y + pe[2];.................... r = r*y + pe[3];.................... r = r*y + pe[4];.................... r = r*y + pe[5];........................................ res = res*(1.0 + y*r);........................................ if (s).................... res = 1.0/res;.................... return(res);.................... }............................................................ //Overloaded function for exp() for PCD.................... // Overloaded function exp() for data type - Float48.................... #if defined(__PCD__).................... float48 exp(float48 x).................... {.................... float48 y, res, r;.................... int8 data1;.................... signed int8 n;.................... int1 s;.................... #ifdef _ERRNO.................... if(x > 88.722838).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... n = (signed int16)(x/LN2);.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... n = -n;.................... y = -y;.................... }........................................ res = 0.0;........................................ data1 = n+0x7F;.................... if(bit_test(data1,0)).................... bit_set(*(((unsigned int8 *)(&res)+4)),7);.................... rotate_right(&data1,1);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&res)+5)) = data1;........................................ y = y/LN2 - (float48)n;........................................ r = pe[0]*y + pe[1];.................... r = r*y + pe[2];.................... r = r*y + pe[3];.................... r = r*y + pe[4];.................... r = r*y + pe[5];........................................ res = res*(1.0 + y*r);........................................ if (s).................... res = 1.0/res;.................... return(res);.................... }........................................ // Overloaded function exp() for data type - Float64.................... float64 exp(float64 x).................... {.................... float64 y, res, r;.................... unsigned int16 data1, data2;.................... unsigned int16 *p;.................... signed int16 n;.................... int1 s;.................... #ifdef _ERRNO.................... if(x > 709.7827128).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... n = (signed int16)(x/LN2);.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... n = -n;.................... y = -y;.................... }........................................ res = 0.0;........................................ #if !defined(__PCD__).................... *((unsigned int16 *)(&res)) = n + 0x7F;.................... #endif.................... p= (((unsigned int16 *)(&res))+3);.................... data1 = *p;.................... data2 = *p;.................... data1 = n + 0x3FF;.................... data1 = data1 <<4;.................... if(bit_test(data2,15)).................... bit_set(data1,15);.................... data2 = data2 & 0x000F;.................... data1 ^= data2;........................................ *(((unsigned int16 *)(&res)+3)) = data1;............................................................ y = y/LN2 - (float64)n;........................................ r = pe[0]*y + pe[1];.................... r = r*y + pe[2];.................... r = r*y + pe[3];.................... r = r*y + pe[4];.................... r = r*y + pe[5];........................................ res = res*(1.0 + y*r);........................................ if (s).................... res = 1.0/res;.................... return(res);.................... }........................................ #ENDIF............................................................ /************************************************************/........................................ float32 const pl[4] = {0.45145214, -9.0558803, 26.940971, -19.860189};.................... float32 const ql[4] = {1.0000000, -8.1354259, 16.780517, -9.9300943};........................................ ////////////////////////////////////////////////////////////////////////////.................... // float log(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the the natural log of x.................... // Date : N/A.................... //.................... float32 log(float32 x).................... {.................... float32 y, res, r, y2;.................... #if defined(__PCD__).................... unsigned int8 data1,data2;.................... #endif.................... signed int8 n;.................... #ifdef _ERRNO.................... if(x <0).................... {.................... errno=EDOM;.................... }.................... if(x ==0).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... y = x;........................................ if (y != 1.0).................... {.................... #if !defined(__PCD__).................... *((unsigned int8 *)(&y)) = 0x7E;.................... #endif........................................ #if defined(__PCD__) // Takes care of IEEE format.................... data2 = *(((unsigned int8 *)(&y))+3);.................... *(((unsigned int8 *)(&y))+3) = 0x3F;.................... data1 = *(((unsigned int8 *)(&y))+2);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&y))+2) = data1;.................... if(bit_test(data2,7)).................... bit_set(*(((unsigned int8 *)(&y))+3),7);.................... #endif........................................ y = (y - 1.0)/(y + 1.0);........................................ y2=y*y;........................................ res = pl[0]*y2 + pl[1];.................... res = res*y2 + pl[2];.................... res = res*y2 + pl[3];........................................ r = ql[0]*y2 + ql[1];.................... r = r*y2 + ql[2];.................... r = r*y2 + ql[3];........................................ res = y*res/r;.................... #if !defined(__PCD__).................... n = *((unsigned int8 *)(&x)) - 0x7E;.................... #endif.................... #if defined(__PCD__).................... data1 = *(((unsigned int8 *)(&x)+3));.................... rotate_left(&data1,1);.................... data2 = *(((unsigned int8 *)(&x)+2));.................... if(bit_test (data2,7)).................... bit_set(data1,0);.................... n = data1 - 0x7E;.................... #endif........................................ if (n<0).................... r = -(float32)-n;.................... else.................... r = (float32)n;........................................ res += r*LN2;.................... }........................................ else.................... res = 0.0;........................................ return(res);.................... }........................................ //Overloaded function for log() for PCD.................... // Overloaded function log() for data type - Float48.................... #if defined(__PCD__).................... float48 log(float48 x).................... {.................... float48 y, res, r, y2;.................... unsigned int8 data1,data2;.................... signed int8 n;.................... #ifdef _ERRNO.................... if(x <0).................... {.................... errno=EDOM;.................... }.................... if(x ==0).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... y = x;........................................ if (y != 1.0).................... {........................................ #if !defined(__PCD__).................... *((unsigned int8 *)(&y)) = 0x7E;.................... #endif.................... data2 = *(((unsigned int8 *)(&y))+5);.................... *(((unsigned int8 *)(&y))+5) = 0x3F;.................... data1 = *(((unsigned int8 *)(&y))+4);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&y))+4) = data1;........................................ if(bit_test(data2,7)).................... bit_set(*(((unsigned int8 *)(&y))+4),7);.................... y = (y - 1.0)/(y + 1.0);........................................ y2=y*y;........................................ res = pl[0]*y2 + pl[1];.................... res = res*y2 + pl[2];.................... res = res*y2 + pl[3];........................................ r = ql[0]*y2 + ql[1];.................... r = r*y2 + ql[2];.................... r = r*y2 + ql[3];........................................ res = y*res/r;........................................ data1 = *(((unsigned int8 *)(&x)+5));.................... rotate_left(&data1,1);.................... data2 = *(((unsigned int8 *)(&x)+4));.................... if(bit_test (data2,7)).................... bit_set(data1,0);........................................ n = data1 - 0x7E;........................................ if (n<0).................... r = -(float48)-n;.................... else.................... r = (float48)n;........................................ res += r*LN2;.................... }........................................ else.................... res = 0.0;........................................ return(res);.................... }........................................ // Overloaded function log() for data type - Float48.................... #if defined(__PCD__).................... float32 const pl_64[4] = {0.45145214, -9.0558803, 26.940971, -19.860189};.................... float32 const ql_64[4] = {1.0000000, -8.1354259, 16.780517, -9.9300943};.................... #endif.................... float64 log(float64 x).................... {.................... float64 y, res, r, y2;.................... unsigned int16 data1,data2;.................... unsigned int16 *p;.................... signed int16 n;.................... #ifdef _ERRNO.................... if(x <0).................... {.................... errno=EDOM;.................... }.................... if(x ==0).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... y = x;........................................ if (y != 1.0).................... {.................... #if !defined(__PCD__).................... *((unsigned int8 *)(&y)) = 0x7E;.................... #endif.................... p= (((unsigned int16 *)(&y))+3);.................... data1 = *p;.................... data2 = *p;.................... data1 = 0x3FE;.................... data1 = data1 <<4;.................... if(bit_test (data2,15)).................... bit_set(data1,15);.................... data2 = data2 & 0x000F;.................... data1 ^=data2;........................................ *p = data1;........................................ y = (y - 1.0)/(y + 1.0);........................................ y2=y*y;........................................ res = pl_64[0]*y2 + pl_64[1];.................... res = res*y2 + pl_64[2];.................... res = res*y2 + pl_64[3];........................................ r = ql_64[0]*y2 + ql_64[1];.................... r = r*y2 + ql_64[2];.................... r = r*y2 + ql_64[3];........................................ res = y*res/r;........................................ p= (((unsigned int16 *)(&x))+3);.................... data1 = *p;.................... bit_clear(data1,15);.................... data1 = data1 >>4;.................... n = data1 - 0x3FE;............................................................ if (n<0).................... r = -(float64)-n;.................... else.................... r = (float64)n;........................................ res += r*LN2;.................... }........................................ else.................... res = 0.0;........................................ return(res);.................... }.................... #endif............................................................ #define LN10 2.3025850929940456........................................ ////////////////////////////////////////////////////////////////////////////.................... // float log10(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the the log base 10 of x.................... // Date : N/A.................... //.................... float32 log10(float32 x).................... {.................... float32 r;........................................ r = log(x);.................... r = r/LN10;.................... return(r);.................... }........................................ //Overloaded functions for log10() for PCD.................... // Overloaded function log10() for data type - Float48.................... #if defined(__PCD__).................... float48 log10(float48 x).................... {.................... float48 r;........................................ r = log(x);.................... r = r/LN10;.................... return(r);.................... }........................................ // Overloaded function log10() for data type - Float64.................... float64 log10(float64 x).................... {.................... float64 r;........................................ r = log(x);.................... r = r/LN10;.................... return(r);.................... }.................... #endif.................... ////////////////////////////////////////////////////////////////////////////.................... // float modf(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description :breaks the argument value int integral and fractional parts,.................... // ach of which have the same sign as the argument. It stores the integral part.................... // as a float in the object pointed to by the iptr.................... // Returns : returns the signed fractional part of value..................... // Date : N/A.................... //........................................ float32 modf(float32 value,float32 *iptr).................... {.................... *iptr=(value < 0.0)? ceil(value): floor(value);.................... return(value - *iptr);.................... }.................... //Overloaded functions for modf() for PCD.................... // Overloaded function modf() for data type - Float48.................... #if defined(__PCD__).................... float48 modf(float48 value,float48 *iptr).................... {.................... *iptr=(value < 0.0)? ceil(value): floor(value);.................... return(value - *iptr);.................... }.................... // Overloaded function modf() for data type - Float64.................... float64 modf(float64 value,float64 *iptr).................... {.................... *iptr=(value < 0.0)? ceil(value): floor(value);.................... return(value - *iptr);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float pwr(float x,float y).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the value (x^y).................... // Date : N/A.................... // Note : 0 is returned when the function will generate an imaginary number.................... //.................... float32 pwr(float32 x,float32 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... //Overloaded functions for pwr() for PCD.................... // Overloaded function pwr() for data type - Float48.................... #if defined(__PCD__).................... float48 pwr(float48 x,float48 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... // Overloaded function pwr() for data type - Float64.................... float64 pwr(float64 x,float64 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... #endif........................................ //////////////////// Power functions ////////////////////........................................ ////////////////////////////////////////////////////////////////////////////.................... // float pow(float x,float y).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the value (x^y).................... // Date : N/A.................... // Note : 0 is returned when the function will generate an imaginary number.................... //.................... float32 pow(float32 x,float32 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... //Overloaded functions for pow() for PCD.................... // Overloaded function for pow() data type - Float48.................... #if defined(__PCD__).................... float48 pow(float48 x,float48 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }........................................ // Overloaded function pow() for data type - Float64.................... float64 pow(float64 x,float64 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float sqrt(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the square root of x.................... // Date : N/A.................... //.................... float32 sqrt(float32 x).................... {.................... float32 y, res;.................... #if defined(__PCD__).................... unsigned int16 data1,data2;.................... #endif.................... BYTE *p;........................................ #ifdef _ERRNO.................... if(x < 0).................... {.................... errno=EDOM;.................... }.................... #endif........................................ if( x<=0.0).................... return(0.0);........................................ y=x;........................................ #if !defined(__PCD__).................... p=&y;.................... (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1);.................... #endif........................................ #if defined(__PCD__).................... p = (((unsigned int8 *)(&y))+3);.................... data1 = *(((unsigned int8 *)(&y))+3);.................... data2 = *(((unsigned int8 *)(&y))+2);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1 = ((data1+127) >>1);.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+3) = data1;.................... *(((unsigned int8 *)(&y))+2) = data2;........................................ #endif........................................ do {.................... res=y;.................... y+=(x/y);........................................ #if !defined(__PCD__).................... (*p)--;.................... #endif........................................ #if defined(__PCD__).................... data1 = *(((unsigned int8 *)(&y))+3);.................... data2 = *(((unsigned int8 *)(&y))+2);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1--;.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+3) = data1;.................... *(((unsigned int8 *)(&y))+2) = data2;........................................ #endif.................... } while(res != y);........................................ return(res);.................... }.................... //Overloaded functions for sqrt() for PCD.................... // Overloaded function sqrt() for data type - Float48.................... #if defined(__PCD__).................... float48 sqrt(float48 x).................... {.................... float48 y, res;.................... unsigned int16 data1,data2;.................... BYTE *p;........................................ #ifdef _ERRNO.................... if(x < 0).................... {.................... errno=EDOM;.................... }.................... #endif........................................ if( x<=0.0).................... return(0.0);........................................ y=x;........................................ #if !defined(__PCD__).................... p=&y;.................... (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1);.................... #endif........................................ #if defined(__PCD__).................... p = (((unsigned int8 *)(&y))+5);.................... data1 = *(((unsigned int8 *)(&y))+5);.................... data2 = *(((unsigned int8 *)(&y))+4);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1 = ((data1+127) >>1);.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+5) = data1;.................... *(((unsigned int8 *)(&y))+4) = data2;........................................ #endif........................................ do {.................... res=y;.................... y+=(x/y);........................................ #if !defined(__PCD__).................... (*p)--;.................... #endif........................................ data1 = *(((unsigned int8 *)(&y))+5);.................... data2 = *(((unsigned int8 *)(&y))+4);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1--;.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+5) = data1;.................... *(((unsigned int8 *)(&y))+4) = data2;........................................ } while(res != y);........................................ return(res);.................... }........................................ // Overloaded function sqrt() for data type - Float64.................... float64 sqrt(float64 x).................... {.................... float64 y, res;.................... unsigned int16 *p;.................... unsigned int16 temp1,temp2;........................................ #ifdef _ERRNO.................... if(x < 0).................... {.................... errno=EDOM;.................... }.................... #endif........................................ if( x<=0.0).................... return(0.0);........................................ y=x;.................... p= (((unsigned int16 *)(&y))+3);.................... temp1 = *p;.................... temp2 = *p;.................... bit_clear(temp1,15);.................... temp1 = (temp1>>4)+1023;.................... temp1 = temp1 >> 1;.................... temp1 = (temp1<<4) & 0xFFF0;.................... if(bit_test(temp2,15)).................... bit_set(temp1,15);.................... temp2 = temp2 & 0x000F;.................... temp1 ^= temp2;........................................ (*p) = temp1;........................................ do {.................... res=y;.................... y+=(x/y);.................... temp1 = *p;.................... temp2 = *p;.................... bit_clear(temp1,15);.................... temp1 = (temp1>>4);.................... temp1--;.................... temp1 = (temp1<<4) & 0xFFF0;.................... if(bit_test(temp2,15)).................... bit_set(temp1,15);.................... temp2 = temp2 & 0x000F;.................... temp1 ^= temp2;.................... (*p) = temp1;........................................ } while(res != y);........................................ return(res);.................... }.................... #endif........................................ ////////////////////////////// Trig Functions //////////////////////////////.................... #ifdef PI_DIV_BY_TWO.................... #undef PI_DIV_BY_TWO.................... #endif.................... #define PI_DIV_BY_TWO 1.5707963267948966.................... #ifdef TWOBYPI.................... #undef TWOBYPI.................... #define TWOBYPI 0.6366197723675813.................... #endif.................... ////////////////////////////////////////////////////////////////////////////.................... // float cos(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the cosine value of the angle x, which is in radian.................... // Date : 9/20/2001.................... //.................... float32 cos(float32 x).................... {.................... float32 y, t, t2 = 1.0;.................... unsigned int8 quad, i;.................... float32 frac;.................... float32 p[6] = { //by the series definition for cosine.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ).................... 0.04166666666667,.................... -0.00138888888889,.................... 0.00002480158730,.................... -0.00000027557319,.................... 0.00000000208767,.................... //-0.00000000001147,.................... // 0.00000000000005.................... };........................................ if (x < 0) x = -x; // absolute value of input........................................ quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input.................... quad = quad % 4; // quadrant (0 to 3)........................................ if (quad == 0 || quad == 2).................... t = frac * PI_DIV_BY_TWO;.................... else if (quad == 1).................... t = (1-frac) * PI_DIV_BY_TWO;.................... else // should be 3.................... t = (frac-1) * PI_DIV_BY_TWO;........................................ y = 1.0;.................... t = t * t;.................... for (i = 0; i <= 5; i++).................... {.................... t2 = t2 * t;.................... y = y + p[i] * t2;.................... }........................................ if (quad == 2 || quad == 1).................... y = -y; // correct sign........................................ return (y);.................... }............................................................ //Overloaded functions for cos() for PCD.................... // Overloaded function cos() for data type - Float48.................... #if defined(__PCD__).................... float48 cos(float48 x).................... {.................... float48 y, t, t2 = 1.0;.................... unsigned int8 quad, i;.................... float48 frac;.................... float48 p[6] = { //by the series definition for cosine.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ).................... 0.04166666666667,.................... -0.00138888888889,.................... 0.00002480158730,.................... -0.00000027557319,.................... 0.00000000208767,.................... //-0.00000000001147,.................... // 0.00000000000005.................... };........................................ if (x < 0) x = -x; // absolute value of input........................................ quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input.................... quad = quad % 4; // quadrant (0 to 3)........................................ if (quad == 0 || quad == 2).................... t = frac * PI_DIV_BY_TWO;.................... else if (quad == 1).................... t = (1-frac) * PI_DIV_BY_TWO;.................... else // should be 3.................... t = (frac-1) * PI_DIV_BY_TWO;........................................ y = 0.999999999781;.................... t = t * t;.................... for (i = 0; i <= 5; i++).................... {.................... t2 = t2 * t;.................... y = y + p[i] * t2;.................... }........................................ if (quad == 2 || quad == 1).................... y = -y; // correct sign........................................ return (y);.................... }........................................ // Overloaded function cos() for data type - Float48.................... float64 cos(float64 x).................... {.................... float64 y, t, t2 = 1.0;.................... unsigned int8 quad, i;.................... float64 frac;.................... float64 p[6] = { //by the series definition for cosine.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ).................... 0.04166666666667,.................... -0.00138888888889,.................... 0.00002480158730,.................... -0.00000027557319,.................... 0.00000000208767,.................... //-0.00000000001147,.................... // 0.00000000000005.................... };........................................ if (x < 0) x = -x; // absolute value of input........................................ quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input.................... quad = quad % 4; // quadrant (0 to 3)........................................ if (quad == 0 || quad == 2).................... t = frac * PI_DIV_BY_TWO;.................... else if (quad == 1).................... t = (1-frac) * PI_DIV_BY_TWO;.................... else // should be 3.................... t = (frac-1) * PI_DIV_BY_TWO;........................................ y = 0.999999999781;.................... t = t * t;.................... for (i = 0; i <= 5; i++).................... {.................... t2 = t2 * t;.................... y = y + p[i] * t2;.................... }........................................ if (quad == 2 || quad == 1).................... y = -y; // correct sign........................................ return (y);.................... }........................................ #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float sin(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the sine value of the angle x, which is in radian.................... // Date : 9/20/2001.................... //.................... float32 sin(float32 x).................... {.................... return cos(x - PI_DIV_BY_TWO);.................... }........................................ //Overloaded functions for sin() for PCD.................... // Overloaded function sin() for data type - Float48.................... #if defined(__PCD__).................... float48 sin(float48 x).................... {.................... return cos(x - PI_DIV_BY_TWO);.................... }........................................ // Overloaded function sin() for data type - Float48.................... float64 sin(float64 x).................... {.................... return cos(x - PI_DIV_BY_TWO);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float tan(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the tangent value of the angle x, which is in radian.................... // Date : 9/20/2001.................... //.................... float32 tan(float32 x).................... {.................... float32 c, s;........................................ c = cos(x);.................... if (c == 0.0).................... return (1.0e+36);........................................ s = sin(x);.................... return(s/c);.................... }.................... //Overloaded functions for tan() for PCD.................... // Overloaded function tan() for data type - Float48.................... #if defined(__PCD__).................... float48 tan(float48 x).................... {.................... float48 c, s;........................................ c = cos(x);.................... if (c == 0.0).................... return (1.0e+36);........................................ s = sin(x);.................... return(s/c);.................... }........................................ // Overloaded function tan() for data type - Float48.................... float64 tan(float64 x).................... {.................... float64 c, s;........................................ c = cos(x);.................... if (c == 0.0).................... return (1.0e+36);........................................ s = sin(x);.................... return(s/c);.................... }.................... #endif........................................ float32 const pas[3] = {0.49559947, -4.6145309, 5.6036290};.................... float32 const qas[3] = {1.0000000, -5.5484666, 5.6036290};........................................ float32 ASIN_COS(float32 x, unsigned int8 n).................... {.................... float32 y, res, r, y2;.................... int1 s;.................... #ifdef _ERRNO.................... if(x <-1 || x > 1).................... {.................... errno=EDOM;.................... }.................... #endif.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 0.5).................... {.................... y = sqrt((1.0 - y)/2.0);.................... n += 2;.................... }........................................ y2=y*y;........................................ res = pas[0]*y2 + pas[1];.................... res = res*y2 + pas[2];........................................ r = qas[0]*y2 + qas[1];.................... r = r*y2 + qas[2];........................................ res = y*res/r;........................................ if (n & 2) // |x| > 0.5.................... res = PI_DIV_BY_TWO - 2.0*res;.................... if (s).................... res = -res;.................... if (n & 1) // take arccos.................... res = PI_DIV_BY_TWO - res;........................................ return(res);.................... }........................................ //Overloaded functions for ASIN_COS() for PCD.................... // Overloaded function ASIN_COS() for data type - Float48.................... #if defined(__PCD__).................... float48 ASIN_COS(float48 x, unsigned int8 n).................... {.................... float48 y, res, r, y2;.................... int1 s;.................... #ifdef _ERRNO.................... if(x <-1 || x > 1).................... {.................... errno=EDOM;.................... }.................... #endif.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 0.5).................... {.................... y = sqrt((1.0 - y)/2.0);.................... n += 2;.................... }........................................ y2=y*y;........................................ res = pas[0]*y2 + pas[1];.................... res = res*y2 + pas[2];........................................ r = qas[0]*y2 + qas[1];.................... r = r*y2 + qas[2];........................................ res = y*res/r;........................................ if (n & 2) // |x| > 0.5.................... res = PI_DIV_BY_TWO - 2.0*res;.................... if (s).................... res = -res;.................... if (n & 1) // take arccos.................... res = PI_DIV_BY_TWO - res;........................................ return(res);.................... }........................................ // Overloaded function ASIN_COS() for data type - Float64.................... float64 ASIN_COS(float64 x, unsigned int8 n).................... {.................... float64 y, res, r, y2;.................... int1 s;.................... #ifdef _ERRNO.................... if(x <-1 || x > 1).................... {.................... errno=EDOM;.................... }.................... #endif.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 0.5).................... {.................... y = sqrt((1.0 - y)/2.0);.................... n += 2;.................... }........................................ y2=y*y;........................................ res = pas[0]*y2 + pas[1];.................... res = res*y2 + pas[2];........................................ r = qas[0]*y2 + qas[1];.................... r = r*y2 + qas[2];........................................ res = y*res/r;........................................ if (n & 2) // |x| > 0.5.................... res = PI_DIV_BY_TWO - 2.0*res;.................... if (s).................... res = -res;.................... if (n & 1) // take arccos.................... res = PI_DIV_BY_TWO - res;........................................ return(res);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float asin(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the arcsine value of the value x..................... // Date : N/A.................... //.................... float32 asin(float32 x).................... {.................... float32 r;........................................ r = ASIN_COS(x, 0);.................... return(r);.................... }.................... //Overloaded functions for asin() for PCD.................... // Overloaded function asin() for data type - Float48.................... #if defined(__PCD__).................... float48 asin(float48 x).................... {.................... float48 r;........................................ r = ASIN_COS(x, 0);.................... return(r);.................... }........................................ // Overloaded function asin() for data type - Float64.................... float64 asin(float64 x).................... {.................... float64 r;........................................ r = ASIN_COS(x, 0);.................... return(r);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float acos(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the arccosine value of the value x..................... // Date : N/A.................... //.................... float32 acos(float32 x).................... {.................... float32 r;........................................ r = ASIN_COS(x, 1);.................... return(r);.................... }.................... //Overloaded functions for acos() for PCD.................... // Overloaded function acos() for data type - Float48.................... #if defined(__PCD__).................... float48 acos(float48 x).................... {.................... float48 r;........................................ r = ASIN_COS(x, 1);.................... return(r);.................... }........................................ // Overloaded function acos() for data type - Float64.................... float64 acos(float64 x).................... {.................... float64 r;........................................ r = ASIN_COS(x, 1);.................... return(r);.................... }.................... #endif........................................ float32 const pat[4] = {0.17630401, 5.6710795, 22.376096, 19.818457};.................... float32 const qat[4] = {1.0000000, 11.368190, 28.982246, 19.818457};........................................ ////////////////////////////////////////////////////////////////////////////.................... // float atan(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the arctangent value of the value x..................... // Date : N/A.................... //.................... float32 atan(float32 x).................... {.................... float32 y, res, r;.................... int1 s, flag;........................................ s = 0;*0800: BCF 4C.0.................... flag = 0;0801: BCF 4C.1.................... y = x;0802: MOVF 3F,W0803: MOVWF 430804: MOVF 3E,W0805: MOVWF 420806: MOVF 3D,W0807: MOVWF 410808: MOVF 3C,W0809: MOVWF 40........................................ if (x < 0)080A: MOVF 3F,W080B: MOVWF 50080C: MOVF 3E,W080D: MOVWF 4F080E: MOVF 3D,W080F: MOVWF 4E0810: MOVF 3C,W0811: MOVWF 4D0812: CLRF 540813: CLRF 530814: CLRF 520815: CLRF 510816: BCF 0A.30817: CALL 5DE0818: BSF 0A.30819: BTFSS 03.0081A: GOTO 01F.................... {.................... s = 1;081B: BSF 4C.0.................... y = -y;081C: MOVF 41,W081D: XORLW 80081E: MOVWF 41.................... }........................................ if (y > 1.0)081F: CLRF 500820: CLRF 4F0821: CLRF 4E0822: MOVLW 7F0823: MOVWF 4D0824: MOVF 43,W0825: MOVWF 540826: MOVF 42,W0827: MOVWF 530828: MOVF 41,W0829: MOVWF 52082A: MOVF 40,W082B: MOVWF 51082C: BCF 0A.3082D: CALL 5DE082E: BSF 0A.3082F: BTFSS 03.00830: GOTO 04A.................... {.................... y = 1.0/y;0831: CLRF 540832: CLRF 530833: CLRF 520834: MOVLW 7F0835: MOVWF 510836: MOVF 43,W0837: MOVWF 580838: MOVF 42,W0839: MOVWF 57083A: MOVF 41,W083B: MOVWF 56083C: MOVF 40,W083D: MOVWF 55083E: BCF 0A.3083F: CALL 3760840: BSF 0A.30841: MOVF 7A,W0842: MOVWF 430843: MOVF 79,W0844: MOVWF 420845: MOVF 78,W0846: MOVWF 410847: MOVF 77,W0848: MOVWF 40.................... flag = 1;0849: BSF 4C.1.................... }........................................ res = pat[0]*y*y + pat[1];084A: MOVLW 0A084B: MOVWF 54084C: MOVLW 89084D: MOVWF 53084E: MOVLW 34084F: MOVWF 520850: MOVLW 7C0851: MOVWF 510852: MOVF 43,W0853: MOVWF 580854: MOVF 42,W0855: MOVWF 570856: MOVF 41,W0857: MOVWF 560858: MOVF 40,W0859: MOVWF 55085A: BCF 0A.3085B: CALL 440085C: BSF 0A.3085D: MOVF 77,W085E: MOVWF 4D085F: MOVF 78,W0860: MOVWF 4E0861: MOVF 79,W0862: MOVWF 4F0863: MOVF 7A,W0864: MOVWF 500865: MOVWF 540866: MOVF 4F,W0867: MOVWF 530868: MOVF 4E,W0869: MOVWF 52086A: MOVF 4D,W086B: MOVWF 51086C: MOVF 43,W086D: MOVWF 58086E: MOVF 42,W086F: MOVWF 570870: MOVF 41,W0871: MOVWF 560872: MOVF 40,W0873: MOVWF 550874: BCF 0A.30875: CALL 4400876: BSF 0A.30877: MOVF 77,W0878: MOVWF 4D0879: MOVF 78,W087A: MOVWF 4E087B: MOVF 79,W087C: MOVWF 4F087D: MOVF 7A,W087E: MOVWF 50087F: BCF 03.10880: MOVF 50,W0881: MOVWF 540882: MOVF 4F,W0883: MOVWF 530884: MOVF 4E,W0885: MOVWF 520886: MOVF 4D,W0887: MOVWF 510888: MOVLW 7C0889: MOVWF 58088A: MOVLW 79088B: MOVWF 57088C: MOVLW 35088D: MOVWF 56088E: MOVLW 81088F: MOVWF 550890: BCF 0A.30891: CALL 61D0892: BSF 0A.30893: MOVF 7A,W0894: MOVWF 470895: MOVF 79,W0896: MOVWF 460897: MOVF 78,W0898: MOVWF 450899: MOVF 77,W089A: MOVWF 44.................... res = res*y*y + pat[2];089B: MOVF 47,W089C: MOVWF 54089D: MOVF 46,W089E: MOVWF 53089F: MOVF 45,W08A0: MOVWF 5208A1: MOVF 44,W08A2: MOVWF 5108A3: MOVF 43,W08A4: MOVWF 5808A5: MOVF 42,W08A6: MOVWF 5708A7: MOVF 41,W08A8: MOVWF 5608A9: MOVF 40,W08AA: MOVWF 5508AB: BCF 0A.308AC: CALL 44008AD: BSF 0A.308AE: MOVF 77,W08AF: MOVWF 4D08B0: MOVF 78,W08B1: MOVWF 4E08B2: MOVF 79,W08B3: MOVWF 4F08B4: MOVF 7A,W08B5: MOVWF 5008B6: MOVWF 5408B7: MOVF 4F,W08B8: MOVWF 5308B9: MOVF 4E,W08BA: MOVWF 5208BB: MOVF 4D,W08BC: MOVWF 5108BD: MOVF 43,W08BE: MOVWF 5808BF: MOVF 42,W08C0: MOVWF 5708C1: MOVF 41,W08C2: MOVWF 5608C3: MOVF 40,W08C4: MOVWF 5508C5: BCF 0A.308C6: CALL 44008C7: BSF 0A.308C8: MOVF 77,W08C9: MOVWF 4D08CA: MOVF 78,W08CB: MOVWF 4E08CC: MOVF 79,W08CD: MOVWF 4F08CE: MOVF 7A,W08CF: MOVWF 5008D0: BCF 03.108D1: MOVF 50,W08D2: MOVWF 5408D3: MOVF 4F,W08D4: MOVWF 5308D5: MOVF 4E,W08D6: MOVWF 5208D7: MOVF 4D,W08D8: MOVWF 5108D9: MOVLW 3F08DA: MOVWF 5808DB: MOVLW 0208DC: MOVWF 5708DD: MOVLW 3308DE: MOVWF 5608DF: MOVLW 8308E0: MOVWF 5508E1: BCF 0A.308E2: CALL 61D08E3: BSF 0A.308E4: MOVF 7A,W08E5: MOVWF 4708E6: MOVF 79,W08E7: MOVWF 4608E8: MOVF 78,W08E9: MOVWF 4508EA: MOVF 77,W08EB: MOVWF 44.................... res = res*y*y + pat[3];08EC: MOVF 47,W08ED: MOVWF 5408EE: MOVF 46,W08EF: MOVWF 5308F0: MOVF 45,W08F1: MOVWF 5208F2: MOVF 44,W08F3: MOVWF 5108F4: MOVF 43,W08F5: MOVWF 5808F6: MOVF 42,W08F7: MOVWF 5708F8: MOVF 41,W08F9: MOVWF 5608FA: MOVF 40,W08FB: MOVWF 5508FC: BCF 0A.308FD: CALL 44008FE: BSF 0A.308FF: MOVF 77,W0900: MOVWF 4D0901: MOVF 78,W0902: MOVWF 4E0903: MOVF 79,W0904: MOVWF 4F0905: MOVF 7A,W0906: MOVWF 500907: MOVWF 540908: MOVF 4F,W0909: MOVWF 53090A: MOVF 4E,W090B: MOVWF 52090C: MOVF 4D,W090D: MOVWF 51090E: MOVF 43,W090F: MOVWF 580910: MOVF 42,W0911: MOVWF 570912: MOVF 41,W0913: MOVWF 560914: MOVF 40,W0915: MOVWF 550916: BCF 0A.30917: CALL 4400918: BSF 0A.30919: MOVF 77,W091A: MOVWF 4D091B: MOVF 78,W091C: MOVWF 4E091D: MOVF 79,W091E: MOVWF 4F091F: MOVF 7A,W0920: MOVWF 500921: BCF 03.10922: MOVF 50,W0923: MOVWF 540924: MOVF 4F,W0925: MOVWF 530926: MOVF 4E,W0927: MOVWF 520928: MOVF 4D,W0929: MOVWF 51092A: MOVLW 33092B: MOVWF 58092C: MOVLW 8C092D: MOVWF 57092E: MOVLW 1E092F: MOVWF 560930: MOVLW 830931: MOVWF 550932: BCF 0A.30933: CALL 61D0934: BSF 0A.30935: MOVF 7A,W0936: MOVWF 470937: MOVF 79,W0938: MOVWF 460939: MOVF 78,W093A: MOVWF 45093B: MOVF 77,W093C: MOVWF 44........................................ r = qat[0]*y*y + qat[1];093D: CLRF 54093E: CLRF 53093F: CLRF 520940: MOVLW 7F0941: MOVWF 510942: MOVF 43,W0943: MOVWF 580944: MOVF 42,W0945: MOVWF 570946: MOVF 41,W0947: MOVWF 560948: MOVF 40,W0949: MOVWF 55094A: BCF 0A.3094B: CALL 440094C: BSF 0A.3094D: MOVF 77,W094E: MOVWF 4D094F: MOVF 78,W0950: MOVWF 4E0951: MOVF 79,W0952: MOVWF 4F0953: MOVF 7A,W0954: MOVWF 500955: MOVWF 540956: MOVF 4F,W0957: MOVWF 530958: MOVF 4E,W0959: MOVWF 52095A: MOVF 4D,W095B: MOVWF 51095C: MOVF 43,W095D: MOVWF 58095E: MOVF 42,W095F: MOVWF 570960: MOVF 41,W0961: MOVWF 560962: MOVF 40,W0963: MOVWF 550964: BCF 0A.30965: CALL 4400966: BSF 0A.30967: MOVF 77,W0968: MOVWF 4D0969: MOVF 78,W096A: MOVWF 4E096B: MOVF 79,W096C: MOVWF 4F096D: MOVF 7A,W096E: MOVWF 50096F: BCF 03.10970: MOVF 50,W0971: MOVWF 540972: MOVF 4F,W0973: MOVWF 530974: MOVF 4E,W0975: MOVWF 520976: MOVF 4D,W0977: MOVWF 510978: MOVLW 1B0979: MOVWF 58097A: MOVLW E4097B: MOVWF 57097C: MOVLW 35097D: MOVWF 56097E: MOVLW 82097F: MOVWF 550980: BCF 0A.30981: CALL 61D0982: BSF 0A.30983: MOVF 7A,W0984: MOVWF 4B0985: MOVF 79,W0986: MOVWF 4A0987: MOVF 78,W0988: MOVWF 490989: MOVF 77,W098A: MOVWF 48.................... r = r*y*y + qat[2];098B: MOVF 4B,W098C: MOVWF 54098D: MOVF 4A,W098E: MOVWF 53098F: MOVF 49,W0990: MOVWF 520991: MOVF 48,W0992: MOVWF 510993: MOVF 43,W0994: MOVWF 580995: MOVF 42,W0996: MOVWF 570997: MOVF 41,W0998: MOVWF 560999: MOVF 40,W099A: MOVWF 55099B: BCF 0A.3099C: CALL 440099D: BSF 0A.3099E: MOVF 77,W099F: MOVWF 4D09A0: MOVF 78,W09A1: MOVWF 4E09A2: MOVF 79,W09A3: MOVWF 4F09A4: MOVF 7A,W09A5: MOVWF 5009A6: MOVWF 5409A7: MOVF 4F,W09A8: MOVWF 5309A9: MOVF 4E,W09AA: MOVWF 5209AB: MOVF 4D,W09AC: MOVWF 5109AD: MOVF 43,W09AE: MOVWF 5809AF: MOVF 42,W09B0: MOVWF 5709B1: MOVF 41,W09B2: MOVWF 5609B3: MOVF 40,W09B4: MOVWF 5509B5: BCF 0A.309B6: CALL 44009B7: BSF 0A.309B8: MOVF 77,W09B9: MOVWF 4D09BA: MOVF 78,W09BB: MOVWF 4E09BC: MOVF 79,W09BD: MOVWF 4F09BE: MOVF 7A,W09BF: MOVWF 5009C0: BCF 03.109C1: MOVF 50,W09C2: MOVWF 5409C3: MOVF 4F,W09C4: MOVWF 5309C5: MOVF 4E,W09C6: MOVWF 5209C7: MOVF 4D,W09C8: MOVWF 5109C9: MOVLW A409CA: MOVWF 5809CB: MOVLW DB09CC: MOVWF 5709CD: MOVLW 6709CE: MOVWF 5609CF: MOVLW 8309D0: MOVWF 5509D1: BCF 0A.309D2: CALL 61D09D3: BSF 0A.309D4: MOVF 7A,W09D5: MOVWF 4B09D6: MOVF 79,W09D7: MOVWF 4A09D8: MOVF 78,W09D9: MOVWF 4909DA: MOVF 77,W09DB: MOVWF 48.................... r = r*y*y + qat[3];09DC: MOVF 4B,W09DD: MOVWF 5409DE: MOVF 4A,W09DF: MOVWF 5309E0: MOVF 49,W09E1: MOVWF 5209E2: MOVF 48,W09E3: MOVWF 5109E4: MOVF 43,W09E5: MOVWF 5809E6: MOVF 42,W09E7: MOVWF 5709E8: MOVF 41,W09E9: MOVWF 5609EA: MOVF 40,W09EB: MOVWF 5509EC: BCF 0A.309ED: CALL 44009EE: BSF 0A.309EF: MOVF 77,W09F0: MOVWF 4D09F1: MOVF 78,W09F2: MOVWF 4E09F3: MOVF 79,W09F4: MOVWF 4F09F5: MOVF 7A,W09F6: MOVWF 5009F7: MOVWF 5409F8: MOVF 4F,W09F9: MOVWF 5309FA: MOVF 4E,W09FB: MOVWF 5209FC: MOVF 4D,W09FD: MOVWF 5109FE: MOVF 43,W09FF: MOVWF 580A00: MOVF 42,W0A01: MOVWF 570A02: MOVF 41,W0A03: MOVWF 560A04: MOVF 40,W0A05: MOVWF 550A06: BCF 0A.30A07: CALL 4400A08: BSF 0A.30A09: MOVF 77,W0A0A: MOVWF 4D0A0B: MOVF 78,W0A0C: MOVWF 4E0A0D: MOVF 79,W0A0E: MOVWF 4F0A0F: MOVF 7A,W0A10: MOVWF 500A11: BCF 03.10A12: MOVF 50,W0A13: MOVWF 540A14: MOVF 4F,W0A15: MOVWF 530A16: MOVF 4E,W0A17: MOVWF 520A18: MOVF 4D,W0A19: MOVWF 510A1A: MOVLW 330A1B: MOVWF 580A1C: MOVLW 8C0A1D: MOVWF 570A1E: MOVLW 1E0A1F: MOVWF 560A20: MOVLW 830A21: MOVWF 550A22: BCF 0A.30A23: CALL 61D0A24: BSF 0A.30A25: MOVF 7A,W0A26: MOVWF 4B0A27: MOVF 79,W0A28: MOVWF 4A0A29: MOVF 78,W0A2A: MOVWF 490A2B: MOVF 77,W0A2C: MOVWF 48........................................ res = y*res/r;0A2D: MOVF 43,W0A2E: MOVWF 540A2F: MOVF 42,W0A30: MOVWF 530A31: MOVF 41,W0A32: MOVWF 520A33: MOVF 40,W0A34: MOVWF 510A35: MOVF 47,W0A36: MOVWF 580A37: MOVF 46,W0A38: MOVWF 570A39: MOVF 45,W0A3A: MOVWF 560A3B: MOVF 44,W0A3C: MOVWF 550A3D: BCF 0A.30A3E: CALL 4400A3F: BSF 0A.30A40: MOVF 77,W0A41: MOVWF 4D0A42: MOVF 78,W0A43: MOVWF 4E0A44: MOVF 79,W0A45: MOVWF 4F0A46: MOVF 7A,W0A47: MOVWF 500A48: MOVWF 540A49: MOVF 4F,W0A4A: MOVWF 530A4B: MOVF 4E,W0A4C: MOVWF 520A4D: MOVF 4D,W0A4E: MOVWF 510A4F: MOVF 4B,W0A50: MOVWF 580A51: MOVF 4A,W0A52: MOVWF 570A53: MOVF 49,W0A54: MOVWF 560A55: MOVF 48,W0A56: MOVWF 550A57: BCF 0A.30A58: CALL 3760A59: BSF 0A.30A5A: MOVF 7A,W0A5B: MOVWF 470A5C: MOVF 79,W0A5D: MOVWF 460A5E: MOVF 78,W0A5F: MOVWF 450A60: MOVF 77,W0A61: MOVWF 44............................................................ if (flag) // for |x| > 10A62: BTFSS 4C.10A63: GOTO 280.................... res = PI_DIV_BY_TWO - res;0A64: BSF 03.10A65: MOVLW DB0A66: MOVWF 540A67: MOVLW 0F0A68: MOVWF 530A69: MOVLW 490A6A: MOVWF 520A6B: MOVLW 7F0A6C: MOVWF 510A6D: MOVF 47,W0A6E: MOVWF 580A6F: MOVF 46,W0A70: MOVWF 570A71: MOVF 45,W0A72: MOVWF 560A73: MOVF 44,W0A74: MOVWF 550A75: BCF 0A.30A76: CALL 61D0A77: BSF 0A.30A78: MOVF 7A,W0A79: MOVWF 470A7A: MOVF 79,W0A7B: MOVWF 460A7C: MOVF 78,W0A7D: MOVWF 450A7E: MOVF 77,W0A7F: MOVWF 44.................... if (s)0A80: BTFSS 4C.00A81: GOTO 285.................... res = -res;0A82: MOVF 45,W0A83: XORLW 800A84: MOVWF 45........................................ return(res);0A85: MOVF 44,W0A86: MOVWF 770A87: MOVF 45,W0A88: MOVWF 780A89: MOVF 46,W0A8A: MOVWF 790A8B: MOVF 47,W0A8C: MOVWF 7A.................... }0A8D: BCF 0A.30A8E: BSF 0A.40A8F: GOTO 58C (RETURN).................... //Overloaded functions for atan() for PCD.................... // Overloaded function atan() for data type - Float48.................... #if defined(__PCD__).................... float48 atan(float48 x).................... {.................... float48 y, res, r;.................... int1 s, flag;........................................ s = 0;.................... flag = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 1.0).................... {.................... y = 1.0/y;.................... flag = 1;.................... }........................................ res = pat[0]*y*y + pat[1];.................... res = res*y*y + pat[2];.................... res = res*y*y + pat[3];........................................ r = qat[0]*y*y + qat[1];.................... r = r*y*y + qat[2];.................... r = r*y*y + qat[3];........................................ res = y*res/r;............................................................ if (flag) // for |x| > 1.................... res = PI_DIV_BY_TWO - res;.................... if (s).................... res = -res;........................................ return(res);.................... }........................................ // Overloaded function atan() for data type - Float64.................... float64 atan(float64 x).................... {.................... float64 y, res, r;.................... int1 s, flag;........................................ s = 0;.................... flag = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 1.0).................... {.................... y = 1.0/y;.................... flag = 1;.................... }........................................ res = pat[0]*y*y + pat[1];.................... res = res*y*y + pat[2];.................... res = res*y*y + pat[3];........................................ r = qat[0]*y*y + qat[1];.................... r = r*y*y + qat[2];.................... r = r*y*y + qat[3];........................................ res = y*res/r;............................................................ if (flag) // for |x| > 1.................... res = PI_DIV_BY_TWO - res;.................... if (s).................... res = -res;........................................ return(res);.................... }.................... #endif........................................ /////////////////////////////////////////////////////////////////////////////.................... // float atan2(float y, float x).................... /////////////////////////////////////////////////////////////////////////////.................... // Description :computes the principal value of arc tangent of y/x, using the.................... // signs of both the arguments to determine the quadrant of the return value.................... // Returns : returns the arc tangent of y/x..................... // Date : N/A.................... //........................................ float32 atan2(float32 y,float32 x).................... {.................... float32 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }........................................ //Overloaded functions for atan2() for PCD.................... // Overloaded function atan2() for data type - Float48.................... #if defined(__PCD__).................... float48 atan2(float48 y,float48 x).................... {.................... float48 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }........................................ // Overloaded function atan2() for data type - Float64.................... float64 atan2(float64 y,float64 x).................... {.................... float64 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }.................... #endif........................................ //////////////////// Hyperbolic functions ////////////////////........................................ ////////////////////////////////////////////////////////////////////////////.................... // float cosh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic cosine value of x.................... // Returns : returns the hyperbolic cosine value of x.................... // Date : N/A.................... //........................................ float32 cosh(float32 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }.................... //Overloaded functions for cosh() for PCD.................... // Overloaded function cosh() for data type - Float48.................... #if defined(__PCD__).................... float48 cosh(float48 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }........................................ // Overloaded function cosh() for data type - Float64.................... float64 cosh(float64 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float sinh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic sine value of x.................... // Returns : returns the hyperbolic sine value of x.................... // Date : N/A.................... //........................................ float32 sinh(float32 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }.................... //Overloaded functions for sinh() for PCD.................... // Overloaded function sinh() for data type - Float48.................... #if defined(__PCD__).................... float48 sinh(float48 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }........................................ // Overloaded function sinh() for data type - Float48.................... float64 sinh(float64 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float tanh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic tangent value of x.................... // Returns : returns the hyperbolic tangent value of x.................... // Date : N/A.................... //........................................ float32 tanh(float32 x).................... {.................... return(sinh(x)/cosh(x));.................... }.................... //Overloaded functions for tanh() for PCD.................... // Overloaded function tanh() for data type - Float48.................... #if defined(__PCD__).................... float48 tanh(float48 x).................... {.................... return(sinh(x)/cosh(x));.................... }........................................ // Overloaded function tanh() for data type - Float64.................... float64 tanh(float64 x).................... {.................... return(sinh(x)/cosh(x));.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float frexp(float x, signed int *exp).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : breaks a floating point number into a normalized fraction and an integral.................... // power of 2. It stores the integer in the signed int object pointed to by exp..................... // Returns : returns the value x, such that x is a double with magnitude in the interval.................... // [1/2,1) or zero, and value equals x times 2 raised to the power *exp.If value is zero,.................... // both parts of the result are zero..................... // Date : N/A.................... //........................................ #define LOG2 .30102999566398119521.................... float32 frexp(float32 x, signed int8 *exp).................... {.................... float32 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }........................................ //Overloaded functions for frexp() for PCD.................... // Overloaded function frexp() for data type - Float48.................... #if defined(__PCD__).................... float48 frexp(float48 x, signed int8 *exp).................... {.................... float48 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }........................................ // Overloaded function frexp() for data type - Float64.................... float64 frexp(float64 x, signed int8 *exp).................... {.................... float64 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }.................... #endif........................................ //////////////////////////////////////////////////////////////////////////////.................... // float ldexp(float x, signed int *exp).................... //////////////////////////////////////////////////////////////////////////////.................... // Description : multiplies a floating point number by an integral power of 2..................... // Returns : returns the value of x times 2 raised to the power exp..................... // Date : N/A.................... //........................................ float32 ldexp(float32 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... //Overloaded functions for ldexp() for PCD.................... // Overloaded function ldexp() for data type - Float48........................................ #if defined(__PCD__).................... float48 ldexp(float48 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... // Overloaded function ldexp() for data type - Float64.................... float64 ldexp(float64 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... #endif........................................ #endif............................................................ void main().................... {*0097: DATA 00,00*1000: CLRF 041001: BCF 03.71002: MOVLW 1F1003: ANDWF 03,F1004: MOVLW 711005: BSF 03.51006: MOVWF 0F1007: MOVF 0F,W1008: BCF 03.51009: BCF 20.7100A: MOVF 20,W100B: BSF 03.5100C: MOVWF 07100D: BCF 03.5100E: BSF 07.7100F: BSF 03.51010: BSF 03.61011: MOVF 09,W1012: ANDLW C01013: MOVWF 091014: BCF 03.61015: BCF 1F.41016: BCF 1F.51017: MOVLW 001018: BSF 03.61019: MOVWF 08101A: BCF 03.5101B: CLRF 07101C: CLRF 08101D: CLRF 09........................................ setup_adc_ports(NO_ANALOGS|VSS_VDD);*1021: BSF 03.51022: BSF 03.61023: MOVF 09,W1024: ANDLW C01025: MOVWF 091026: BCF 03.61027: BCF 1F.41028: BCF 1F.51029: MOVLW 00102A: BSF 03.6102B: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_2);102C: BCF 03.5102D: BCF 03.6102E: BCF 1F.6102F: BCF 1F.71030: BSF 03.51031: BCF 1F.71032: BCF 03.51033: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);1034: BCF 14.51035: BCF 20.51036: MOVF 20,W1037: BSF 03.51038: MOVWF 071039: BCF 03.5103A: BSF 20.4103B: MOVF 20,W103C: BSF 03.5103D: MOVWF 07103E: BCF 03.5103F: BCF 20.31040: MOVF 20,W1041: BSF 03.51042: MOVWF 071043: MOVLW 011044: BCF 03.51045: MOVWF 141046: MOVLW 001047: BSF 03.51048: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);1049: MOVF 01,W104A: ANDLW C7104B: IORLW 08104C: MOVWF 01.................... setup_timer_1(T1_DISABLED);104D: BCF 03.5104E: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);104F: MOVLW 001050: MOVWF 781051: MOVWF 121052: MOVLW 001053: BSF 03.51054: MOVWF 12.................... setup_ccp1(CCP_OFF);1055: BCF 03.51056: BSF 20.21057: MOVF 20,W1058: BSF 03.51059: MOVWF 07105A: BCF 03.5105B: CLRF 17105C: BSF 03.5105D: CLRF 1B105E: CLRF 1C105F: MOVLW 011060: MOVWF 1D.................... setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard1061: BCF 03.51062: BSF 03.61063: CLRF 071064: CLRF 081065: CLRF 09........................................ printf("Simple Thermomether \r\n",);1066: MOVLW 041067: MOVWF 0D1068: MOVLW 001069: MOVWF 0F106A: BCF 0A.4106B: BCF 03.6106C: GOTO 0BC106D: BSF 0A.4........................................ int16 data1, data2, data3;.................... signed int16 X, Y, Z;.................... float a, b;........................................ unsigned int8 XL,XH,YL,YH,ZL,ZH;............................................................ i2c_start();106E: BSF 20.4106F: MOVF 20,W1070: BSF 03.51071: MOVWF 071072: NOP1073: BCF 03.51074: BSF 20.31075: MOVF 20,W1076: BSF 03.51077: MOVWF 071078: NOP1079: BCF 03.5107A: BCF 07.4107B: BCF 20.4107C: MOVF 20,W107D: BSF 03.5107E: MOVWF 07107F: NOP1080: BCF 03.51081: BCF 07.31082: BCF 20.31083: MOVF 20,W1084: BSF 03.51085: MOVWF 07.................... I2C_Write(0x38);1086: MOVLW 381087: BCF 03.51088: MOVWF 3C1089: BCF 0A.4108A: CALL 104108B: BSF 0A.4.................... I2C_write(0x2A);108C: MOVLW 2A108D: MOVWF 3C108E: BCF 0A.4108F: CALL 1041090: BSF 0A.4........................................ I2C_write(0x01);1091: MOVLW 011092: MOVWF 3C1093: BCF 0A.41094: CALL 1041095: BSF 0A.4........................................ i2c_stop();1096: BCF 20.41097: MOVF 20,W1098: BSF 03.51099: MOVWF 07109A: NOP109B: BCF 03.5109C: BSF 20.3109D: MOVF 20,W109E: BSF 03.5109F: MOVWF 0710A0: BCF 03.510A1: BTFSS 07.310A2: GOTO 0A110A3: NOP10A4: GOTO 0A510A5: NOP10A6: BSF 20.410A7: MOVF 20,W10A8: BSF 03.510A9: MOVWF 0710AA: NOP................................................................................ while(TRUE).................... {........................................ data1=0;10AB: BCF 03.510AC: CLRF 2210AD: CLRF 21.................... data2=0 ;10AE: CLRF 2410AF: CLRF 23............................................................ //akcelerometr.................... int1 ack;.................... i2c_start(); // If the write command is acknowledged,10B0: BSF 20.410B1: MOVF 20,W10B2: BSF 03.510B3: MOVWF 0710B4: NOP10B5: BCF 03.510B6: BSF 20.310B7: MOVF 20,W10B8: BSF 03.510B9: MOVWF 0710BA: NOP10BB: BCF 03.510BC: BCF 07.410BD: BCF 20.410BE: MOVF 20,W10BF: BSF 03.510C0: MOVWF 0710C1: NOP10C2: BCF 03.510C3: BCF 07.310C4: BCF 20.310C5: MOVF 20,W10C6: BSF 03.510C7: MOVWF 07.................... ack = i2c_write(0x39);//hen the device is ready.10C8: MOVLW 3910C9: BCF 03.510CA: MOVWF 3C10CB: BCF 0A.410CC: CALL 10410CD: BSF 0A.410CE: MOVF 78,W10CF: BCF 3B.010D0: BTFSC 78.010D1: BSF 3B.0.................... i2c_stop();10D2: BCF 20.410D3: MOVF 20,W10D4: BSF 03.510D5: MOVWF 0710D6: NOP10D7: BCF 03.510D8: BSF 20.310D9: MOVF 20,W10DA: BSF 03.510DB: MOVWF 0710DC: BCF 03.510DD: BTFSS 07.310DE: GOTO 0DD10DF: NOP10E0: GOTO 0E110E1: NOP10E2: BSF 20.410E3: MOVF 20,W10E4: BSF 03.510E5: MOVWF 0710E6: NOP.................... ack=!ack;10E7: MOVLW 0110E8: BCF 03.510E9: XORWF 3B,F................................................................................ i2c_stop();10EA: BCF 20.410EB: MOVF 20,W10EC: BSF 03.510ED: MOVWF 0710EE: NOP10EF: BCF 03.510F0: BSF 20.310F1: MOVF 20,W10F2: BSF 03.510F3: MOVWF 0710F4: BCF 03.510F5: BTFSS 07.310F6: GOTO 0F510F7: NOP10F8: GOTO 0F910F9: NOP10FA: BSF 20.410FB: MOVF 20,W10FC: BSF 03.510FD: MOVWF 0710FE: NOP........................................ i2c_start();10FF: BCF 03.51100: BSF 20.41101: MOVF 20,W1102: BSF 03.51103: MOVWF 071104: NOP1105: BCF 03.51106: BSF 20.31107: MOVF 20,W1108: BSF 03.51109: MOVWF 07110A: NOP110B: BCF 03.5110C: BCF 07.4110D: BCF 20.4110E: MOVF 20,W110F: BSF 03.51110: MOVWF 071111: NOP1112: BCF 03.51113: BCF 07.31114: BCF 20.31115: MOVF 20,W1116: BSF 03.51117: MOVWF 07.................... I2C_Write(0x38);1118: MOVLW 381119: BCF 03.5111A: MOVWF 3C111B: BCF 0A.4111C: CALL 104111D: BSF 0A.4.................... I2C_write(0x01);111E: MOVLW 01111F: MOVWF 3C1120: BCF 0A.41121: CALL 1041122: BSF 0A.4.................... // i2c_stop();.................... i2c_start();1123: BSF 20.41124: MOVF 20,W1125: BSF 03.51126: MOVWF 071127: NOP1128: BCF 03.51129: BSF 20.3112A: MOVF 20,W112B: BSF 03.5112C: MOVWF 07112D: NOP112E: BCF 03.5112F: BTFSS 07.31130: GOTO 12F1131: BCF 07.41132: BCF 20.41133: MOVF 20,W1134: BSF 03.51135: MOVWF 071136: NOP1137: BCF 03.51138: BCF 07.31139: BCF 20.3113A: MOVF 20,W113B: BSF 03.5113C: MOVWF 07.................... I2C_Write(0x39);113D: MOVLW 39113E: BCF 03.5113F: MOVWF 3C1140: BCF 0A.41141: CALL 1041142: BSF 0A.4.................... XH=i2c_read(0);1143: CLRF 771144: BCF 0A.41145: CALL 14E1146: BSF 0A.41147: MOVF 78,W1148: MOVWF 36.................... i2c_stop();1149: BCF 20.4114A: MOVF 20,W114B: BSF 03.5114C: MOVWF 07114D: NOP114E: BCF 03.5114F: BSF 20.31150: MOVF 20,W1151: BSF 03.51152: MOVWF 071153: BCF 03.51154: BTFSS 07.31155: GOTO 1541156: NOP1157: GOTO 1581158: NOP1159: BSF 20.4115A: MOVF 20,W115B: BSF 03.5115C: MOVWF 07115D: NOP........................................ i2c_start();115E: BCF 03.5115F: BSF 20.41160: MOVF 20,W1161: BSF 03.51162: MOVWF 071163: NOP1164: BCF 03.51165: BSF 20.31166: MOVF 20,W1167: BSF 03.51168: MOVWF 071169: NOP116A: BCF 03.5116B: BCF 07.4116C: BCF 20.4116D: MOVF 20,W116E: BSF 03.5116F: MOVWF 071170: NOP1171: BCF 03.51172: BCF 07.31173: BCF 20.31174: MOVF 20,W1175: BSF 03.51176: MOVWF 07.................... I2C_Write(0x38);1177: MOVLW 381178: BCF 03.51179: MOVWF 3C117A: BCF 0A.4117B: CALL 104117C: BSF 0A.4.................... I2C_write(0x02);117D: MOVLW 02117E: MOVWF 3C117F: BCF 0A.41180: CALL 1041181: BSF 0A.4.................... // i2c_stop();.................... i2c_start();1182: BSF 20.41183: MOVF 20,W1184: BSF 03.51185: MOVWF 071186: NOP1187: BCF 03.51188: BSF 20.31189: MOVF 20,W118A: BSF 03.5118B: MOVWF 07118C: NOP118D: BCF 03.5118E: BTFSS 07.3118F: GOTO 18E1190: BCF 07.41191: BCF 20.41192: MOVF 20,W1193: BSF 03.51194: MOVWF 071195: NOP1196: BCF 03.51197: BCF 07.31198: BCF 20.31199: MOVF 20,W119A: BSF 03.5119B: MOVWF 07.................... I2C_Write(0x39);119C: MOVLW 39119D: BCF 03.5119E: MOVWF 3C119F: BCF 0A.411A0: CALL 10411A1: BSF 0A.4.................... XL=i2c_read(0);11A2: CLRF 7711A3: BCF 0A.411A4: CALL 14E11A5: BSF 0A.411A6: MOVF 78,W11A7: MOVWF 35.................... i2c_stop();11A8: BCF 20.411A9: MOVF 20,W11AA: BSF 03.511AB: MOVWF 0711AC: NOP11AD: BCF 03.511AE: BSF 20.311AF: MOVF 20,W11B0: BSF 03.511B1: MOVWF 0711B2: BCF 03.511B3: BTFSS 07.311B4: GOTO 1B311B5: NOP11B6: GOTO 1B711B7: NOP11B8: BSF 20.411B9: MOVF 20,W11BA: BSF 03.511BB: MOVWF 0711BC: NOP........................................ i2c_start();11BD: BCF 03.511BE: BSF 20.411BF: MOVF 20,W11C0: BSF 03.511C1: MOVWF 0711C2: NOP11C3: BCF 03.511C4: BSF 20.311C5: MOVF 20,W11C6: BSF 03.511C7: MOVWF 0711C8: NOP11C9: BCF 03.511CA: BCF 07.411CB: BCF 20.411CC: MOVF 20,W11CD: BSF 03.511CE: MOVWF 0711CF: NOP11D0: BCF 03.511D1: BCF 07.311D2: BCF 20.311D3: MOVF 20,W11D4: BSF 03.511D5: MOVWF 07.................... I2C_Write(0x38);11D6: MOVLW 3811D7: BCF 03.511D8: MOVWF 3C11D9: BCF 0A.411DA: CALL 10411DB: BSF 0A.4.................... I2C_write(0x03);11DC: MOVLW 0311DD: MOVWF 3C11DE: BCF 0A.411DF: CALL 10411E0: BSF 0A.4.................... // i2c_stop();.................... i2c_start();11E1: BSF 20.411E2: MOVF 20,W11E3: BSF 03.511E4: MOVWF 0711E5: NOP11E6: BCF 03.511E7: BSF 20.311E8: MOVF 20,W11E9: BSF 03.511EA: MOVWF 0711EB: NOP11EC: BCF 03.511ED: BTFSS 07.311EE: GOTO 1ED11EF: BCF 07.411F0: BCF 20.411F1: MOVF 20,W11F2: BSF 03.511F3: MOVWF 0711F4: NOP11F5: BCF 03.511F6: BCF 07.311F7: BCF 20.311F8: MOVF 20,W11F9: BSF 03.511FA: MOVWF 07.................... I2C_Write(0x39);11FB: MOVLW 3911FC: BCF 03.511FD: MOVWF 3C11FE: BCF 0A.411FF: CALL 1041200: BSF 0A.4.................... YH=i2c_read(0);1201: CLRF 771202: BCF 0A.41203: CALL 14E1204: BSF 0A.41205: MOVF 78,W1206: MOVWF 38.................... i2c_stop();1207: BCF 20.41208: MOVF 20,W1209: BSF 03.5120A: MOVWF 07120B: NOP120C: BCF 03.5120D: BSF 20.3120E: MOVF 20,W120F: BSF 03.51210: MOVWF 071211: BCF 03.51212: BTFSS 07.31213: GOTO 2121214: NOP1215: GOTO 2161216: NOP1217: BSF 20.41218: MOVF 20,W1219: BSF 03.5121A: MOVWF 07121B: NOP........................................ i2c_start();121C: BCF 03.5121D: BSF 20.4121E: MOVF 20,W121F: BSF 03.51220: MOVWF 071221: NOP1222: BCF 03.51223: BSF 20.31224: MOVF 20,W1225: BSF 03.51226: MOVWF 071227: NOP1228: BCF 03.51229: BCF 07.4122A: BCF 20.4122B: MOVF 20,W122C: BSF 03.5122D: MOVWF 07122E: NOP122F: BCF 03.51230: BCF 07.31231: BCF 20.31232: MOVF 20,W1233: BSF 03.51234: MOVWF 07.................... I2C_Write(0x38);1235: MOVLW 381236: BCF 03.51237: MOVWF 3C1238: BCF 0A.41239: CALL 104123A: BSF 0A.4.................... I2C_write(0x04);123B: MOVLW 04123C: MOVWF 3C123D: BCF 0A.4123E: CALL 104123F: BSF 0A.4.................... // i2c_stop();.................... i2c_start();1240: BSF 20.41241: MOVF 20,W1242: BSF 03.51243: MOVWF 071244: NOP1245: BCF 03.51246: BSF 20.31247: MOVF 20,W1248: BSF 03.51249: MOVWF 07124A: NOP124B: BCF 03.5124C: BTFSS 07.3124D: GOTO 24C124E: BCF 07.4124F: BCF 20.41250: MOVF 20,W1251: BSF 03.51252: MOVWF 071253: NOP1254: BCF 03.51255: BCF 07.31256: BCF 20.31257: MOVF 20,W1258: BSF 03.51259: MOVWF 07.................... I2C_Write(0x39);125A: MOVLW 39125B: BCF 03.5125C: MOVWF 3C125D: BCF 0A.4125E: CALL 104125F: BSF 0A.4.................... YL=i2c_read(0);1260: CLRF 771261: BCF 0A.41262: CALL 14E1263: BSF 0A.41264: MOVF 78,W1265: MOVWF 37.................... i2c_stop();1266: BCF 20.41267: MOVF 20,W1268: BSF 03.51269: MOVWF 07126A: NOP126B: BCF 03.5126C: BSF 20.3126D: MOVF 20,W126E: BSF 03.5126F: MOVWF 071270: BCF 03.51271: BTFSS 07.31272: GOTO 2711273: NOP1274: GOTO 2751275: NOP1276: BSF 20.41277: MOVF 20,W1278: BSF 03.51279: MOVWF 07127A: NOP........................................ i2c_start();127B: BCF 03.5127C: BSF 20.4127D: MOVF 20,W127E: BSF 03.5127F: MOVWF 071280: NOP1281: BCF 03.51282: BSF 20.31283: MOVF 20,W1284: BSF 03.51285: MOVWF 071286: NOP1287: BCF 03.51288: BCF 07.41289: BCF 20.4128A: MOVF 20,W128B: BSF 03.5128C: MOVWF 07128D: NOP128E: BCF 03.5128F: BCF 07.31290: BCF 20.31291: MOVF 20,W1292: BSF 03.51293: MOVWF 07.................... I2C_Write(0x38);1294: MOVLW 381295: BCF 03.51296: MOVWF 3C1297: BCF 0A.41298: CALL 1041299: BSF 0A.4.................... I2C_write(0x05);129A: MOVLW 05129B: MOVWF 3C129C: BCF 0A.4129D: CALL 104129E: BSF 0A.4.................... // i2c_stop();.................... i2c_start();129F: BSF 20.412A0: MOVF 20,W12A1: BSF 03.512A2: MOVWF 0712A3: NOP12A4: BCF 03.512A5: BSF 20.312A6: MOVF 20,W12A7: BSF 03.512A8: MOVWF 0712A9: NOP12AA: BCF 03.512AB: BTFSS 07.312AC: GOTO 2AB12AD: BCF 07.412AE: BCF 20.412AF: MOVF 20,W12B0: BSF 03.512B1: MOVWF 0712B2: NOP12B3: BCF 03.512B4: BCF 07.312B5: BCF 20.312B6: MOVF 20,W12B7: BSF 03.512B8: MOVWF 07.................... I2C_Write(0x39);12B9: MOVLW 3912BA: BCF 03.512BB: MOVWF 3C12BC: BCF 0A.412BD: CALL 10412BE: BSF 0A.4.................... ZH=i2c_read(0);12BF: CLRF 7712C0: BCF 0A.412C1: CALL 14E12C2: BSF 0A.412C3: MOVF 78,W12C4: MOVWF 3A.................... i2c_stop();12C5: BCF 20.412C6: MOVF 20,W12C7: BSF 03.512C8: MOVWF 0712C9: NOP12CA: BCF 03.512CB: BSF 20.312CC: MOVF 20,W12CD: BSF 03.512CE: MOVWF 0712CF: BCF 03.512D0: BTFSS 07.312D1: GOTO 2D012D2: NOP12D3: GOTO 2D412D4: NOP12D5: BSF 20.412D6: MOVF 20,W12D7: BSF 03.512D8: MOVWF 0712D9: NOP........................................ i2c_start();12DA: BCF 03.512DB: BSF 20.412DC: MOVF 20,W12DD: BSF 03.512DE: MOVWF 0712DF: NOP12E0: BCF 03.512E1: BSF 20.312E2: MOVF 20,W12E3: BSF 03.512E4: MOVWF 0712E5: NOP12E6: BCF 03.512E7: BCF 07.412E8: BCF 20.412E9: MOVF 20,W12EA: BSF 03.512EB: MOVWF 0712EC: NOP12ED: BCF 03.512EE: BCF 07.312EF: BCF 20.312F0: MOVF 20,W12F1: BSF 03.512F2: MOVWF 07.................... I2C_Write(0x38);12F3: MOVLW 3812F4: BCF 03.512F5: MOVWF 3C12F6: BCF 0A.412F7: CALL 10412F8: BSF 0A.4.................... I2C_write(0x06);12F9: MOVLW 0612FA: MOVWF 3C12FB: BCF 0A.412FC: CALL 10412FD: BSF 0A.4.................... // i2c_stop();.................... i2c_start();12FE: BSF 20.412FF: MOVF 20,W1300: BSF 03.51301: MOVWF 071302: NOP1303: BCF 03.51304: BSF 20.31305: MOVF 20,W1306: BSF 03.51307: MOVWF 071308: NOP1309: BCF 03.5130A: BTFSS 07.3130B: GOTO 30A130C: BCF 07.4130D: BCF 20.4130E: MOVF 20,W130F: BSF 03.51310: MOVWF 071311: NOP1312: BCF 03.51313: BCF 07.31314: BCF 20.31315: MOVF 20,W1316: BSF 03.51317: MOVWF 07.................... I2C_Write(0x39);1318: MOVLW 391319: BCF 03.5131A: MOVWF 3C131B: BCF 0A.4131C: CALL 104131D: BSF 0A.4.................... ZL=i2c_read(0);131E: CLRF 77131F: BCF 0A.41320: CALL 14E1321: BSF 0A.41322: MOVF 78,W1323: MOVWF 39.................... i2c_stop();1324: BCF 20.41325: MOVF 20,W1326: BSF 03.51327: MOVWF 071328: NOP1329: BCF 03.5132A: BSF 20.3132B: MOVF 20,W132C: BSF 03.5132D: MOVWF 07132E: BCF 03.5132F: BTFSS 07.31330: GOTO 32F1331: NOP1332: GOTO 3331333: NOP1334: BSF 20.41335: MOVF 20,W1336: BSF 03.51337: MOVWF 071338: NOP........................................ i2c_start();1339: BCF 03.5133A: BSF 20.4133B: MOVF 20,W133C: BSF 03.5133D: MOVWF 07133E: NOP133F: BCF 03.51340: BSF 20.31341: MOVF 20,W1342: BSF 03.51343: MOVWF 071344: NOP1345: BCF 03.51346: BCF 07.41347: BCF 20.41348: MOVF 20,W1349: BSF 03.5134A: MOVWF 07134B: NOP134C: BCF 03.5134D: BCF 07.3134E: BCF 20.3134F: MOVF 20,W1350: BSF 03.51351: MOVWF 07.................... I2C_Write(0x38);1352: MOVLW 381353: BCF 03.51354: MOVWF 3C1355: BCF 0A.41356: CALL 1041357: BSF 0A.4.................... I2C_write(0x00);1358: CLRF 3C1359: BCF 0A.4135A: CALL 104135B: BSF 0A.4.................... // i2c_stop();.................... i2c_start();135C: BSF 20.4135D: MOVF 20,W135E: BSF 03.5135F: MOVWF 071360: NOP1361: BCF 03.51362: BSF 20.31363: MOVF 20,W1364: BSF 03.51365: MOVWF 071366: NOP1367: BCF 03.51368: BTFSS 07.31369: GOTO 368136A: BCF 07.4136B: BCF 20.4136C: MOVF 20,W136D: BSF 03.5136E: MOVWF 07136F: NOP1370: BCF 03.51371: BCF 07.31372: BCF 20.31373: MOVF 20,W1374: BSF 03.51375: MOVWF 07.................... I2C_Write(0x39);1376: MOVLW 391377: BCF 03.51378: MOVWF 3C1379: BCF 0A.4137A: CALL 104137B: BSF 0A.4.................... ZL=i2c_read(0);137C: CLRF 77137D: BCF 0A.4137E: CALL 14E137F: BSF 0A.41380: MOVF 78,W1381: MOVWF 39.................... i2c_stop();1382: BCF 20.41383: MOVF 20,W1384: BSF 03.51385: MOVWF 071386: NOP1387: BCF 03.51388: BSF 20.31389: MOVF 20,W138A: BSF 03.5138B: MOVWF 07138C: BCF 03.5138D: BTFSS 07.3138E: GOTO 38D138F: NOP1390: GOTO 3911391: NOP1392: BSF 20.41393: MOVF 20,W1394: BSF 03.51395: MOVWF 071396: NOP........................................ printf("Stav: %ud(procenta)\r\n", XL);1397: MOVLW 101398: BCF 03.51399: BSF 03.6139A: MOVWF 0D139B: MOVLW 00139C: MOVWF 0F139D: BCF 03.0139E: MOVLW 06139F: BCF 03.613A0: MOVWF 3D13A1: BCF 0A.413A2: CALL 19313A3: BSF 0A.413A4: MOVF 35,W13A5: MOVWF 3C13A6: MOVLW 1B13A7: MOVWF 3D13A8: BCF 0A.413A9: CALL 1F713AA: BSF 0A.413AB: MOVLW 1413AC: BSF 03.613AD: MOVWF 0D13AE: MOVLW 0013AF: MOVWF 0F13B0: BCF 03.013B1: MOVLW 0D13B2: BCF 03.613B3: MOVWF 3D13B4: BCF 0A.413B5: CALL 19313B6: BSF 0A.4.................... printf("Stav: %ud(procenta)\r\n", XH);13B7: MOVLW 1B13B8: BSF 03.613B9: MOVWF 0D13BA: MOVLW 0013BB: MOVWF 0F13BC: BCF 03.013BD: MOVLW 0613BE: BCF 03.613BF: MOVWF 3D13C0: BCF 0A.413C1: CALL 19313C2: BSF 0A.413C3: MOVF 36,W13C4: MOVWF 3C13C5: MOVLW 1B13C6: MOVWF 3D13C7: BCF 0A.413C8: CALL 1F713C9: BSF 0A.413CA: MOVLW 1F13CB: BSF 03.613CC: MOVWF 0D13CD: MOVLW 0013CE: MOVWF 0F13CF: BCF 03.013D0: MOVLW 0D13D1: BCF 03.613D2: MOVWF 3D13D3: BCF 0A.413D4: CALL 19313D5: BSF 0A.4.................... printf("Stav: %ud(procenta)\r\n", YL);13D6: MOVLW 2613D7: BSF 03.613D8: MOVWF 0D13D9: MOVLW 0013DA: MOVWF 0F13DB: BCF 03.013DC: MOVLW 0613DD: BCF 03.613DE: MOVWF 3D13DF: BCF 0A.413E0: CALL 19313E1: BSF 0A.413E2: MOVF 37,W13E3: MOVWF 3C13E4: MOVLW 1B13E5: MOVWF 3D13E6: BCF 0A.413E7: CALL 1F713E8: BSF 0A.413E9: MOVLW 2A13EA: BSF 03.613EB: MOVWF 0D13EC: MOVLW 0013ED: MOVWF 0F13EE: BCF 03.013EF: MOVLW 0D13F0: BCF 03.613F1: MOVWF 3D13F2: BCF 0A.413F3: CALL 19313F4: BSF 0A.4.................... printf("Stav: %ud(procenta)\r\n", YH);13F5: MOVLW 3113F6: BSF 03.613F7: MOVWF 0D13F8: MOVLW 0013F9: MOVWF 0F13FA: BCF 03.013FB: MOVLW 0613FC: BCF 03.613FD: MOVWF 3D13FE: BCF 0A.413FF: CALL 1931400: BSF 0A.41401: MOVF 38,W1402: MOVWF 3C1403: MOVLW 1B1404: MOVWF 3D1405: BCF 0A.41406: CALL 1F71407: BSF 0A.41408: MOVLW 351409: BSF 03.6140A: MOVWF 0D140B: MOVLW 00140C: MOVWF 0F140D: BCF 03.0140E: MOVLW 0D140F: BCF 03.61410: MOVWF 3D1411: BCF 0A.41412: CALL 1931413: BSF 0A.4.................... printf("Stav: %ud(procenta)\r\n", ZL);1414: MOVLW 3C1415: BSF 03.61416: MOVWF 0D1417: MOVLW 001418: MOVWF 0F1419: BCF 03.0141A: MOVLW 06141B: BCF 03.6141C: MOVWF 3D141D: BCF 0A.4141E: CALL 193141F: BSF 0A.41420: MOVF 39,W1421: MOVWF 3C1422: MOVLW 1B1423: MOVWF 3D1424: BCF 0A.41425: CALL 1F71426: BSF 0A.41427: MOVLW 401428: BSF 03.61429: MOVWF 0D142A: MOVLW 00142B: MOVWF 0F142C: BCF 03.0142D: MOVLW 0D142E: BCF 03.6142F: MOVWF 3D1430: BCF 0A.41431: CALL 1931432: BSF 0A.4.................... printf("Stav: %ud(procenta)\r\n", ZH);1433: MOVLW 471434: BSF 03.61435: MOVWF 0D1436: MOVLW 001437: MOVWF 0F1438: BCF 03.01439: MOVLW 06143A: BCF 03.6143B: MOVWF 3D143C: BCF 0A.4143D: CALL 193143E: BSF 0A.4143F: MOVF 3A,W1440: MOVWF 3C1441: MOVLW 1B1442: MOVWF 3D1443: BCF 0A.41444: CALL 1F71445: BSF 0A.41446: MOVLW 4B1447: BSF 03.61448: MOVWF 0D1449: MOVLW 00144A: MOVWF 0F144B: BCF 03.0144C: MOVLW 0D144D: BCF 03.6144E: MOVWF 3D144F: BCF 0A.41450: CALL 1931451: BSF 0A.4............................................................ X = (((unsigned int16) XH << 8) + XL );1452: CLRF 3D1453: MOVF 36,W1454: MOVWF 3C1455: MOVWF 3D1456: CLRF 3C1457: MOVF 35,W1458: ADDWF 3C,W1459: MOVWF 27145A: MOVF 3D,W145B: MOVWF 28145C: BTFSC 03.0145D: INCF 28,F.................... Y = (((unsigned int16) YH << 8) + YL);145E: CLRF 3D145F: MOVF 38,W1460: MOVWF 3C1461: MOVWF 3D1462: CLRF 3C1463: MOVF 37,W1464: ADDWF 3C,W1465: MOVWF 291466: MOVF 3D,W1467: MOVWF 2A1468: BTFSC 03.01469: INCF 2A,F.................... Z = (((unsigned int16) ZH << 8) + ZL);146A: CLRF 3D146B: MOVF 3A,W146C: MOVWF 3C146D: MOVWF 3D146E: CLRF 3C146F: MOVF 39,W1470: ADDWF 3C,W1471: MOVWF 2B1472: MOVF 3D,W1473: MOVWF 2C1474: BTFSC 03.01475: INCF 2C,F........................................ X=X/4;1476: MOVF 28,W1477: MOVWF 3D1478: MOVF 27,W1479: MOVWF 3C147A: CLRF 3F147B: MOVLW 04147C: MOVWF 3E147D: BCF 0A.4147E: CALL 22C147F: BSF 0A.41480: MOVF 79,W1481: MOVWF 281482: MOVF 78,W1483: MOVWF 27.................... Y=Y/4;1484: MOVF 2A,W1485: MOVWF 3D1486: MOVF 29,W1487: MOVWF 3C1488: CLRF 3F1489: MOVLW 04148A: MOVWF 3E148B: BCF 0A.4148C: CALL 22C148D: BSF 0A.4148E: MOVF 79,W148F: MOVWF 2A1490: MOVF 78,W1491: MOVWF 29.................... Z=Z/4;1492: MOVF 2C,W1493: MOVWF 3D1494: MOVF 2B,W1495: MOVWF 3C1496: CLRF 3F1497: MOVLW 041498: MOVWF 3E1499: BCF 0A.4149A: CALL 22C149B: BSF 0A.4149C: MOVF 79,W149D: MOVWF 2C149E: MOVF 78,W149F: MOVWF 2B.................... //X = X>>2;.................... //Y = Y>>2;.................... //Z = Z>>2;................................................................................ printf("Stav: %d (procenta)\r\n", ack);14A0: MOVLW 0014A1: BTFSC 3B.014A2: MOVLW 0114A3: MOVWF 3C14A4: MOVLW 5214A5: BSF 03.614A6: MOVWF 0D14A7: MOVLW 0014A8: MOVWF 0F14A9: BCF 03.014AA: MOVLW 0614AB: BCF 03.614AC: MOVWF 3D14AD: BCF 0A.414AE: CALL 19314AF: BSF 0A.414B0: MOVF 3C,W14B1: MOVWF 3D14B2: MOVLW 1F14B3: MOVWF 3E14B4: BCF 0A.414B5: GOTO 26A14B6: BSF 0A.414B7: MOVLW 5614B8: BSF 03.614B9: MOVWF 0D14BA: MOVLW 0014BB: MOVWF 0F14BC: BCF 03.014BD: MOVLW 0D14BE: BCF 03.614BF: MOVWF 3D14C0: BCF 0A.414C1: CALL 19314C2: BSF 0A.4........................................ printf("Stavx: %Ld(procenta)\r\n", X);14C3: MOVLW 5D14C4: BSF 03.614C5: MOVWF 0D14C6: MOVLW 0014C7: MOVWF 0F14C8: BCF 03.014C9: MOVLW 0714CA: BCF 03.614CB: MOVWF 3D14CC: BCF 0A.414CD: CALL 19314CE: BSF 0A.414CF: MOVLW 1014D0: MOVWF 0414D1: MOVF 28,W14D2: MOVWF 3D14D3: MOVF 27,W14D4: MOVWF 3C14D5: BCF 0A.414D6: CALL 2D114D7: BSF 0A.414D8: MOVLW 6214D9: BSF 03.614DA: MOVWF 0D14DB: MOVLW 0014DC: MOVWF 0F14DD: BCF 03.014DE: MOVLW 0C14DF: BCF 03.614E0: MOVWF 3D14E1: BCF 0A.414E2: CALL 19314E3: BSF 0A.4.................... printf("Stavy: %Ld(procenta)\r\n", Y);14E4: MOVLW 6914E5: BSF 03.614E6: MOVWF 0D14E7: MOVLW 0014E8: MOVWF 0F14E9: BCF 03.014EA: MOVLW 0714EB: BCF 03.614EC: MOVWF 3D14ED: BCF 0A.414EE: CALL 19314EF: BSF 0A.414F0: MOVLW 1014F1: MOVWF 0414F2: MOVF 2A,W14F3: MOVWF 3D14F4: MOVF 29,W14F5: MOVWF 3C14F6: BCF 0A.414F7: CALL 2D114F8: BSF 0A.414F9: MOVLW 6E14FA: BSF 03.614FB: MOVWF 0D14FC: MOVLW 0014FD: MOVWF 0F14FE: BCF 03.014FF: MOVLW 0C1500: BCF 03.61501: MOVWF 3D1502: BCF 0A.41503: CALL 1931504: BSF 0A.4.................... printf("Stavz: %Ld(procenta)\r\n", Z);1505: MOVLW 751506: BSF 03.61507: MOVWF 0D1508: MOVLW 001509: MOVWF 0F150A: BCF 03.0150B: MOVLW 07150C: BCF 03.6150D: MOVWF 3D150E: BCF 0A.4150F: CALL 1931510: BSF 0A.41511: MOVLW 101512: MOVWF 041513: MOVF 2C,W1514: MOVWF 3D1515: MOVF 2B,W1516: MOVWF 3C1517: BCF 0A.41518: CALL 2D11519: BSF 0A.4151A: MOVLW 7A151B: BSF 03.6151C: MOVWF 0D151D: MOVLW 00151E: MOVWF 0F151F: BCF 03.01520: MOVLW 0C1521: BCF 03.61522: MOVWF 3D1523: BCF 0A.41524: CALL 1931525: BSF 0A.4................................................................................ a=(float)Y/Z;1526: MOVF 2A,W1527: MOVWF 411528: MOVF 29,W1529: MOVWF 40152A: BCF 0A.4152B: CALL 351152C: BSF 0A.4152D: MOVF 77,W152E: MOVWF 3C152F: MOVF 78,W1530: MOVWF 3D1531: MOVF 79,W1532: MOVWF 3E1533: MOVF 7A,W1534: MOVWF 3F1535: MOVF 2C,W1536: MOVWF 411537: MOVF 2B,W1538: MOVWF 401539: BCF 0A.4153A: CALL 351153B: BSF 0A.4153C: MOVF 3F,W153D: MOVWF 54153E: MOVF 3E,W153F: MOVWF 531540: MOVF 3D,W1541: MOVWF 521542: MOVF 3C,W1543: MOVWF 511544: MOVF 7A,W1545: MOVWF 581546: MOVF 79,W1547: MOVWF 571548: MOVF 78,W1549: MOVWF 56154A: MOVF 77,W154B: MOVWF 55154C: BCF 0A.4154D: CALL 376154E: BSF 0A.4154F: MOVF 7A,W1550: MOVWF 301551: MOVF 79,W1552: MOVWF 2F1553: MOVF 78,W1554: MOVWF 2E1555: MOVF 77,W1556: MOVWF 2D.................... printf("y/z %10.2f \r\n", a);1557: MOVLW 811558: BSF 03.61559: MOVWF 0D155A: MOVLW 00155B: MOVWF 0F155C: BCF 03.0155D: MOVLW 04155E: BCF 03.6155F: MOVWF 3D1560: BCF 0A.41561: CALL 1931562: BSF 0A.41563: MOVLW 091564: MOVWF 041565: MOVF 30,W1566: MOVWF 3F1567: MOVF 2F,W1568: MOVWF 3E1569: MOVF 2E,W156A: MOVWF 3D156B: MOVF 2D,W156C: MOVWF 3C156D: MOVLW 02156E: MOVWF 40156F: BCF 0A.41570: CALL 4F71571: BSF 0A.41572: MOVLW 201573: MOVWF 491574: BCF 0A.41575: CALL 0981576: BSF 0A.41577: MOVLW 0D1578: MOVWF 491579: BCF 0A.4157A: CALL 098157B: BSF 0A.4157C: MOVLW 0A157D: MOVWF 49157E: BCF 0A.4157F: CALL 0981580: BSF 0A.4.................... b=atan(a);1581: MOVF 30,W1582: MOVWF 3F1583: MOVF 2F,W1584: MOVWF 3E1585: MOVF 2E,W1586: MOVWF 3D1587: MOVF 2D,W1588: MOVWF 3C1589: BCF 0A.4158A: BSF 0A.3158B: GOTO 000158C: BSF 0A.4158D: BCF 0A.3158E: MOVF 7A,W158F: MOVWF 341590: MOVF 79,W1591: MOVWF 331592: MOVF 78,W1593: MOVWF 321594: MOVF 77,W1595: MOVWF 31.................... printf("atan %10.2f \r\n", b);1596: MOVLW 881597: BSF 03.61598: MOVWF 0D1599: MOVLW 00159A: MOVWF 0F159B: BCF 03.0159C: MOVLW 05159D: BCF 03.6159E: MOVWF 3D159F: BCF 0A.415A0: CALL 19315A1: BSF 0A.415A2: MOVLW 0915A3: MOVWF 0415A4: MOVF 34,W15A5: MOVWF 3F15A6: MOVF 33,W15A7: MOVWF 3E15A8: MOVF 32,W15A9: MOVWF 3D15AA: MOVF 31,W15AB: MOVWF 3C15AC: MOVLW 0215AD: MOVWF 4015AE: BCF 0A.415AF: CALL 4F715B0: BSF 0A.415B1: MOVLW 2015B2: MOVWF 4915B3: BCF 0A.415B4: CALL 09815B5: BSF 0A.415B6: MOVLW 0D15B7: MOVWF 4915B8: BCF 0A.415B9: CALL 09815BA: BSF 0A.415BB: MOVLW 0A15BC: MOVWF 4915BD: BCF 0A.415BE: CALL 09815BF: BSF 0A.4.................... b = (b/3.14)*180;15C0: MOVF 34,W15C1: MOVWF 5415C2: MOVF 33,W15C3: MOVWF 5315C4: MOVF 32,W15C5: MOVWF 5215C6: MOVF 31,W15C7: MOVWF 5115C8: MOVLW C315C9: MOVWF 5815CA: MOVLW F515CB: MOVWF 5715CC: MOVLW 4815CD: MOVWF 5615CE: MOVLW 8015CF: MOVWF 5515D0: BCF 0A.415D1: CALL 37615D2: BSF 0A.415D3: MOVF 77,W15D4: MOVWF 3C15D5: MOVF 78,W15D6: MOVWF 3D15D7: MOVF 79,W15D8: MOVWF 3E15D9: MOVF 7A,W15DA: MOVWF 3F15DB: MOVWF 5415DC: MOVF 3E,W15DD: MOVWF 5315DE: MOVF 3D,W15DF: MOVWF 5215E0: MOVF 3C,W15E1: MOVWF 5115E2: CLRF 5815E3: CLRF 5715E4: MOVLW 3415E5: MOVWF 5615E6: MOVLW 8615E7: MOVWF 5515E8: BCF 0A.415E9: CALL 44015EA: BSF 0A.415EB: MOVF 7A,W15EC: MOVWF 3415ED: MOVF 79,W15EE: MOVWF 3315EF: MOVF 78,W15F0: MOVWF 3215F1: MOVF 77,W15F2: MOVWF 31.................... b=abs(b);15F3: MOVF 31,W15F4: MOVWF 7715F5: MOVF 32,W15F6: MOVWF 7815F7: MOVF 33,W15F8: MOVWF 7915F9: MOVF 34,W15FA: MOVWF 7A15FB: BCF 78.715FC: MOVF 34,W15FD: MOVWF 3415FE: MOVF 33,W15FF: MOVWF 331600: MOVF 78,W1601: MOVWF 321602: MOVF 31,W1603: MOVWF 31.................... b=90-b;1604: BSF 03.11605: CLRF 541606: CLRF 531607: MOVLW 341608: MOVWF 521609: MOVLW 85160A: MOVWF 51160B: MOVF 34,W160C: MOVWF 58160D: MOVF 33,W160E: MOVWF 57160F: MOVF 32,W1610: MOVWF 561611: MOVF 31,W1612: MOVWF 551613: BCF 0A.41614: CALL 61D1615: BSF 0A.41616: MOVF 7A,W1617: MOVWF 341618: MOVF 79,W1619: MOVWF 33161A: MOVF 78,W161B: MOVWF 32161C: MOVF 77,W161D: MOVWF 31.................... printf("uhel %10.2f \r\n", b);161E: MOVLW 90161F: BSF 03.61620: MOVWF 0D1621: MOVLW 001622: MOVWF 0F1623: BCF 03.01624: MOVLW 051625: BCF 03.61626: MOVWF 3D1627: BCF 0A.41628: CALL 1931629: BSF 0A.4162A: MOVLW 09162B: MOVWF 04162C: MOVF 34,W162D: MOVWF 3F162E: MOVF 33,W162F: MOVWF 3E1630: MOVF 32,W1631: MOVWF 3D1632: MOVF 31,W1633: MOVWF 3C1634: MOVLW 021635: MOVWF 401636: BCF 0A.41637: CALL 4F71638: BSF 0A.41639: MOVLW 20163A: MOVWF 49163B: BCF 0A.4163C: CALL 098163D: BSF 0A.4163E: MOVLW 0D163F: MOVWF 491640: BCF 0A.41641: CALL 0981642: BSF 0A.41643: MOVLW 0A1644: MOVWF 491645: BCF 0A.41646: CALL 0981647: BSF 0A.4........................................ delay_ms (2000);1648: MOVLW 081649: MOVWF 3C164A: MOVLW FA164B: MOVWF 3D164C: BCF 0A.4164D: GOTO 75E164E: BSF 0A.4164F: DECFSZ 3C,F1650: GOTO 64A........................................ }1651: GOTO 0AC.................... }1652: SLEEPConfiguration Fuses:Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40