CCS PCM C Compiler, Version 4.106, 47914 16-4-13 20:38Filename: C:\Users\Honza\Documents\pic\kompas\main.lstROM used: 3214 words (39%)Largest free fragment is 2048RAM used: 7 (2%) at main() level71 (19%) worst caseStack: 3 locations*0000: MOVLW 0C0001: MOVWF 0A0002: GOTO 42E0003: NOP.................... #include <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)*0108: MOVLW 300109: MOVWF 04010A: BCF 03.7010B: MOVF 00,W010C: BTFSC 03.2010D: GOTO 11B010E: MOVLW 02010F: MOVWF 780110: CLRF 770111: DECFSZ 77,F0112: GOTO 1110113: DECFSZ 78,F0114: GOTO 1100115: MOVLW 970116: MOVWF 770117: DECFSZ 77,F0118: GOTO 1170119: DECFSZ 00,F011A: GOTO 10E011B: RETURN............................................................ #define EEPROM_SDA PIN_B0.................... #define EEPROM_SCL PIN_B1.................... #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)*00D4: MOVLW 0800D5: MOVWF 7800D6: NOP00D7: BCF 06.100D8: BSF 03.500D9: BCF 06.100DA: NOP00DB: BCF 03.500DC: RLF 42,F00DD: BCF 06.000DE: BTFSS 03.000DF: GOTO 0E300E0: BSF 03.500E1: BSF 06.000E2: BCF 03.500E3: BTFSC 03.000E4: GOTO 0E800E5: BSF 03.500E6: BCF 06.000E7: BCF 03.500E8: BSF 03.500E9: BSF 06.100EA: BCF 03.500EB: BTFSS 06.100EC: GOTO 0EB00ED: DECFSZ 78,F00EE: GOTO 0D600EF: NOP00F0: BCF 06.100F1: BSF 03.500F2: BCF 06.100F3: NOP00F4: BSF 06.000F5: NOP00F6: NOP00F7: BSF 06.100F8: BCF 03.500F9: BTFSS 06.100FA: GOTO 0F900FB: CLRF 7800FC: NOP00FD: BTFSC 06.000FE: BSF 78.000FF: BCF 06.10100: BSF 03.50101: BCF 06.10102: BCF 03.50103: BCF 06.00104: BSF 03.50105: BCF 06.00106: BCF 03.50107: RETURN*01CC: MOVLW 0801CD: MOVWF 4301CE: MOVF 77,W01CF: MOVWF 4401D0: BSF 03.501D1: BSF 06.001D2: NOP01D3: BSF 06.101D4: BCF 03.501D5: BTFSS 06.101D6: GOTO 1D501D7: BTFSC 06.001D8: BSF 03.001D9: BTFSS 06.001DA: BCF 03.001DB: RLF 78,F01DC: NOP01DD: BSF 03.501DE: BCF 06.101DF: BCF 03.501E0: BCF 06.101E1: DECFSZ 43,F01E2: GOTO 1D001E3: BSF 03.501E4: BSF 06.001E5: NOP01E6: BCF 03.501E7: BCF 06.001E8: MOVF 44,W01E9: BTFSC 03.201EA: GOTO 1EE01EB: BSF 03.501EC: BCF 06.001ED: BCF 03.501EE: NOP01EF: BSF 03.501F0: BSF 06.101F1: BCF 03.501F2: BTFSS 06.101F3: GOTO 1F201F4: NOP01F5: BCF 06.101F6: BSF 03.501F7: BCF 06.101F8: NOP01F9: BCF 03.501FA: BCF 06.001FB: BSF 03.501FC: BCF 06.0.................... #use rs232(baud=9600,parity=N,xmit=PIN_B3,rcv=PIN_B2,bits=8) //rcv TXD xmit RXD*008D: BSF 03.5008E: BCF 06.3008F: BCF 03.50090: BCF 06.30091: MOVLW 080092: MOVWF 780093: GOTO 0940094: NOP0095: BSF 78.70096: GOTO 0A50097: BCF 78.70098: RRF 40,F0099: BTFSC 03.0009A: BSF 06.3009B: BTFSS 03.0009C: BCF 06.3009D: BSF 78.6009E: GOTO 0A5009F: BCF 78.600A0: DECFSZ 78,F00A1: GOTO 09800A2: GOTO 0A300A3: NOP00A4: BSF 06.300A5: MOVLW 3F00A6: MOVWF 0400A7: DECFSZ 04,F00A8: GOTO 0A700A9: NOP00AA: BTFSC 78.700AB: GOTO 09700AC: BTFSC 78.600AD: GOTO 09F00AE: 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;*089C: BCF 4D.0.................... flag = 0;089D: BCF 4D.1.................... y = x;089E: MOVF 40,W089F: MOVWF 4408A0: MOVF 3F,W08A1: MOVWF 4308A2: MOVF 3E,W08A3: MOVWF 4208A4: MOVF 3D,W08A5: MOVWF 41........................................ if (x < 0)08A6: MOVF 40,W08A7: MOVWF 5108A8: MOVF 3F,W08A9: MOVWF 5008AA: MOVF 3E,W08AB: MOVWF 4F08AC: MOVF 3D,W08AD: MOVWF 4E08AE: CLRF 5508AF: CLRF 5408B0: CLRF 5308B1: CLRF 5208B2: BCF 0A.308B3: CALL 30708B4: BSF 0A.308B5: BTFSS 03.008B6: GOTO 0BB.................... {.................... s = 1;08B7: BSF 4D.0.................... y = -y;08B8: MOVF 42,W08B9: XORLW 8008BA: MOVWF 42.................... }........................................ if (y > 1.0)08BB: CLRF 5108BC: CLRF 5008BD: CLRF 4F08BE: MOVLW 7F08BF: MOVWF 4E08C0: MOVF 44,W08C1: MOVWF 5508C2: MOVF 43,W08C3: MOVWF 5408C4: MOVF 42,W08C5: MOVWF 5308C6: MOVF 41,W08C7: MOVWF 5208C8: BCF 0A.308C9: CALL 30708CA: BSF 0A.308CB: BTFSS 03.008CC: GOTO 0E6.................... {.................... y = 1.0/y;08CD: CLRF 5508CE: CLRF 5408CF: CLRF 5308D0: MOVLW 7F08D1: MOVWF 5208D2: MOVF 44,W08D3: MOVWF 5908D4: MOVF 43,W08D5: MOVWF 5808D6: MOVF 42,W08D7: MOVWF 5708D8: MOVF 41,W08D9: MOVWF 5608DA: BCF 0A.308DB: CALL 23D08DC: BSF 0A.308DD: MOVF 7A,W08DE: MOVWF 4408DF: MOVF 79,W08E0: MOVWF 4308E1: MOVF 78,W08E2: MOVWF 4208E3: MOVF 77,W08E4: MOVWF 41.................... flag = 1;08E5: BSF 4D.1.................... }........................................ res = pat[0]*y*y + pat[1];08E6: MOVLW 0A08E7: MOVWF 5508E8: MOVLW 8908E9: MOVWF 5408EA: MOVLW 3408EB: MOVWF 5308EC: MOVLW 7C08ED: MOVWF 5208EE: MOVF 44,W08EF: MOVWF 5908F0: MOVF 43,W08F1: MOVWF 5808F2: MOVF 42,W08F3: MOVWF 5708F4: MOVF 41,W08F5: MOVWF 5608F6: BCF 0A.308F7: CALL 34608F8: BSF 0A.308F9: MOVF 77,W08FA: MOVWF 4E08FB: MOVF 78,W08FC: MOVWF 4F08FD: MOVF 79,W08FE: MOVWF 5008FF: MOVF 7A,W0900: MOVWF 510901: MOVWF 550902: MOVF 79,W0903: MOVWF 540904: MOVF 78,W0905: MOVWF 530906: MOVF 77,W0907: MOVWF 520908: MOVF 44,W0909: MOVWF 59090A: MOVF 43,W090B: MOVWF 58090C: MOVF 42,W090D: MOVWF 57090E: MOVF 41,W090F: MOVWF 560910: BCF 0A.30911: CALL 3460912: BSF 0A.30913: MOVF 77,W0914: MOVWF 4E0915: MOVF 78,W0916: MOVWF 4F0917: MOVF 79,W0918: MOVWF 500919: MOVF 7A,W091A: MOVWF 51091B: BCF 03.1091C: MOVF 7A,W091D: MOVWF 55091E: MOVF 79,W091F: MOVWF 540920: MOVF 78,W0921: MOVWF 530922: MOVF 77,W0923: MOVWF 520924: MOVLW 7C0925: MOVWF 590926: MOVLW 790927: MOVWF 580928: MOVLW 350929: MOVWF 57092A: MOVLW 81092B: MOVWF 56092C: BCF 0A.3092D: CALL 3BB092E: BSF 0A.3092F: MOVF 7A,W0930: MOVWF 480931: MOVF 79,W0932: MOVWF 470933: MOVF 78,W0934: MOVWF 460935: MOVF 77,W0936: MOVWF 45.................... res = res*y*y + pat[2];0937: MOVF 48,W0938: MOVWF 550939: MOVF 47,W093A: MOVWF 54093B: MOVF 46,W093C: MOVWF 53093D: MOVF 45,W093E: MOVWF 52093F: MOVF 44,W0940: MOVWF 590941: MOVF 43,W0942: MOVWF 580943: MOVF 42,W0944: MOVWF 570945: MOVF 41,W0946: MOVWF 560947: BCF 0A.30948: CALL 3460949: BSF 0A.3094A: MOVF 77,W094B: MOVWF 4E094C: MOVF 78,W094D: MOVWF 4F094E: MOVF 79,W094F: MOVWF 500950: MOVF 7A,W0951: MOVWF 510952: MOVWF 550953: MOVF 79,W0954: MOVWF 540955: MOVF 78,W0956: MOVWF 530957: MOVF 77,W0958: MOVWF 520959: MOVF 44,W095A: MOVWF 59095B: MOVF 43,W095C: MOVWF 58095D: MOVF 42,W095E: MOVWF 57095F: MOVF 41,W0960: MOVWF 560961: BCF 0A.30962: CALL 3460963: BSF 0A.30964: MOVF 77,W0965: MOVWF 4E0966: MOVF 78,W0967: MOVWF 4F0968: MOVF 79,W0969: MOVWF 50096A: MOVF 7A,W096B: MOVWF 51096C: BCF 03.1096D: MOVF 7A,W096E: MOVWF 55096F: MOVF 79,W0970: MOVWF 540971: MOVF 78,W0972: MOVWF 530973: MOVF 77,W0974: MOVWF 520975: MOVLW 3F0976: MOVWF 590977: MOVLW 020978: MOVWF 580979: MOVLW 33097A: MOVWF 57097B: MOVLW 83097C: MOVWF 56097D: BCF 0A.3097E: CALL 3BB097F: BSF 0A.30980: MOVF 7A,W0981: MOVWF 480982: MOVF 79,W0983: MOVWF 470984: MOVF 78,W0985: MOVWF 460986: MOVF 77,W0987: MOVWF 45.................... res = res*y*y + pat[3];0988: MOVF 48,W0989: MOVWF 55098A: MOVF 47,W098B: MOVWF 54098C: MOVF 46,W098D: MOVWF 53098E: MOVF 45,W098F: MOVWF 520990: MOVF 44,W0991: MOVWF 590992: MOVF 43,W0993: MOVWF 580994: MOVF 42,W0995: MOVWF 570996: MOVF 41,W0997: MOVWF 560998: BCF 0A.30999: CALL 346099A: BSF 0A.3099B: MOVF 77,W099C: MOVWF 4E099D: MOVF 78,W099E: MOVWF 4F099F: MOVF 79,W09A0: MOVWF 5009A1: MOVF 7A,W09A2: MOVWF 5109A3: MOVWF 5509A4: MOVF 79,W09A5: MOVWF 5409A6: MOVF 78,W09A7: MOVWF 5309A8: MOVF 77,W09A9: MOVWF 5209AA: MOVF 44,W09AB: MOVWF 5909AC: MOVF 43,W09AD: MOVWF 5809AE: MOVF 42,W09AF: MOVWF 5709B0: MOVF 41,W09B1: MOVWF 5609B2: BCF 0A.309B3: CALL 34609B4: BSF 0A.309B5: MOVF 77,W09B6: MOVWF 4E09B7: MOVF 78,W09B8: MOVWF 4F09B9: MOVF 79,W09BA: MOVWF 5009BB: MOVF 7A,W09BC: MOVWF 5109BD: BCF 03.109BE: MOVF 7A,W09BF: MOVWF 5509C0: MOVF 79,W09C1: MOVWF 5409C2: MOVF 78,W09C3: MOVWF 5309C4: MOVF 77,W09C5: MOVWF 5209C6: MOVLW 3309C7: MOVWF 5909C8: MOVLW 8C09C9: MOVWF 5809CA: MOVLW 1E09CB: MOVWF 5709CC: MOVLW 8309CD: MOVWF 5609CE: BCF 0A.309CF: CALL 3BB09D0: BSF 0A.309D1: MOVF 7A,W09D2: MOVWF 4809D3: MOVF 79,W09D4: MOVWF 4709D5: MOVF 78,W09D6: MOVWF 4609D7: MOVF 77,W09D8: MOVWF 45........................................ r = qat[0]*y*y + qat[1];09D9: CLRF 5509DA: CLRF 5409DB: CLRF 5309DC: MOVLW 7F09DD: MOVWF 5209DE: MOVF 44,W09DF: MOVWF 5909E0: MOVF 43,W09E1: MOVWF 5809E2: MOVF 42,W09E3: MOVWF 5709E4: MOVF 41,W09E5: MOVWF 5609E6: BCF 0A.309E7: CALL 34609E8: BSF 0A.309E9: MOVF 77,W09EA: MOVWF 4E09EB: MOVF 78,W09EC: MOVWF 4F09ED: MOVF 79,W09EE: MOVWF 5009EF: MOVF 7A,W09F0: MOVWF 5109F1: MOVWF 5509F2: MOVF 79,W09F3: MOVWF 5409F4: MOVF 78,W09F5: MOVWF 5309F6: MOVF 77,W09F7: MOVWF 5209F8: MOVF 44,W09F9: MOVWF 5909FA: MOVF 43,W09FB: MOVWF 5809FC: MOVF 42,W09FD: MOVWF 5709FE: MOVF 41,W09FF: MOVWF 560A00: BCF 0A.30A01: CALL 3460A02: BSF 0A.30A03: MOVF 77,W0A04: MOVWF 4E0A05: MOVF 78,W0A06: MOVWF 4F0A07: MOVF 79,W0A08: MOVWF 500A09: MOVF 7A,W0A0A: MOVWF 510A0B: BCF 03.10A0C: MOVF 7A,W0A0D: MOVWF 550A0E: MOVF 79,W0A0F: MOVWF 540A10: MOVF 78,W0A11: MOVWF 530A12: MOVF 77,W0A13: MOVWF 520A14: MOVLW 1B0A15: MOVWF 590A16: MOVLW E40A17: MOVWF 580A18: MOVLW 350A19: MOVWF 570A1A: MOVLW 820A1B: MOVWF 560A1C: BCF 0A.30A1D: CALL 3BB0A1E: BSF 0A.30A1F: MOVF 7A,W0A20: MOVWF 4C0A21: MOVF 79,W0A22: MOVWF 4B0A23: MOVF 78,W0A24: MOVWF 4A0A25: MOVF 77,W0A26: MOVWF 49.................... r = r*y*y + qat[2];0A27: MOVF 4C,W0A28: MOVWF 550A29: MOVF 4B,W0A2A: MOVWF 540A2B: MOVF 4A,W0A2C: MOVWF 530A2D: MOVF 49,W0A2E: MOVWF 520A2F: MOVF 44,W0A30: MOVWF 590A31: MOVF 43,W0A32: MOVWF 580A33: MOVF 42,W0A34: MOVWF 570A35: MOVF 41,W0A36: MOVWF 560A37: BCF 0A.30A38: CALL 3460A39: BSF 0A.30A3A: MOVF 77,W0A3B: MOVWF 4E0A3C: MOVF 78,W0A3D: MOVWF 4F0A3E: MOVF 79,W0A3F: MOVWF 500A40: MOVF 7A,W0A41: MOVWF 510A42: MOVWF 550A43: MOVF 79,W0A44: MOVWF 540A45: MOVF 78,W0A46: MOVWF 530A47: MOVF 77,W0A48: MOVWF 520A49: MOVF 44,W0A4A: MOVWF 590A4B: MOVF 43,W0A4C: MOVWF 580A4D: MOVF 42,W0A4E: MOVWF 570A4F: MOVF 41,W0A50: MOVWF 560A51: BCF 0A.30A52: CALL 3460A53: BSF 0A.30A54: MOVF 77,W0A55: MOVWF 4E0A56: MOVF 78,W0A57: MOVWF 4F0A58: MOVF 79,W0A59: MOVWF 500A5A: MOVF 7A,W0A5B: MOVWF 510A5C: BCF 03.10A5D: MOVF 7A,W0A5E: MOVWF 550A5F: MOVF 79,W0A60: MOVWF 540A61: MOVF 78,W0A62: MOVWF 530A63: MOVF 77,W0A64: MOVWF 520A65: MOVLW A40A66: MOVWF 590A67: MOVLW DB0A68: MOVWF 580A69: MOVLW 670A6A: MOVWF 570A6B: MOVLW 830A6C: MOVWF 560A6D: BCF 0A.30A6E: CALL 3BB0A6F: BSF 0A.30A70: MOVF 7A,W0A71: MOVWF 4C0A72: MOVF 79,W0A73: MOVWF 4B0A74: MOVF 78,W0A75: MOVWF 4A0A76: MOVF 77,W0A77: MOVWF 49.................... r = r*y*y + qat[3];0A78: MOVF 4C,W0A79: MOVWF 550A7A: MOVF 4B,W0A7B: MOVWF 540A7C: MOVF 4A,W0A7D: MOVWF 530A7E: MOVF 49,W0A7F: MOVWF 520A80: MOVF 44,W0A81: MOVWF 590A82: MOVF 43,W0A83: MOVWF 580A84: MOVF 42,W0A85: MOVWF 570A86: MOVF 41,W0A87: MOVWF 560A88: BCF 0A.30A89: CALL 3460A8A: BSF 0A.30A8B: MOVF 77,W0A8C: MOVWF 4E0A8D: MOVF 78,W0A8E: MOVWF 4F0A8F: MOVF 79,W0A90: MOVWF 500A91: MOVF 7A,W0A92: MOVWF 510A93: MOVWF 550A94: MOVF 79,W0A95: MOVWF 540A96: MOVF 78,W0A97: MOVWF 530A98: MOVF 77,W0A99: MOVWF 520A9A: MOVF 44,W0A9B: MOVWF 590A9C: MOVF 43,W0A9D: MOVWF 580A9E: MOVF 42,W0A9F: MOVWF 570AA0: MOVF 41,W0AA1: MOVWF 560AA2: BCF 0A.30AA3: CALL 3460AA4: BSF 0A.30AA5: MOVF 77,W0AA6: MOVWF 4E0AA7: MOVF 78,W0AA8: MOVWF 4F0AA9: MOVF 79,W0AAA: MOVWF 500AAB: MOVF 7A,W0AAC: MOVWF 510AAD: BCF 03.10AAE: MOVF 7A,W0AAF: MOVWF 550AB0: MOVF 79,W0AB1: MOVWF 540AB2: MOVF 78,W0AB3: MOVWF 530AB4: MOVF 77,W0AB5: MOVWF 520AB6: MOVLW 330AB7: MOVWF 590AB8: MOVLW 8C0AB9: MOVWF 580ABA: MOVLW 1E0ABB: MOVWF 570ABC: MOVLW 830ABD: MOVWF 560ABE: BCF 0A.30ABF: CALL 3BB0AC0: BSF 0A.30AC1: MOVF 7A,W0AC2: MOVWF 4C0AC3: MOVF 79,W0AC4: MOVWF 4B0AC5: MOVF 78,W0AC6: MOVWF 4A0AC7: MOVF 77,W0AC8: MOVWF 49........................................ res = y*res/r;0AC9: MOVF 44,W0ACA: MOVWF 550ACB: MOVF 43,W0ACC: MOVWF 540ACD: MOVF 42,W0ACE: MOVWF 530ACF: MOVF 41,W0AD0: MOVWF 520AD1: MOVF 48,W0AD2: MOVWF 590AD3: MOVF 47,W0AD4: MOVWF 580AD5: MOVF 46,W0AD6: MOVWF 570AD7: MOVF 45,W0AD8: MOVWF 560AD9: BCF 0A.30ADA: CALL 3460ADB: BSF 0A.30ADC: MOVF 77,W0ADD: MOVWF 4E0ADE: MOVF 78,W0ADF: MOVWF 4F0AE0: MOVF 79,W0AE1: MOVWF 500AE2: MOVF 7A,W0AE3: MOVWF 510AE4: MOVWF 550AE5: MOVF 79,W0AE6: MOVWF 540AE7: MOVF 78,W0AE8: MOVWF 530AE9: MOVF 77,W0AEA: MOVWF 520AEB: MOVF 4C,W0AEC: MOVWF 590AED: MOVF 4B,W0AEE: MOVWF 580AEF: MOVF 4A,W0AF0: MOVWF 570AF1: MOVF 49,W0AF2: MOVWF 560AF3: BCF 0A.30AF4: CALL 23D0AF5: BSF 0A.30AF6: MOVF 7A,W0AF7: MOVWF 480AF8: MOVF 79,W0AF9: MOVWF 470AFA: MOVF 78,W0AFB: MOVWF 460AFC: MOVF 77,W0AFD: MOVWF 45............................................................ if (flag) // for |x| > 10AFE: BTFSS 4D.10AFF: GOTO 31C.................... res = PI_DIV_BY_TWO - res;0B00: BSF 03.10B01: MOVLW DB0B02: MOVWF 550B03: MOVLW 0F0B04: MOVWF 540B05: MOVLW 490B06: MOVWF 530B07: MOVLW 7F0B08: MOVWF 520B09: MOVF 48,W0B0A: MOVWF 590B0B: MOVF 47,W0B0C: MOVWF 580B0D: MOVF 46,W0B0E: MOVWF 570B0F: MOVF 45,W0B10: MOVWF 560B11: BCF 0A.30B12: CALL 3BB0B13: BSF 0A.30B14: MOVF 7A,W0B15: MOVWF 480B16: MOVF 79,W0B17: MOVWF 470B18: MOVF 78,W0B19: MOVWF 460B1A: MOVF 77,W0B1B: MOVWF 45.................... if (s)0B1C: BTFSS 4D.00B1D: GOTO 321.................... res = -res;0B1E: MOVF 46,W0B1F: XORLW 800B20: MOVWF 46........................................ return(res);0B21: MOVF 45,W0B22: MOVWF 770B23: MOVF 46,W0B24: MOVWF 780B25: MOVF 47,W0B26: MOVWF 790B27: MOVF 48,W0B28: MOVWF 7A.................... }.................... //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........................................ #include <HMC5883L.h>.................... #define MAG_ADDR_R 0x3D //addresa pro cteni.................... #define MAG_ADDR_W 0x3C............................................................ //Konstanty nastavujici rozsah.................... //pro void set_mag_roz (unsigned int8 h).................... #define MAG_ROZ088 0x00.................... #define MAG_ROZ130 0x20.................... #define MAG_ROZ190 0x40.................... #define MAG_ROZ250 0x60.................... #define MAG_ROZ400 0x80.................... #define MAG_ROZ470 0xA0.................... #define MAG_ROZ560 0xC0.................... #define MAG_ROZ810 0xE0............................................................ #include "HMC5883L.c".................... void set_mag (void) //uvodni nastaveni na kontinualni mereni, rozsah ± 8.1 Ga, frekvence mereni 15HZ.................... {.................... i2c_start(); //nastavení Configuration Register A*011C: BSF 03.5011D: BSF 06.0011E: NOP011F: BSF 06.10120: NOP0121: BCF 03.50122: BCF 06.00123: BSF 03.50124: BCF 06.00125: NOP0126: BCF 03.50127: BCF 06.10128: BSF 03.50129: BCF 06.1.................... I2C_Write(MAG_ADDR_W);012A: MOVLW 3C012B: BCF 03.5012C: MOVWF 42012D: CALL 0D4.................... I2C_Write(0x00);012E: CLRF 42012F: CALL 0D4.................... I2C_Write(0x70);0130: MOVLW 700131: MOVWF 420132: CALL 0D4.................... i2c_stop();0133: BSF 03.50134: BCF 06.00135: NOP0136: BSF 06.10137: BCF 03.50138: BTFSS 06.10139: GOTO 138013A: NOP013B: GOTO 13C013C: NOP013D: BSF 03.5013E: BSF 06.0013F: NOP.................... Delay_ms(6);0140: MOVLW 060141: BCF 03.50142: MOVWF 300143: CALL 108........................................ i2c_start(); //nastavení Configuration Register B0144: BSF 03.50145: BSF 06.00146: NOP0147: BSF 06.10148: NOP0149: BCF 03.5014A: BCF 06.0014B: BSF 03.5014C: BCF 06.0014D: NOP014E: BCF 03.5014F: BCF 06.10150: BSF 03.50151: BCF 06.1.................... I2C_Write(MAG_ADDR_W);0152: MOVLW 3C0153: BCF 03.50154: MOVWF 420155: CALL 0D4.................... I2C_Write(0x01);0156: MOVLW 010157: MOVWF 420158: CALL 0D4.................... I2C_Write(MAG_ROZ810);0159: MOVLW E0015A: MOVWF 42015B: CALL 0D4.................... i2c_stop();015C: BSF 03.5015D: BCF 06.0015E: NOP015F: BSF 06.10160: BCF 03.50161: BTFSS 06.10162: GOTO 1610163: NOP0164: GOTO 1650165: NOP0166: BSF 03.50167: BSF 06.00168: NOP........................................ Delay_ms(6);0169: MOVLW 06016A: BCF 03.5016B: MOVWF 30016C: CALL 108........................................ i2c_start(); //nastveni Mode Register016D: BSF 03.5016E: BSF 06.0016F: NOP0170: BSF 06.10171: NOP0172: BCF 03.50173: BCF 06.00174: BSF 03.50175: BCF 06.00176: NOP0177: BCF 03.50178: BCF 06.10179: BSF 03.5017A: BCF 06.1.................... I2C_Write(MAG_ADDR_W);017B: MOVLW 3C017C: BCF 03.5017D: MOVWF 42017E: CALL 0D4.................... I2C_Write(0x02);017F: MOVLW 020180: MOVWF 420181: CALL 0D4.................... I2C_Write(0x00);0182: CLRF 420183: CALL 0D4.................... i2c_stop();0184: BSF 03.50185: BCF 06.00186: NOP0187: BSF 06.10188: BCF 03.50189: BTFSS 06.1018A: GOTO 189018B: NOP018C: GOTO 18D018D: NOP018E: BSF 03.5018F: BSF 06.00190: NOP.................... Delay_ms(6);0191: MOVLW 060192: BCF 03.50193: MOVWF 300194: CALL 108.................... }0195: BSF 0A.30196: BCF 0A.40197: GOTO 49E (RETURN)........................................ void set_mag_roz (unsigned int8 h) //nastavy rozsah.................... {........................................ //............................................................ i2c_start();.................... I2C_Write(MAG_ADDR_W);.................... I2C_Write(0x01);.................... I2C_Write(h);.................... i2c_stop();........................................ Delay_ms(6);............................................................ }............................................................ byte mag_read(byte reg) //pro cteni reg.................... {........................................ i2c_start();0198: BSF 03.50199: BSF 06.0019A: NOP019B: BSF 06.1019C: NOP019D: BCF 03.5019E: BCF 06.0019F: BSF 03.501A0: BCF 06.001A1: NOP01A2: BCF 03.501A3: BCF 06.101A4: BSF 03.501A5: BCF 06.1.................... I2C_Write(MAG_ADDR_W);01A6: MOVLW 3C01A7: BCF 03.501A8: MOVWF 4201A9: CALL 0D4.................... I2C_write(reg);01AA: MOVF 41,W01AB: MOVWF 4201AC: CALL 0D4.................... i2c_stop();01AD: BSF 03.501AE: BCF 06.001AF: NOP01B0: BSF 06.101B1: BCF 03.501B2: BTFSS 06.101B3: GOTO 1B201B4: NOP01B5: GOTO 1B601B6: NOP01B7: BSF 03.501B8: BSF 06.001B9: NOP.................... i2c_start();01BA: BSF 06.001BB: NOP01BC: BSF 06.101BD: NOP01BE: BCF 03.501BF: BCF 06.001C0: BSF 03.501C1: BCF 06.001C2: NOP01C3: BCF 03.501C4: BCF 06.101C5: BSF 03.501C6: BCF 06.1.................... I2C_Write(MAG_ADDR_R);01C7: MOVLW 3D01C8: BCF 03.501C9: MOVWF 4201CA: CALL 0D4.................... reg=i2c_read(0);01CB: CLRF 77*01FD: MOVF 78,W01FE: BCF 03.501FF: MOVWF 41.................... return reg;0200: MOVF 41,W0201: MOVWF 78.................... }0202: RETURN............................................................ signed int16 mag_vypocet(unsigned int8 h, unsigned int8 l) //prepocet na 16bit cislo.................... {.................... signed int16 x;.................... x = (((unsigned int16) h << 8) + l );0203: CLRF 460204: MOVF 41,W0205: MOVWF 450206: MOVWF 460207: CLRF 450208: MOVF 42,W0209: ADDWF 45,W020A: MOVWF 78020B: MOVF 46,W020C: MOVWF 7A020D: BTFSC 03.0020E: INCF 7A,F020F: MOVF 78,W0210: MOVWF 430211: MOVF 7A,W0212: MOVWF 44.................... return x;0213: MOVF 43,W0214: MOVWF 780215: MOVF 44,W0216: MOVWF 79.................... }0217: RETURN............................................................ signed int16 mag_readX(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x03);*0800: MOVLW 030801: MOVWF 410802: BCF 0A.30803: CALL 1980804: BSF 0A.30805: MOVF 78,W0806: MOVWF 3D.................... l=mag_read(0x04);0807: MOVLW 040808: MOVWF 410809: BCF 0A.3080A: CALL 198080B: BSF 0A.3080C: MOVF 78,W080D: MOVWF 3E.................... x=mag_vypocet(h,l);080E: MOVF 3D,W080F: MOVWF 410810: MOVF 3E,W0811: MOVWF 420812: BCF 0A.30813: CALL 2030814: BSF 0A.30815: MOVF 79,W0816: MOVWF 400817: MOVF 78,W0818: MOVWF 3F.................... return x;0819: MOVF 3F,W081A: MOVWF 78081B: MOVF 40,W081C: MOVWF 79........................................ }............................................................ signed int16 mag_readY(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x07);*0821: MOVLW 070822: MOVWF 410823: BCF 0A.30824: CALL 1980825: BSF 0A.30826: MOVF 78,W0827: MOVWF 3D.................... l=mag_read(0x08);0828: MOVLW 080829: MOVWF 41082A: BCF 0A.3082B: CALL 198082C: BSF 0A.3082D: MOVF 78,W082E: MOVWF 3E.................... x=mag_vypocet(h,l);082F: MOVF 3D,W0830: MOVWF 410831: MOVF 3E,W0832: MOVWF 420833: BCF 0A.30834: CALL 2030835: BSF 0A.30836: MOVF 79,W0837: MOVWF 400838: MOVF 78,W0839: MOVWF 3F.................... return x;083A: MOVF 3F,W083B: MOVWF 78083C: MOVF 40,W083D: MOVWF 79........................................ }............................................................ signed int16 mag_readZ(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x05);*0842: MOVLW 050843: MOVWF 410844: BCF 0A.30845: CALL 1980846: BSF 0A.30847: MOVF 78,W0848: MOVWF 3D.................... l=mag_read(0x06);0849: MOVLW 06084A: MOVWF 41084B: BCF 0A.3084C: CALL 198084D: BSF 0A.3084E: MOVF 78,W084F: MOVWF 3E.................... x=mag_vypocet(h,l);0850: MOVF 3D,W0851: MOVWF 410852: MOVF 3E,W0853: MOVWF 420854: BCF 0A.30855: CALL 2030856: BSF 0A.30857: MOVF 79,W0858: MOVWF 400859: MOVF 78,W085A: MOVWF 3F.................... return x;085B: MOVF 3F,W085C: MOVWF 78085D: MOVF 40,W085E: MOVWF 79........................................ }........................................................................................................................................................................................................................................................................................ float azimut (void) //vypocet aktualni vysky panelu.................... {.................... signed int16 x,y,z;........................................ x= mag_readX();*081D: MOVF 79,W081E: MOVWF 30081F: MOVF 78,W0820: MOVWF 2F.................... y= mag_readY();*083E: MOVF 79,W083F: MOVWF 320840: MOVF 78,W0841: MOVWF 31.................... z= mag_readZ();*085F: MOVF 79,W0860: MOVWF 340861: MOVF 78,W0862: MOVWF 33............................................................ float a, b;.................... a=(float)y/x;0863: MOVF 32,W0864: MOVWF 420865: MOVF 31,W0866: MOVWF 410867: BCF 0A.30868: CALL 2180869: BSF 0A.3086A: MOVF 77,W086B: MOVWF 3D086C: MOVF 78,W086D: MOVWF 3E086E: MOVF 79,W086F: MOVWF 3F0870: MOVF 7A,W0871: MOVWF 400872: MOVF 30,W0873: MOVWF 420874: MOVF 2F,W0875: MOVWF 410876: BCF 0A.30877: CALL 2180878: BSF 0A.30879: MOVF 40,W087A: MOVWF 55087B: MOVF 3F,W087C: MOVWF 54087D: MOVF 3E,W087E: MOVWF 53087F: MOVF 3D,W0880: MOVWF 520881: MOVF 7A,W0882: MOVWF 590883: MOVF 79,W0884: MOVWF 580885: MOVF 78,W0886: MOVWF 570887: MOVF 77,W0888: MOVWF 560889: BCF 0A.3088A: CALL 23D088B: BSF 0A.3088C: MOVF 7A,W088D: MOVWF 38088E: MOVF 79,W088F: MOVWF 370890: MOVF 78,W0891: MOVWF 360892: MOVF 77,W0893: MOVWF 35.................... b=atan(a);0894: MOVF 38,W0895: MOVWF 400896: MOVF 37,W0897: MOVWF 3F0898: MOVF 36,W0899: MOVWF 3E089A: MOVF 35,W089B: MOVWF 3D*0B29: MOVF 7A,W0B2A: MOVWF 3C0B2B: MOVF 79,W0B2C: MOVWF 3B0B2D: MOVF 78,W0B2E: MOVWF 3A0B2F: MOVF 77,W0B30: MOVWF 39.................... b = (b/3.14)*180;0B31: MOVF 3C,W0B32: MOVWF 550B33: MOVF 3B,W0B34: MOVWF 540B35: MOVF 3A,W0B36: MOVWF 530B37: MOVF 39,W0B38: MOVWF 520B39: MOVLW C30B3A: MOVWF 590B3B: MOVLW F50B3C: MOVWF 580B3D: MOVLW 480B3E: MOVWF 570B3F: MOVLW 800B40: MOVWF 560B41: BCF 0A.30B42: CALL 23D0B43: BSF 0A.30B44: MOVF 77,W0B45: MOVWF 3D0B46: MOVF 78,W0B47: MOVWF 3E0B48: MOVF 79,W0B49: MOVWF 3F0B4A: MOVF 7A,W0B4B: MOVWF 400B4C: MOVWF 550B4D: MOVF 3F,W0B4E: MOVWF 540B4F: MOVF 3E,W0B50: MOVWF 530B51: MOVF 3D,W0B52: MOVWF 520B53: CLRF 590B54: CLRF 580B55: MOVLW 340B56: MOVWF 570B57: MOVLW 860B58: MOVWF 560B59: BCF 0A.30B5A: CALL 3460B5B: BSF 0A.30B5C: MOVF 7A,W0B5D: MOVWF 3C0B5E: MOVF 79,W0B5F: MOVWF 3B0B60: MOVF 78,W0B61: MOVWF 3A0B62: MOVF 77,W0B63: MOVWF 39.................... b=abs(b);0B64: MOVF 39,W0B65: MOVWF 770B66: MOVF 3A,W0B67: MOVWF 780B68: MOVF 3B,W0B69: MOVWF 790B6A: MOVF 3C,W0B6B: MOVWF 7A0B6C: BCF 78.70B6D: MOVF 3C,W0B6E: MOVWF 3C0B6F: MOVF 3B,W0B70: MOVWF 3B0B71: MOVF 78,W0B72: MOVWF 3A0B73: MOVF 39,W0B74: MOVWF 39.................................................................................................... if(x==0) //osetreni proti deleni 00B75: MOVF 2F,F0B76: BTFSS 03.20B77: GOTO 39B0B78: MOVF 30,F0B79: BTFSS 03.20B7A: GOTO 39B.................... {.................... printf("Elektronický kompas0\r\n",);0B7B: MOVLW 040B7C: BSF 03.60B7D: MOVWF 0D0B7E: MOVLW 000B7F: MOVWF 0F0B80: BCF 0A.30B81: BCF 03.60B82: CALL 0AF0B83: BSF 0A.3.................... if(y>0)0B84: BTFSC 32.70B85: GOTO 3940B86: MOVF 32,F0B87: BTFSS 03.20B88: GOTO 38D0B89: MOVF 31,W0B8A: SUBLW 000B8B: BTFSC 03.00B8C: GOTO 394.................... {.................... b=90;0B8D: CLRF 3C0B8E: CLRF 3B0B8F: MOVLW 340B90: MOVWF 3A0B91: MOVLW 850B92: MOVWF 39.................... }.................... else0B93: GOTO 39A.................... {.................... b=270;0B94: CLRF 3C0B95: CLRF 3B0B96: MOVLW 070B97: MOVWF 3A0B98: MOVLW 870B99: MOVWF 39.................... }.................... }.................... else0B9A: GOTO 423.................... {.................... if(x>0)0B9B: BTFSC 30.70B9C: GOTO 3EE0B9D: MOVF 30,F0B9E: BTFSS 03.20B9F: GOTO 3A40BA0: MOVF 2F,W0BA1: SUBLW 000BA2: BTFSC 03.00BA3: GOTO 3EE.................... {.................... if(y>=0)0BA4: BTFSC 32.70BA5: GOTO 3CA.................... {.................... b=180+b;0BA6: BCF 03.10BA7: CLRF 550BA8: CLRF 540BA9: MOVLW 340BAA: MOVWF 530BAB: MOVLW 860BAC: MOVWF 520BAD: MOVF 3C,W0BAE: MOVWF 590BAF: MOVF 3B,W0BB0: MOVWF 580BB1: MOVF 3A,W0BB2: MOVWF 570BB3: MOVF 39,W0BB4: MOVWF 560BB5: BCF 0A.30BB6: CALL 3BB0BB7: BSF 0A.30BB8: MOVF 7A,W0BB9: MOVWF 3C0BBA: MOVF 79,W0BBB: MOVWF 3B0BBC: MOVF 78,W0BBD: MOVWF 3A0BBE: MOVF 77,W0BBF: MOVWF 39.................... printf("180+b\r\n",);0BC0: MOVLW 1B0BC1: BSF 03.60BC2: MOVWF 0D0BC3: MOVLW 000BC4: MOVWF 0F0BC5: BCF 0A.30BC6: BCF 03.60BC7: CALL 4FC0BC8: BSF 0A.3.................... }.................... else0BC9: GOTO 3ED.................... {.................... b=180-b;0BCA: BSF 03.10BCB: CLRF 550BCC: CLRF 540BCD: MOVLW 340BCE: MOVWF 530BCF: MOVLW 860BD0: MOVWF 520BD1: MOVF 3C,W0BD2: MOVWF 590BD3: MOVF 3B,W0BD4: MOVWF 580BD5: MOVF 3A,W0BD6: MOVWF 570BD7: MOVF 39,W0BD8: MOVWF 560BD9: BCF 0A.30BDA: CALL 3BB0BDB: BSF 0A.30BDC: MOVF 7A,W0BDD: MOVWF 3C0BDE: MOVF 79,W0BDF: MOVWF 3B0BE0: MOVF 78,W0BE1: MOVWF 3A0BE2: MOVF 77,W0BE3: MOVWF 39.................... printf("180-b\r\n",);0BE4: MOVLW 1F0BE5: BSF 03.60BE6: MOVWF 0D0BE7: MOVLW 000BE8: MOVWF 0F0BE9: BCF 0A.30BEA: BCF 03.60BEB: CALL 4FC0BEC: BSF 0A.3.................... }.................... }.................... else0BED: GOTO 423.................... {.................... if(y>=0)0BEE: BTFSC 32.70BEF: GOTO 414.................... {.................... b=360-b;0BF0: BSF 03.10BF1: CLRF 550BF2: CLRF 540BF3: MOVLW 340BF4: MOVWF 530BF5: MOVLW 870BF6: MOVWF 520BF7: MOVF 3C,W0BF8: MOVWF 590BF9: MOVF 3B,W0BFA: MOVWF 580BFB: MOVF 3A,W0BFC: MOVWF 570BFD: MOVF 39,W0BFE: MOVWF 560BFF: BCF 0A.30C00: CALL 3BB0C01: BSF 0A.30C02: MOVF 7A,W0C03: MOVWF 3C0C04: MOVF 79,W0C05: MOVWF 3B0C06: MOVF 78,W0C07: MOVWF 3A0C08: MOVF 77,W0C09: MOVWF 39.................... printf("360-b\r\n",);0C0A: MOVLW 230C0B: BSF 03.60C0C: MOVWF 0D0C0D: MOVLW 000C0E: MOVWF 0F0C0F: BCF 0A.30C10: BCF 03.60C11: CALL 4FC0C12: BSF 0A.3.................... }.................... else0C13: GOTO 423.................... {.................... b=b;.................... printf("b\r\n",);0C14: MOVLW 620C15: MOVWF 400C16: BCF 0A.30C17: CALL 08D0C18: BSF 0A.30C19: MOVLW 0D0C1A: MOVWF 400C1B: BCF 0A.30C1C: CALL 08D0C1D: BSF 0A.30C1E: MOVLW 0A0C1F: MOVWF 400C20: BCF 0A.30C21: CALL 08D0C22: BSF 0A.3.................... }.................... }........................................ }........................................ return b;0C23: MOVF 39,W0C24: MOVWF 770C25: MOVF 3A,W0C26: MOVWF 780C27: MOVF 3B,W0C28: MOVWF 790C29: MOVF 3C,W0C2A: MOVWF 7A........................................ }0C2B: BSF 0A.30C2C: BCF 0A.40C2D: GOTO 4A0 (RETURN)........................................ void main().................... {0C2E: CLRF 040C2F: BCF 03.70C30: MOVLW 1F0C31: ANDWF 03,F0C32: MOVLW 710C33: BSF 03.50C34: MOVWF 0F0C35: MOVF 0F,W0C36: BCF 06.30C37: BCF 03.50C38: BSF 06.30C39: BSF 03.50C3A: BSF 03.60C3B: MOVF 09,W0C3C: ANDLW C00C3D: MOVWF 090C3E: BCF 03.60C3F: BCF 1F.40C40: BCF 1F.50C41: MOVLW 000C42: BSF 03.60C43: MOVWF 080C44: BCF 03.50C45: CLRF 070C46: CLRF 080C47: CLRF 09........................................ setup_adc_ports(NO_ANALOGS|VSS_VDD);*0C4B: BSF 03.50C4C: BSF 03.60C4D: MOVF 09,W0C4E: ANDLW C00C4F: MOVWF 090C50: BCF 03.60C51: BCF 1F.40C52: BCF 1F.50C53: MOVLW 000C54: BSF 03.60C55: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_2);0C56: BCF 03.50C57: BCF 03.60C58: BCF 1F.60C59: BCF 1F.70C5A: BSF 03.50C5B: BCF 1F.70C5C: BCF 03.50C5D: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);0C5E: BCF 14.50C5F: BCF 20.50C60: MOVF 20,W0C61: BSF 03.50C62: MOVWF 070C63: BCF 03.50C64: BSF 20.40C65: MOVF 20,W0C66: BSF 03.50C67: MOVWF 070C68: BCF 03.50C69: BCF 20.30C6A: MOVF 20,W0C6B: BSF 03.50C6C: MOVWF 070C6D: MOVLW 010C6E: BCF 03.50C6F: MOVWF 140C70: MOVLW 000C71: BSF 03.50C72: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);0C73: MOVF 01,W0C74: ANDLW C70C75: IORLW 080C76: MOVWF 01.................... setup_timer_1(T1_DISABLED);0C77: BCF 03.50C78: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);0C79: MOVLW 000C7A: MOVWF 780C7B: MOVWF 120C7C: MOVLW 000C7D: BSF 03.50C7E: MOVWF 12.................... setup_ccp1(CCP_OFF);0C7F: BCF 03.50C80: BSF 20.20C81: MOVF 20,W0C82: BSF 03.50C83: MOVWF 070C84: BCF 03.50C85: CLRF 170C86: BSF 03.50C87: CLRF 1B0C88: CLRF 1C0C89: MOVLW 010C8A: MOVWF 1D.................... setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard0C8B: BCF 03.50C8C: BSF 03.60C8D: CLRF 070C8E: CLRF 080C8F: CLRF 09........................................ printf("Elektronický kompas\r\n",);0C90: MOVLW 270C91: MOVWF 0D0C92: MOVLW 000C93: MOVWF 0F0C94: BCF 0A.30C95: BCF 03.60C96: CALL 0AF0C97: BSF 0A.3.................... float az,k=0;0C98: CLRF 280C99: CLRF 270C9A: CLRF 260C9B: CLRF 25.................... set_mag();0C9C: BCF 0A.30C9D: GOTO 11C0C9E: BSF 0A.3.................... signed int16 X,Y,Z;.................... while(true).................... {.................... az=azimut();0C9F: GOTO 0000CA0: MOVF 7A,W0CA1: MOVWF 240CA2: MOVF 79,W0CA3: MOVWF 230CA4: MOVF 78,W0CA5: MOVWF 220CA6: MOVF 77,W0CA7: MOVWF 21.................................................................................................... printf("Elektronický kompas \r\n",);0CA8: MOVLW 3D0CA9: BSF 03.60CAA: MOVWF 0D0CAB: MOVLW 000CAC: MOVWF 0F0CAD: BCF 0A.30CAE: BCF 03.60CAF: CALL 0AF0CB0: BSF 0A.3.................... printf("Simple Thermomether %10.2f \r\n", az);0CB1: MOVLW 540CB2: BSF 03.60CB3: MOVWF 0D0CB4: MOVLW 000CB5: MOVWF 0F0CB6: BCF 03.00CB7: MOVLW 140CB8: BCF 03.60CB9: MOVWF 2F0CBA: BCF 0A.30CBB: CALL 5420CBC: BSF 0A.30CBD: MOVLW 090CBE: MOVWF 040CBF: MOVF 24,W0CC0: MOVWF 320CC1: MOVF 23,W0CC2: MOVWF 310CC3: MOVF 22,W0CC4: MOVWF 300CC5: MOVF 21,W0CC6: MOVWF 2F0CC7: MOVLW 020CC8: MOVWF 330CC9: BCF 0A.30CCA: GOTO 5D30CCB: BSF 0A.30CCC: MOVLW 200CCD: MOVWF 400CCE: BCF 0A.30CCF: CALL 08D0CD0: BSF 0A.30CD1: MOVLW 0D0CD2: MOVWF 400CD3: BCF 0A.30CD4: CALL 08D0CD5: BSF 0A.30CD6: MOVLW 0A0CD7: MOVWF 400CD8: BCF 0A.30CD9: CALL 08D0CDA: BSF 0A.3........................................ //X=mag_readX();.................... //Y=mag_readY();.................... //Z=mag_readZ();.................... printf("Simple Thermometherx %Ld \r\n", X);0CDB: MOVLW 630CDC: BSF 03.60CDD: MOVWF 0D0CDE: MOVLW 000CDF: MOVWF 0F0CE0: BCF 03.00CE1: MOVLW 150CE2: BCF 03.60CE3: MOVWF 2F0CE4: BCF 0A.30CE5: CALL 5420CE6: BSF 0A.30CE7: MOVLW 100CE8: MOVWF 040CE9: MOVF 2A,W0CEA: MOVWF 300CEB: MOVF 29,W0CEC: MOVWF 2F0CED: BCF 0A.30CEE: CALL 6BC0CEF: BSF 0A.30CF0: MOVLW 200CF1: MOVWF 400CF2: BCF 0A.30CF3: CALL 08D0CF4: BSF 0A.30CF5: MOVLW 0D0CF6: MOVWF 400CF7: BCF 0A.30CF8: CALL 08D0CF9: BSF 0A.30CFA: MOVLW 0A0CFB: MOVWF 400CFC: BCF 0A.30CFD: CALL 08D0CFE: BSF 0A.3.................... printf("Simple Thermomethery %Ld \r\n", Y);0CFF: MOVLW 710D00: BSF 03.60D01: MOVWF 0D0D02: MOVLW 000D03: MOVWF 0F0D04: BCF 03.00D05: MOVLW 150D06: BCF 03.60D07: MOVWF 2F0D08: BCF 0A.30D09: CALL 5420D0A: BSF 0A.30D0B: MOVLW 100D0C: MOVWF 040D0D: MOVF 2C,W0D0E: MOVWF 300D0F: MOVF 2B,W0D10: MOVWF 2F0D11: BCF 0A.30D12: CALL 6BC0D13: BSF 0A.30D14: MOVLW 200D15: MOVWF 400D16: BCF 0A.30D17: CALL 08D0D18: BSF 0A.30D19: MOVLW 0D0D1A: MOVWF 400D1B: BCF 0A.30D1C: CALL 08D0D1D: BSF 0A.30D1E: MOVLW 0A0D1F: MOVWF 400D20: BCF 0A.30D21: CALL 08D0D22: BSF 0A.3.................... printf("Simple Thermometherz %Ld \r\n", Z);0D23: MOVLW 7F0D24: BSF 03.60D25: MOVWF 0D0D26: MOVLW 000D27: MOVWF 0F0D28: BCF 03.00D29: MOVLW 150D2A: BCF 03.60D2B: MOVWF 2F0D2C: BCF 0A.30D2D: CALL 5420D2E: BSF 0A.30D2F: MOVLW 100D30: MOVWF 040D31: MOVF 2E,W0D32: MOVWF 300D33: MOVF 2D,W0D34: MOVWF 2F0D35: BCF 0A.30D36: CALL 6BC0D37: BSF 0A.30D38: MOVLW 200D39: MOVWF 400D3A: BCF 0A.30D3B: CALL 08D0D3C: BSF 0A.30D3D: MOVLW 0D0D3E: MOVWF 400D3F: BCF 0A.30D40: CALL 08D0D41: BSF 0A.30D42: MOVLW 0A0D43: MOVWF 400D44: BCF 0A.30D45: CALL 08D0D46: BSF 0A.3.................... Delay_ms(2000);0D47: MOVLW 080D48: MOVWF 2F0D49: MOVLW FA0D4A: MOVWF 300D4B: BCF 0A.30D4C: CALL 1080D4D: BSF 0A.30D4E: DECFSZ 2F,F0D4F: GOTO 549........................................ }0D50: GOTO 49F.................... }0D51: SLEEPConfiguration Fuses:Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40