CCS PCM C Compiler, Version 4.106, 47914 20-4-13 20:07Filename: C:\Users\Honza\Documents\pic\meteo_stanice\Nová sloka\main.lstROM used: 6167 words (75%)Largest free fragment is 1185RAM used: 29 (8%) at main() level144 (39%) worst caseStack: 5 worst case (3 in main + 2 for interrupts)*0000: MOVLW 180001: MOVWF 0A0002: GOTO 0000003: NOP0004: MOVWF 7F0005: SWAPF 03,W0006: CLRF 030007: MOVWF 210008: MOVF 0A,W0009: MOVWF 20000A: CLRF 0A000B: MOVF 04,W000C: MOVWF 22000D: MOVF 77,W000E: MOVWF 23000F: MOVF 78,W0010: MOVWF 240011: MOVF 79,W0012: MOVWF 250013: MOVF 7A,W0014: MOVWF 260015: BCF 03.70016: BCF 03.50017: MOVLW 8C0018: MOVWF 040019: BTFSS 00.0001A: GOTO 01D001B: BTFSC 0C.0001C: GOTO 032001D: BTFSS 0B.5001E: GOTO 021001F: BTFSC 0B.20020: GOTO 0350021: MOVF 22,W0022: MOVWF 040023: MOVF 23,W0024: MOVWF 770025: MOVF 24,W0026: MOVWF 780027: MOVF 25,W0028: MOVWF 790029: MOVF 26,W002A: MOVWF 7A002B: MOVF 20,W002C: MOVWF 0A002D: SWAPF 21,W002E: MOVWF 03002F: SWAPF 7F,F0030: SWAPF 7F,W0031: RETFIE0032: BCF 0A.30033: BCF 0A.40034: GOTO 1230035: BCF 0A.30036: BCF 0A.40037: GOTO 191........................................ //Meteorologicka cast.................... #define VERSION "0.1".................... #define AUTOR "Jan Chroust".................... #define DATE "15.4.2013"........................................ #include <main.h>.................... #include <16F887.h>.................... //////// Standard Header file for the PIC16F887 device ////////////////.................... #device PIC16F887.................... #list........................................ #device adc=8................................................................................ #FUSES WDT // Watch Dog Timer.................... //#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)*02F5: MOVLW 6502F6: MOVWF 0402F7: BCF 03.702F8: MOVF 00,W02F9: BTFSC 03.202FA: GOTO 30802FB: MOVLW 0202FC: MOVWF 7802FD: CLRF 7702FE: DECFSZ 77,F02FF: GOTO 2FE0300: DECFSZ 78,F0301: GOTO 2FD0302: MOVLW 970303: MOVWF 770304: DECFSZ 77,F0305: GOTO 3040306: DECFSZ 00,F0307: GOTO 2FB0308: RETURN........................................ //set I2C.................... #define PIN_SDA PIN_C4.................... #define PIN_SCL PIN_C3.................... #use i2c(master, sda=PIN_SDA, scl=PIN_SCL)*022E: MOVLW 08022F: MOVWF 780230: NOP0231: BCF 07.30232: BCF 28.30233: MOVF 28,W0234: BSF 03.50235: MOVWF 070236: NOP0237: RLF 73,F0238: BCF 03.50239: BCF 07.4023A: BTFSS 03.0023B: GOTO 242023C: BSF 28.4023D: MOVF 28,W023E: BSF 03.5023F: MOVWF 070240: GOTO 2460241: BCF 03.50242: BCF 28.40243: MOVF 28,W0244: BSF 03.50245: MOVWF 070246: NOP0247: BCF 03.50248: BSF 28.30249: MOVF 28,W024A: BSF 03.5024B: MOVWF 07024C: BCF 03.5024D: BTFSS 07.3024E: GOTO 24D024F: DECFSZ 78,F0250: GOTO 2300251: NOP0252: BCF 07.30253: BCF 28.30254: MOVF 28,W0255: BSF 03.50256: MOVWF 070257: NOP0258: BCF 03.50259: BSF 28.4025A: MOVF 28,W025B: BSF 03.5025C: MOVWF 07025D: NOP025E: NOP025F: BCF 03.50260: BSF 28.30261: MOVF 28,W0262: BSF 03.50263: MOVWF 070264: BCF 03.50265: BTFSS 07.30266: GOTO 2650267: CLRF 780268: NOP0269: BTFSC 07.4026A: BSF 78.0026B: BCF 07.3026C: BCF 28.3026D: MOVF 28,W026E: BSF 03.5026F: MOVWF 070270: BCF 03.50271: BCF 07.40272: BCF 28.40273: MOVF 28,W0274: BSF 03.50275: MOVWF 070276: BCF 03.50277: RETURN*02B0: MOVLW 0802B1: MOVWF 7402B2: MOVF 77,W02B3: MOVWF 7502B4: BSF 28.402B5: MOVF 28,W02B6: BSF 03.502B7: MOVWF 0702B8: NOP02B9: BCF 03.502BA: BSF 28.302BB: MOVF 28,W02BC: BSF 03.502BD: MOVWF 0702BE: BCF 03.502BF: BTFSS 07.302C0: GOTO 2BF02C1: BTFSC 07.402C2: BSF 03.002C3: BTFSS 07.402C4: BCF 03.002C5: RLF 78,F02C6: NOP02C7: BCF 28.302C8: MOVF 28,W02C9: BSF 03.502CA: MOVWF 0702CB: BCF 03.502CC: BCF 07.302CD: DECFSZ 74,F02CE: GOTO 2B402CF: BSF 28.402D0: MOVF 28,W02D1: BSF 03.502D2: MOVWF 0702D3: NOP02D4: BCF 03.502D5: BCF 07.402D6: MOVF 75,W02D7: BTFSC 03.202D8: GOTO 2DE02D9: BCF 28.402DA: MOVF 28,W02DB: BSF 03.502DC: MOVWF 0702DD: BCF 03.502DE: NOP02DF: BSF 28.302E0: MOVF 28,W02E1: BSF 03.502E2: MOVWF 0702E3: BCF 03.502E4: BTFSS 07.302E5: GOTO 2E402E6: NOP02E7: BCF 07.302E8: BCF 28.302E9: MOVF 28,W02EA: BSF 03.502EB: MOVWF 0702EC: NOP02ED: BCF 03.502EE: BCF 07.402EF: BCF 28.402F0: MOVF 28,W02F1: BSF 03.502F2: MOVWF 0702F3: BCF 03.502F4: RETURN.................... //set RS232.................... #use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8) //rcv TXD xmit RXD*03D1: BCF 28.703D2: MOVF 28,W03D3: BSF 03.503D4: MOVWF 0703D5: BCF 03.503D6: BCF 07.703D7: MOVLW 0803D8: MOVWF 7803D9: GOTO 3DA03DA: NOP03DB: BSF 78.703DC: GOTO 3EB03DD: BCF 78.703DE: RRF 64,F03DF: BTFSC 03.003E0: BSF 07.703E1: BTFSS 03.003E2: BCF 07.703E3: BSF 78.603E4: GOTO 3EB03E5: BCF 78.603E6: DECFSZ 78,F03E7: GOTO 3DE03E8: GOTO 3E903E9: NOP03EA: BSF 07.703EB: MOVLW 3F03EC: MOVWF 0403ED: DECFSZ 04,F03EE: GOTO 3ED03EF: NOP03F0: BTFSC 78.703F1: GOTO 3DD03F2: BTFSC 78.603F3: GOTO 3E503F4: 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;*10B8: BCF 76.0.................... flag = 0;10B9: BCF 76.1.................... y = x;10BA: MOVF 71,W10BB: MOVWF 7510BC: MOVF 70,W10BD: MOVWF 7410BE: MOVF 6F,W10BF: MOVWF 7310C0: MOVF 6E,W10C1: MOVWF 72........................................ if (x < 0)10C2: MOVF 71,W10C3: BSF 03.510C4: MOVWF 2810C5: MOVF 70,W10C6: MOVWF 2710C7: BCF 03.510C8: MOVF 6F,W10C9: BSF 03.510CA: MOVWF 2610CB: BCF 03.510CC: MOVF 6E,W10CD: BSF 03.510CE: MOVWF 2510CF: CLRF 2C10D0: CLRF 2B10D1: CLRF 2A10D2: CLRF 2910D3: BCF 0A.410D4: BSF 0A.310D5: BCF 03.510D6: CALL 5F110D7: BSF 0A.410D8: BCF 0A.310D9: BTFSS 03.010DA: GOTO 0DF.................... {.................... s = 1;10DB: BSF 76.0.................... y = -y;10DC: MOVF 73,W10DD: XORLW 8010DE: MOVWF 73.................... }........................................ if (y > 1.0)10DF: BSF 03.510E0: CLRF 2810E1: CLRF 2710E2: CLRF 2610E3: MOVLW 7F10E4: MOVWF 2510E5: MOVF 75,W10E6: MOVWF 2C10E7: MOVF 74,W10E8: MOVWF 2B10E9: MOVF 73,W10EA: MOVWF 2A10EB: MOVF 72,W10EC: MOVWF 2910ED: BCF 0A.410EE: BSF 0A.310EF: BCF 03.510F0: CALL 5F110F1: BSF 0A.410F2: BCF 0A.310F3: BTFSS 03.010F4: GOTO 11610F5: CLRF 2710F6: BTFSC 0B.710F7: BSF 27.710F8: BCF 0B.7.................... {.................... y = 1.0/y;10F9: BSF 03.510FA: CLRF 4510FB: CLRF 4410FC: CLRF 4310FD: MOVLW 7F10FE: MOVWF 4210FF: MOVF 75,W1100: MOVWF 491101: MOVF 74,W1102: MOVWF 481103: MOVF 73,W1104: MOVWF 471105: MOVF 72,W1106: MOVWF 461107: BCF 0A.41108: BCF 03.51109: CALL 057110A: BSF 0A.4110B: BTFSC 27.7110C: BSF 0B.7110D: MOVF 7A,W110E: MOVWF 75110F: MOVF 79,W1110: MOVWF 741111: MOVF 78,W1112: MOVWF 731113: MOVF 77,W1114: MOVWF 72.................... flag = 1;1115: BSF 76.1.................... }........................................ res = pat[0]*y*y + pat[1];1116: MOVLW 0A1117: BSF 03.51118: MOVWF 2C1119: MOVLW 89111A: MOVWF 2B111B: MOVLW 34111C: MOVWF 2A111D: MOVLW 7C111E: MOVWF 29111F: MOVF 75,W1120: MOVWF 301121: MOVF 74,W1122: MOVWF 2F1123: MOVF 73,W1124: MOVWF 2E1125: MOVF 72,W1126: MOVWF 2D1127: BCF 0A.41128: BCF 03.51129: CALL 76E112A: BSF 0A.4112B: MOVF 77,W112C: BSF 03.5112D: MOVWF 24112E: MOVF 78,W112F: MOVWF 251130: MOVF 79,W1131: MOVWF 261132: MOVF 7A,W1133: MOVWF 271134: MOVWF 2C1135: MOVF 26,W1136: MOVWF 2B1137: MOVF 25,W1138: MOVWF 2A1139: MOVF 24,W113A: MOVWF 29113B: MOVF 75,W113C: MOVWF 30113D: MOVF 74,W113E: MOVWF 2F113F: MOVF 73,W1140: MOVWF 2E1141: MOVF 72,W1142: MOVWF 2D1143: BCF 0A.41144: BCF 03.51145: CALL 76E1146: BSF 0A.41147: MOVF 77,W1148: BSF 03.51149: MOVWF 24114A: MOVF 78,W114B: MOVWF 25114C: MOVF 79,W114D: MOVWF 26114E: MOVF 7A,W114F: MOVWF 271150: BCF 03.11151: MOVF 27,W1152: MOVWF 2C1153: MOVF 26,W1154: MOVWF 2B1155: MOVF 25,W1156: MOVWF 2A1157: MOVF 24,W1158: MOVWF 291159: MOVLW 7C115A: MOVWF 30115B: MOVLW 79115C: MOVWF 2F115D: MOVLW 35115E: MOVWF 2E115F: MOVLW 811160: MOVWF 2D1161: BCF 0A.41162: BSF 0A.31163: BCF 03.51164: CALL 0001165: BSF 0A.41166: BCF 0A.31167: MOVF 7A,W1168: MOVWF 7E1169: MOVF 79,W116A: MOVWF 7D116B: MOVF 78,W116C: MOVWF 7C116D: MOVF 77,W116E: MOVWF 7B.................... res = res*y*y + pat[2];116F: MOVF 7E,W1170: BSF 03.51171: MOVWF 2C1172: MOVF 7D,W1173: MOVWF 2B1174: MOVF 7C,W1175: MOVWF 2A1176: MOVF 7B,W1177: MOVWF 291178: MOVF 75,W1179: MOVWF 30117A: MOVF 74,W117B: MOVWF 2F117C: MOVF 73,W117D: MOVWF 2E117E: MOVF 72,W117F: MOVWF 2D1180: BCF 0A.41181: BCF 03.51182: CALL 76E1183: BSF 0A.41184: MOVF 77,W1185: BSF 03.51186: MOVWF 241187: MOVF 78,W1188: MOVWF 251189: MOVF 79,W118A: MOVWF 26118B: MOVF 7A,W118C: MOVWF 27118D: MOVWF 2C118E: MOVF 26,W118F: MOVWF 2B1190: MOVF 25,W1191: MOVWF 2A1192: MOVF 24,W1193: MOVWF 291194: MOVF 75,W1195: MOVWF 301196: MOVF 74,W1197: MOVWF 2F1198: MOVF 73,W1199: MOVWF 2E119A: MOVF 72,W119B: MOVWF 2D119C: BCF 0A.4119D: BCF 03.5119E: CALL 76E119F: BSF 0A.411A0: MOVF 77,W11A1: BSF 03.511A2: MOVWF 2411A3: MOVF 78,W11A4: MOVWF 2511A5: MOVF 79,W11A6: MOVWF 2611A7: MOVF 7A,W11A8: MOVWF 2711A9: BCF 03.111AA: MOVF 27,W11AB: MOVWF 2C11AC: MOVF 26,W11AD: MOVWF 2B11AE: MOVF 25,W11AF: MOVWF 2A11B0: MOVF 24,W11B1: MOVWF 2911B2: MOVLW 3F11B3: MOVWF 3011B4: MOVLW 0211B5: MOVWF 2F11B6: MOVLW 3311B7: MOVWF 2E11B8: MOVLW 8311B9: MOVWF 2D11BA: BCF 0A.411BB: BSF 0A.311BC: BCF 03.511BD: CALL 00011BE: BSF 0A.411BF: BCF 0A.311C0: MOVF 7A,W11C1: MOVWF 7E11C2: MOVF 79,W11C3: MOVWF 7D11C4: MOVF 78,W11C5: MOVWF 7C11C6: MOVF 77,W11C7: MOVWF 7B.................... res = res*y*y + pat[3];11C8: MOVF 7E,W11C9: BSF 03.511CA: MOVWF 2C11CB: MOVF 7D,W11CC: MOVWF 2B11CD: MOVF 7C,W11CE: MOVWF 2A11CF: MOVF 7B,W11D0: MOVWF 2911D1: MOVF 75,W11D2: MOVWF 3011D3: MOVF 74,W11D4: MOVWF 2F11D5: MOVF 73,W11D6: MOVWF 2E11D7: MOVF 72,W11D8: MOVWF 2D11D9: BCF 0A.411DA: BCF 03.511DB: CALL 76E11DC: BSF 0A.411DD: MOVF 77,W11DE: BSF 03.511DF: MOVWF 2411E0: MOVF 78,W11E1: MOVWF 2511E2: MOVF 79,W11E3: MOVWF 2611E4: MOVF 7A,W11E5: MOVWF 2711E6: MOVWF 2C11E7: MOVF 26,W11E8: MOVWF 2B11E9: MOVF 25,W11EA: MOVWF 2A11EB: MOVF 24,W11EC: MOVWF 2911ED: MOVF 75,W11EE: MOVWF 3011EF: MOVF 74,W11F0: MOVWF 2F11F1: MOVF 73,W11F2: MOVWF 2E11F3: MOVF 72,W11F4: MOVWF 2D11F5: BCF 0A.411F6: BCF 03.511F7: CALL 76E11F8: BSF 0A.411F9: MOVF 77,W11FA: BSF 03.511FB: MOVWF 2411FC: MOVF 78,W11FD: MOVWF 2511FE: MOVF 79,W11FF: MOVWF 261200: MOVF 7A,W1201: MOVWF 271202: BCF 03.11203: MOVF 27,W1204: MOVWF 2C1205: MOVF 26,W1206: MOVWF 2B1207: MOVF 25,W1208: MOVWF 2A1209: MOVF 24,W120A: MOVWF 29120B: MOVLW 33120C: MOVWF 30120D: MOVLW 8C120E: MOVWF 2F120F: MOVLW 1E1210: MOVWF 2E1211: MOVLW 831212: MOVWF 2D1213: BCF 0A.41214: BSF 0A.31215: BCF 03.51216: CALL 0001217: BSF 0A.41218: BCF 0A.31219: MOVF 7A,W121A: MOVWF 7E121B: MOVF 79,W121C: MOVWF 7D121D: MOVF 78,W121E: MOVWF 7C121F: MOVF 77,W1220: MOVWF 7B........................................ r = qat[0]*y*y + qat[1];1221: BSF 03.51222: CLRF 2C1223: CLRF 2B1224: CLRF 2A1225: MOVLW 7F1226: MOVWF 291227: MOVF 75,W1228: MOVWF 301229: MOVF 74,W122A: MOVWF 2F122B: MOVF 73,W122C: MOVWF 2E122D: MOVF 72,W122E: MOVWF 2D122F: BCF 0A.41230: BCF 03.51231: CALL 76E1232: BSF 0A.41233: MOVF 77,W1234: BSF 03.51235: MOVWF 241236: MOVF 78,W1237: MOVWF 251238: MOVF 79,W1239: MOVWF 26123A: MOVF 7A,W123B: MOVWF 27123C: MOVWF 2C123D: MOVF 26,W123E: MOVWF 2B123F: MOVF 25,W1240: MOVWF 2A1241: MOVF 24,W1242: MOVWF 291243: MOVF 75,W1244: MOVWF 301245: MOVF 74,W1246: MOVWF 2F1247: MOVF 73,W1248: MOVWF 2E1249: MOVF 72,W124A: MOVWF 2D124B: BCF 0A.4124C: BCF 03.5124D: CALL 76E124E: BSF 0A.4124F: MOVF 77,W1250: BSF 03.51251: MOVWF 241252: MOVF 78,W1253: MOVWF 251254: MOVF 79,W1255: MOVWF 261256: MOVF 7A,W1257: MOVWF 271258: BCF 03.11259: MOVF 27,W125A: MOVWF 2C125B: MOVF 26,W125C: MOVWF 2B125D: MOVF 25,W125E: MOVWF 2A125F: MOVF 24,W1260: MOVWF 291261: MOVLW 1B1262: MOVWF 301263: MOVLW E41264: MOVWF 2F1265: MOVLW 351266: MOVWF 2E1267: MOVLW 821268: MOVWF 2D1269: BCF 0A.4126A: BSF 0A.3126B: BCF 03.5126C: CALL 000126D: BSF 0A.4126E: BCF 0A.3126F: MOVF 7A,W1270: BSF 03.51271: MOVWF 231272: MOVF 79,W1273: MOVWF 221274: MOVF 78,W1275: MOVWF 211276: MOVF 77,W1277: MOVWF 20.................... r = r*y*y + qat[2];1278: MOVF 23,W1279: MOVWF 2C127A: MOVF 22,W127B: MOVWF 2B127C: MOVF 21,W127D: MOVWF 2A127E: MOVF 20,W127F: MOVWF 291280: MOVF 75,W1281: MOVWF 301282: MOVF 74,W1283: MOVWF 2F1284: MOVF 73,W1285: MOVWF 2E1286: MOVF 72,W1287: MOVWF 2D1288: BCF 0A.41289: BCF 03.5128A: CALL 76E128B: BSF 0A.4128C: MOVF 77,W128D: BSF 03.5128E: MOVWF 24128F: MOVF 78,W1290: MOVWF 251291: MOVF 79,W1292: MOVWF 261293: MOVF 7A,W1294: MOVWF 271295: MOVWF 2C1296: MOVF 26,W1297: MOVWF 2B1298: MOVF 25,W1299: MOVWF 2A129A: MOVF 24,W129B: MOVWF 29129C: MOVF 75,W129D: MOVWF 30129E: MOVF 74,W129F: MOVWF 2F12A0: MOVF 73,W12A1: MOVWF 2E12A2: MOVF 72,W12A3: MOVWF 2D12A4: BCF 0A.412A5: BCF 03.512A6: CALL 76E12A7: BSF 0A.412A8: MOVF 77,W12A9: BSF 03.512AA: MOVWF 2412AB: MOVF 78,W12AC: MOVWF 2512AD: MOVF 79,W12AE: MOVWF 2612AF: MOVF 7A,W12B0: MOVWF 2712B1: BCF 03.112B2: MOVF 27,W12B3: MOVWF 2C12B4: MOVF 26,W12B5: MOVWF 2B12B6: MOVF 25,W12B7: MOVWF 2A12B8: MOVF 24,W12B9: MOVWF 2912BA: MOVLW A412BB: MOVWF 3012BC: MOVLW DB12BD: MOVWF 2F12BE: MOVLW 6712BF: MOVWF 2E12C0: MOVLW 8312C1: MOVWF 2D12C2: BCF 0A.412C3: BSF 0A.312C4: BCF 03.512C5: CALL 00012C6: BSF 0A.412C7: BCF 0A.312C8: MOVF 7A,W12C9: BSF 03.512CA: MOVWF 2312CB: MOVF 79,W12CC: MOVWF 2212CD: MOVF 78,W12CE: MOVWF 2112CF: MOVF 77,W12D0: MOVWF 20.................... r = r*y*y + qat[3];12D1: MOVF 23,W12D2: MOVWF 2C12D3: MOVF 22,W12D4: MOVWF 2B12D5: MOVF 21,W12D6: MOVWF 2A12D7: MOVF 20,W12D8: MOVWF 2912D9: MOVF 75,W12DA: MOVWF 3012DB: MOVF 74,W12DC: MOVWF 2F12DD: MOVF 73,W12DE: MOVWF 2E12DF: MOVF 72,W12E0: MOVWF 2D12E1: BCF 0A.412E2: BCF 03.512E3: CALL 76E12E4: BSF 0A.412E5: MOVF 77,W12E6: BSF 03.512E7: MOVWF 2412E8: MOVF 78,W12E9: MOVWF 2512EA: MOVF 79,W12EB: MOVWF 2612EC: MOVF 7A,W12ED: MOVWF 2712EE: MOVWF 2C12EF: MOVF 26,W12F0: MOVWF 2B12F1: MOVF 25,W12F2: MOVWF 2A12F3: MOVF 24,W12F4: MOVWF 2912F5: MOVF 75,W12F6: MOVWF 3012F7: MOVF 74,W12F8: MOVWF 2F12F9: MOVF 73,W12FA: MOVWF 2E12FB: MOVF 72,W12FC: MOVWF 2D12FD: BCF 0A.412FE: BCF 03.512FF: CALL 76E1300: BSF 0A.41301: MOVF 77,W1302: BSF 03.51303: MOVWF 241304: MOVF 78,W1305: MOVWF 251306: MOVF 79,W1307: MOVWF 261308: MOVF 7A,W1309: MOVWF 27130A: BCF 03.1130B: MOVF 27,W130C: MOVWF 2C130D: MOVF 26,W130E: MOVWF 2B130F: MOVF 25,W1310: MOVWF 2A1311: MOVF 24,W1312: MOVWF 291313: MOVLW 331314: MOVWF 301315: MOVLW 8C1316: MOVWF 2F1317: MOVLW 1E1318: MOVWF 2E1319: MOVLW 83131A: MOVWF 2D131B: BCF 0A.4131C: BSF 0A.3131D: BCF 03.5131E: CALL 000131F: BSF 0A.41320: BCF 0A.31321: MOVF 7A,W1322: BSF 03.51323: MOVWF 231324: MOVF 79,W1325: MOVWF 221326: MOVF 78,W1327: MOVWF 211328: MOVF 77,W1329: MOVWF 20........................................ res = y*res/r;132A: MOVF 75,W132B: MOVWF 2C132C: MOVF 74,W132D: MOVWF 2B132E: MOVF 73,W132F: MOVWF 2A1330: MOVF 72,W1331: MOVWF 291332: MOVF 7E,W1333: MOVWF 301334: MOVF 7D,W1335: MOVWF 2F1336: MOVF 7C,W1337: MOVWF 2E1338: MOVF 7B,W1339: MOVWF 2D133A: BCF 0A.4133B: BCF 03.5133C: CALL 76E133D: BSF 0A.4133E: MOVF 77,W133F: BSF 03.51340: MOVWF 241341: MOVF 78,W1342: MOVWF 251343: MOVF 79,W1344: MOVWF 261345: MOVF 7A,W1346: MOVWF 271347: BCF 03.51348: CLRF 271349: BTFSC 0B.7134A: BSF 27.7134B: BCF 0B.7134C: BSF 03.5134D: MOVF 27,W134E: MOVWF 45134F: MOVF 26,W1350: MOVWF 441351: MOVF 25,W1352: MOVWF 431353: MOVF 24,W1354: MOVWF 421355: MOVF 23,W1356: MOVWF 491357: MOVF 22,W1358: MOVWF 481359: MOVF 21,W135A: MOVWF 47135B: MOVF 20,W135C: MOVWF 46135D: BCF 0A.4135E: BCF 03.5135F: CALL 0571360: BSF 0A.41361: BTFSC 27.71362: BSF 0B.71363: MOVF 7A,W1364: MOVWF 7E1365: MOVF 79,W1366: MOVWF 7D1367: MOVF 78,W1368: MOVWF 7C1369: MOVF 77,W136A: MOVWF 7B............................................................ if (flag) // for |x| > 1136B: BTFSS 76.1136C: GOTO 38D.................... res = PI_DIV_BY_TWO - res;136D: BSF 03.1136E: MOVLW DB136F: BSF 03.51370: MOVWF 2C1371: MOVLW 0F1372: MOVWF 2B1373: MOVLW 491374: MOVWF 2A1375: MOVLW 7F1376: MOVWF 291377: MOVF 7E,W1378: MOVWF 301379: MOVF 7D,W137A: MOVWF 2F137B: MOVF 7C,W137C: MOVWF 2E137D: MOVF 7B,W137E: MOVWF 2D137F: BCF 0A.41380: BSF 0A.31381: BCF 03.51382: CALL 0001383: BSF 0A.41384: BCF 0A.31385: MOVF 7A,W1386: MOVWF 7E1387: MOVF 79,W1388: MOVWF 7D1389: MOVF 78,W138A: MOVWF 7C138B: MOVF 77,W138C: MOVWF 7B.................... if (s)138D: BTFSS 76.0138E: GOTO 392.................... res = -res;138F: MOVF 7C,W1390: XORLW 801391: MOVWF 7C........................................ return(res);1392: MOVF 7B,W1393: MOVWF 771394: MOVF 7C,W1395: MOVWF 781396: MOVF 7D,W1397: MOVWF 791398: MOVF 7E,W1399: 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 <string.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. ////.................... ////////////////////////////////////////////////////////////////////////////........................................ #ifndef _STRING.................... #define _STRING.................... #include <stddef.h>.................... ///////////////////////////////////////////////////////////////////////////.................... //// (C) Copyright 1996,2003 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. ////.................... ///////////////////////////////////////////////////////////////////////////........................................ #ifndef _STDDEF........................................ #define _STDDEF........................................ #if sizeof(unsigned int8 *)==1.................... #define ptrdiff_t unsigned int8.................... #else.................... #define ptrdiff_t unsigned int16.................... #endif........................................ #define size_t unsigned int8.................... #define wchar_t char.................... #define NULL 0........................................ #define offsetof(s,f) (offsetofbit(s,f)/8)........................................ #endif........................................ #include <ctype.h>.................... ////////////////////////////////////////////////////////////////////////////.................... //// (C) Copyright 1996,2003 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. ////.................... ////////////////////////////////////////////////////////////////////////////........................................ #ifndef _CTYPE.................... #define _CTYPE........................................ #define islower(x) isamong(x,"abcdefghijklmnopqrstuvwxyz").................... #define isupper(x) isamong(x,"ABCDEFGHIJKLMNOPQRSTUVWXYZ").................... #define isalnum(x) isamong(x,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").................... #define isalpha(x) isamong(x,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").................... #define isdigit(x) isamong(x,"0123456789").................... #define isspace(x) ((x)==' ').................... #define isxdigit(x) isamong(x,"0123456789ABCDEFabcdef").................... #define iscntrl(x) ((x)<' ').................... #define isprint(x) ((x)>=' ').................... #define isgraph(x) ((x)>' ').................... #define ispunct(x) (((x)>' ')&&!isalnum(x))........................................ #endif........................................................................................................................ //////////////////////////////////////////////.................... //// Uncomment the following define to ////.................... //// allow some functions to use a ////.................... //// quicker algorithm, but use more ROM ////.................... //// ////.................... //// #define FASTER_BUT_MORE_ROM ////.................... //////////////////////////////////////////////................................................................................ /*Copying functions*/.................... /* standard template:.................... void *memmove(void *s1, void *s2, size_t n)..................... Copies max of n characters safely (not following ending '\0').................... from s2 in s1; if s2 has less than n characters, appends 0 */........................................ char *memmove(void *s1,char *s2,size_t n).................... {.................... char *sc1;.................... char *sc2;.................... sc1=s1;.................... sc2=s2;.................... if(sc2<sc1 && sc1 <sc2 +n).................... for(sc1+=n,sc2+=n;0<n;--n).................... *--sc1=*--sc2;.................... else.................... for(;0<n;--n).................... *sc1++=*sc2++;.................... return s1;.................... }........................................ /* Standard template: char *strcpy(char *s1, const char *s2).................... copies the string s2 including the null character to s1..................... This is a compiler built in to handle the different address.................... spaces */........................................ #define strcopy strcpy........................................ /* standard template:.................... char *strncpy(char *s1, const char *s2, size_t n)..................... Copies max of n characters (not following ending '\0').................... from s2 in s1; if s2 has less than n characters, appends 0 */........................................ char *strncpy(char *s1, char *s2, size_t n).................... {.................... char *s;........................................ for (s = s1; n > 0 && *s2 != '\0'; n--).................... *s++ = *s2++;.................... for (; n > 0; n--).................... *s++ = '\0';........................................ return(s1);.................... }.................... /***********************************************************/........................................ /*concatenation functions*/.................... /* standard template: char *strcat(char *s1, const char *s2).................... appends s2 to s1*/........................................ char *strcat(char *s1, char *s2).................... {.................... char *s;........................................ for (s = s1; *s != '\0'; ++s);.................... while(*s2 != '\0').................... {.................... *s = *s2;.................... ++s;.................... ++s2;.................... }........................................ *s = '\0';.................... return(s1);.................... }.................... /* standard template: char *strncat(char *s1, char *s2,size_t n).................... appends not more than n characters from s2 to s1*/........................................ char *strncat(char *s1, char *s2, size_t n).................... {.................... char *s;........................................ for (s = s1; *s != '\0'; ++s);.................... while(*s2 != '\0' && 0<n).................... {.................... *s = *s2;.................... ++s;.................... ++s2;.................... --n;.................... }........................................ *s = '\0';.................... return(s1);.................... }........................................ /***********************************************************/............................................................ /*comparison functions*/.................... /* standard template: signed int memcmp(void *s1, void *s2)..................... Compares s1 & s2; returns -1 if s1<s2, 0 if s1=s2, 1 if s1>s2 */........................................ signed int8 memcmp(void * s1,char *s2,size_t n).................... {.................... char *su1, *su2;.................... for(su1=s1, su2=s2; 0<n; ++su1, ++su2, --n).................... {.................... if(*su1!=*su2).................... return ((*su1<*su2)?-1:+1);.................... }.................... return 0;.................... }........................................ /* standard template: int strcmp(const char *s1, const char *s2)..................... Compares s1 & s2; returns -1 if s1<s2, 0 if s1=s2, 1 if s1>s2 */........................................ signed int8 strcmp(char *s1, char *s2).................... {.................... for (; *s1 == *s2; s1++, s2++).................... if (*s1 == '\0').................... return(0);.................... return((*s1 < *s2) ? -1: 1);.................... }.................... /* standard template: int strcoll(const char *s1, const char *s2)..................... Compares s1 & s2; returns -1 if s1<s2, 0 if s1=s2, 1 if s1>s2 */........................................ signed int8 strcoll(char *s1, char *s2).................... {.................... for (; *s1 == *s2; s1++, s2++).................... if (*s1 == '\0').................... return(0);.................... return((*s1 < *s2) ? -1: 1);.................... }........................................ /* standard template:.................... int strncmp(const char *s1, const char *s2, size_t n)..................... Compares max of n characters (not following 0) from s1 to s2;.................... returns same as strcmp */........................................ signed int8 strncmp(char *s1, char *s2, size_t n).................... {.................... for (; n > 0; s1++, s2++, n--).................... if (*s1 != *s2).................... return((*s1 <*s2) ? -1: 1);.................... else if (*s1 == '\0').................... return(0);.................... return(0);.................... }.................... /* standard template:.................... int strxfrm(const char *s1, const char *s2, size_t n)..................... transforms maximum of n characters from s2 and places them into s1*/.................... size_t strxfrm(char *s1, char *s2, size_t n).................... {.................... char *s;.................... unsigned int8 n1;.................... n1=n;.................... for (s = s1; n > 0 && *s2 != '\0'; n--).................... *s++ = *s2++;.................... for (; n > 0; n--).................... *s++ = '\0';........................................ return(n1);.................... }........................................................................................................................ /***********************************************************/.................... /*Search functions*/.................... /* standard template: void *memchr(const char *s, int c)..................... Finds first occurrence of c in n characters of s */........................................ char *memchr(void *s,unsigned int8 c,size_t n).................... {.................... char uc;.................... char *su;.................... uc=c;.................... for(su=s;0<n;++su,--n).................... if(*su==uc).................... return su;.................... return NULL;.................... }........................................ /* standard template: char *strchr(const char *s, int c)..................... Finds first occurrence of c in s */........................................ char *strchr(char *s, unsigned int8 c).................... {.................... for (; *s != c; s++).................... if (*s == '\0').................... return(0);.................... return(s);.................... }.................... /* standard template:.................... size_t strcspn(const char *s1, const char *s2)..................... Computes length of max initial segment of s1 that.................... consists entirely of characters NOT from s2*/........................................ unsigned int8 strcspn(char *s1, char *s2).................... {.................... char *sc1, *sc2;........................................ for (sc1 = s1; *sc1 != 0; sc1++).................... for (sc2 = s2; *sc2 != 0; sc2++).................... if (*sc1 == *sc2).................... return(sc1 - s1);.................... return(sc1 - s1);.................... }.................... /* standard template:.................... char *strpbrk(const char *s1, const char *s2)..................... Locates first occurence of any character from s2 in s1;.................... returns s1 if s2 is empty string */........................................ char *strpbrk(char *s1, char *s2).................... {.................... char *sc1, *sc2;........................................ for (sc1 = s1; *sc1 != 0; sc1++).................... for (sc2 = s2; *sc2 != 0; sc2++).................... if (*sc1 == *sc2).................... return(sc1);.................... return(0);.................... }............................................................ /* standard template: char *strrchr(const char *s, int c)..................... Finds last occurrence of c in s */........................................ char *strrchr(char *s, unsigned int8 c).................... {.................... char *p;........................................ for (p = 0; ; s++).................... {.................... if (*s == c).................... p = s;.................... if (*s == '\0').................... return(p);.................... }.................... }.................... /* computes length of max initial segment of s1 consisting.................... entirely of characters from s2 */........................................ unsigned int8 strspn(char *s1, char *s2).................... {.................... char *sc1, *sc2;........................................ for (sc1 = s1; *sc1 != 0; sc1++).................... for (sc2 = s2; ; sc2++).................... if (*sc2 == '\0').................... return(sc1 - s1);.................... else if (*sc1 == *sc2).................... break;.................... return(sc1 - s1);.................... }.................... /* standard template:.................... char *strstr(const char *s1, const char *s2);.................... Locates first occurence of character sequence s2 in s1;.................... returns 0 if s2 is empty string........................................ Uncomment #define FASTER_BUT_MORE_ROM at the top of the.................... file to use the faster algorithm */.................... char *strstr(char *s1, char *s2).................... {.................... char *s, *t;........................................ #ifdef FASTER_BUT_MORE_ROM.................... if (*s2 == '\0').................... return(s1);.................... #endif........................................ while (*s1).................... {.................... for(s = s1, t = s2; *t && (*s == *t); ++s, ++t);........................................ if (*t == '\0').................... return s1;.................... ++s1;.................... #ifdef FASTER_BUT_MORE_ROM.................... while(*s1 != '\0' && *s1 != *s2).................... ++s1;.................... #endif.................... }.................... return 0;.................... }........................................ /* standard template: char *strtok(char *s1, const char *s2)......................................... Finds next token in s1 delimited by a character from separator.................... string s2 (which can be different from call to call). First call.................... starts at beginning of s1 searching for first character NOT.................... contained in s2; returns 0 if none is found..................... If one is found, it is the start of first token (return value)..................... Function then searches from there for a character contained in s2..................... If none is found, current token extends to end of s1, and subsequent.................... searches for a token will return 0. If one is found, it is.................... overwritten by '\0', which terminates current token. Function saves.................... pointer to following character from which next search will start..................... Each subsequent call, with 0 as first argument, starts searching.................... from saved pointer */........................................ char *strtok(char *s1, char *s2).................... {.................... char *beg, *end;.................... static char *save;*1825: CLRF 291826: CLRF 2A........................................ beg = (s1)? s1: save;.................... beg += strspn(beg, s2);.................... if (*beg == '\0').................... {.................... *save = ' ';.................... return(0);.................... }.................... end = strpbrk(beg, s2);.................... if (*end != '\0').................... {.................... *end = '\0';.................... end++;.................... }.................... save = end;.................... return(beg);.................... }........................................ /*****************************************************************/.................... /*Miscellaneous functions*/.................... /* standard template.................... maps error number in errnum to an error message string.................... Returns: Pointer to string.................... */.................... #ifdef _ERRNO.................... char * strerror(unsigned int8 errnum).................... {.................... char s[15];.................... switch( errnum).................... {.................... case 0:.................... strcpy(s,"no errors");.................... return s;.................... case EDOM :.................... strcpy(s,"domain error");.................... return s;.................... case ERANGE:.................... strcpy(s,"range error");.................... return s;.................... }.................... }.................... #ENDIF.................... /* standard template: size_t strlen(const char *s)..................... Computes length of s1 (preceding terminating 0) */........................................ unsigned int8 strlen(char *s).................... {.................... char *sc;........................................ for (sc = s; *sc != 0; sc++);.................... return(sc - s);.................... }........................................ /* standard template: size_t stricmp(const char *s1, const char *s2)..................... Compares s1 to s2 ignoring case (upper vs. lower) */........................................ signed int8 stricmp(char *s1, char *s2).................... {.................... for(; *s1==*s2||(isalpha(*s1)&&isalpha(*s2)&&(*s1==*s2+32||*s2==*s1+32));.................... s1++, s2++).................... if (*s1 == '\0').................... return(0);.................... return((*s1 < *s2) ? -1: 1);.................... }............................................................ /* standard template: char *strlwr(char *s)..................... Replaces uppercase letters by lowercase;.................... returns pointer to new string s */........................................ char *strlwr(char *s).................... {.................... char *p;........................................ for (p = s; *p != '\0'; p++).................... if (*p >= 'A' && *p <='Z').................... *p += 'a' - 'A';.................... return(s);.................... }............................................................ /************************************************************/............................................................ #endif............................................................ #include "SHT25.h"........................................ #define SHT25_HEATER_ON 0x04.................... #define SHT25_HEATER_OFF 0x00.................... #define SHT25_OTP_reload_off 0x02.................... #define SHT25_RH12_T14 0x00.................... #define SHT25_RH8_T12 0x01.................... #define SHT25_RH10_T13 0x80.................... #define SHT25_RH11_T11 0x81........................................ #define SHT25_ADDR 0x80........................................ #include "SHT25.c".................... void SHT25_soft_reset().................... {.................... i2c_start(); // Start condition*0278: BSF 28.40279: MOVF 28,W027A: BSF 03.5027B: MOVWF 07027C: NOP027D: BCF 03.5027E: BSF 28.3027F: MOVF 28,W0280: BSF 03.50281: MOVWF 070282: NOP0283: BCF 03.50284: BCF 07.40285: BCF 28.40286: MOVF 28,W0287: BSF 03.50288: MOVWF 070289: NOP028A: BCF 03.5028B: BCF 07.3028C: BCF 28.3028D: MOVF 28,W028E: BSF 03.5028F: MOVWF 07.................... i2c_write(0x80); // Device address0290: MOVLW 800291: MOVWF 730292: BCF 03.50293: CALL 22E.................... i2c_write(0xFE); // Device command0294: MOVLW FE0295: MOVWF 730296: CALL 22E.................... i2c_stop(); // Stop condition0297: BCF 28.40298: MOVF 28,W0299: BSF 03.5029A: MOVWF 07029B: NOP029C: BCF 03.5029D: BSF 28.3029E: MOVF 28,W029F: BSF 03.502A0: MOVWF 0702A1: BCF 03.502A2: BTFSS 07.302A3: GOTO 2A202A4: NOP02A5: GOTO 2A602A6: NOP02A7: BSF 28.402A8: MOVF 28,W02A9: BSF 03.502AA: MOVWF 0702AB: NOP.................... }02AC: BCF 03.502AD: BSF 0A.302AE: BSF 0A.402AF: GOTO 092 (RETURN)........................................ unsigned int8 SHT25_setup(unsigned int8 setup_reg ) // writes to status register and returns its value.................... {.................... unsigned int8 reg;........................................ i2c_start(); // Start condition*0309: BSF 28.4030A: MOVF 28,W030B: BSF 03.5030C: MOVWF 07030D: NOP030E: BCF 03.5030F: BSF 28.30310: MOVF 28,W0311: BSF 03.50312: MOVWF 070313: NOP0314: BCF 03.50315: BCF 07.40316: BCF 28.40317: MOVF 28,W0318: BSF 03.50319: MOVWF 07031A: NOP031B: BCF 03.5031C: BCF 07.3031D: BCF 28.3031E: MOVF 28,W031F: BSF 03.50320: MOVWF 07.................... i2c_write(SHT25_ADDR); // Device address0321: MOVLW 800322: MOVWF 730323: BCF 03.50324: CALL 22E.................... i2c_write(0xE7); // Device command0325: MOVLW E70326: MOVWF 730327: CALL 22E........................................ i2c_start(); // Start condition0328: BSF 28.40329: MOVF 28,W032A: BSF 03.5032B: MOVWF 07032C: NOP032D: BCF 03.5032E: BSF 28.3032F: MOVF 28,W0330: BSF 03.50331: MOVWF 070332: NOP0333: BCF 03.50334: BTFSS 07.30335: GOTO 3340336: BCF 07.40337: BCF 28.40338: MOVF 28,W0339: BSF 03.5033A: MOVWF 07033B: NOP033C: BCF 03.5033D: BCF 07.3033E: BCF 28.3033F: MOVF 28,W0340: BSF 03.50341: MOVWF 07.................... i2c_write(SHT25_ADDR+1); // Device address0342: MOVLW 810343: MOVWF 730344: BCF 03.50345: CALL 22E.................... reg=i2c_read(0); // Read status actual status register0346: CLRF 770347: CALL 2B00348: MOVF 78,W0349: MOVWF 61........................................ reg = (reg & 0x3A) | setup_reg;034A: MOVF 61,W034B: ANDLW 3A034C: IORWF 60,W034D: MOVWF 61........................................ i2c_start(); // Start condition034E: BSF 28.4034F: MOVF 28,W0350: BSF 03.50351: MOVWF 070352: NOP0353: BCF 03.50354: BSF 28.30355: MOVF 28,W0356: BSF 03.50357: MOVWF 070358: NOP0359: BCF 03.5035A: BTFSS 07.3035B: GOTO 35A035C: BCF 07.4035D: BCF 28.4035E: MOVF 28,W035F: BSF 03.50360: MOVWF 070361: NOP0362: BCF 03.50363: BCF 07.30364: BCF 28.30365: MOVF 28,W0366: BSF 03.50367: MOVWF 07.................... i2c_write(SHT25_ADDR); // Device address0368: MOVLW 800369: MOVWF 73036A: BCF 03.5036B: CALL 22E.................... i2c_write(0xE6); // Write to status register036C: MOVLW E6036D: MOVWF 73036E: CALL 22E.................... i2c_write(reg); // Device command036F: MOVF 61,W0370: MOVWF 730371: CALL 22E.................... i2c_stop(); // Stop condition0372: BCF 28.40373: MOVF 28,W0374: BSF 03.50375: MOVWF 070376: NOP0377: BCF 03.50378: BSF 28.30379: MOVF 28,W037A: BSF 03.5037B: MOVWF 07037C: BCF 03.5037D: BTFSS 07.3037E: GOTO 37D037F: NOP0380: GOTO 3810381: NOP0382: BSF 28.40383: MOVF 28,W0384: BSF 03.50385: MOVWF 070386: NOP........................................ delay_ms(10);0387: MOVLW 0A0388: BCF 03.50389: MOVWF 65038A: CALL 2F5........................................ i2c_start(); // Start condition038B: BSF 28.4038C: MOVF 28,W038D: BSF 03.5038E: MOVWF 07038F: NOP0390: BCF 03.50391: BSF 28.30392: MOVF 28,W0393: BSF 03.50394: MOVWF 070395: NOP0396: BCF 03.50397: BCF 07.40398: BCF 28.40399: MOVF 28,W039A: BSF 03.5039B: MOVWF 07039C: NOP039D: BCF 03.5039E: BCF 07.3039F: BCF 28.303A0: MOVF 28,W03A1: BSF 03.503A2: MOVWF 07.................... i2c_write(SHT25_ADDR); // Device address03A3: MOVLW 8003A4: MOVWF 7303A5: BCF 03.503A6: CALL 22E.................... i2c_write(0xE7); // Device command03A7: MOVLW E703A8: MOVWF 7303A9: CALL 22E........................................ i2c_start(); // Start condition03AA: BSF 28.403AB: MOVF 28,W03AC: BSF 03.503AD: MOVWF 0703AE: NOP03AF: BCF 03.503B0: BSF 28.303B1: MOVF 28,W03B2: BSF 03.503B3: MOVWF 0703B4: NOP03B5: BCF 03.503B6: BTFSS 07.303B7: GOTO 3B603B8: BCF 07.403B9: BCF 28.403BA: MOVF 28,W03BB: BSF 03.503BC: MOVWF 0703BD: NOP03BE: BCF 03.503BF: BCF 07.303C0: BCF 28.303C1: MOVF 28,W03C2: BSF 03.503C3: MOVWF 07.................... i2c_write(SHT25_ADDR+1); // Device address03C4: MOVLW 8103C5: MOVWF 7303C6: BCF 03.503C7: CALL 22E.................... reg=i2c_read(0); // Read status actual status register03C8: CLRF 7703C9: CALL 2B003CA: MOVF 78,W03CB: MOVWF 61........................................ return (reg);03CC: MOVF 61,W03CD: MOVWF 78.................... }03CE: BSF 0A.303CF: BSF 0A.403D0: GOTO 09A (RETURN)............................................................ float SHT25_get_temp().................... {.................... unsigned int8 MSB, LSB, Check;.................... unsigned int16 data;........................................ i2c_start();*0B85: BSF 28.40B86: MOVF 28,W0B87: BSF 03.50B88: MOVWF 070B89: NOP0B8A: BCF 03.50B8B: BSF 28.30B8C: MOVF 28,W0B8D: BSF 03.50B8E: MOVWF 070B8F: NOP0B90: BCF 03.50B91: BTFSS 07.30B92: GOTO 3910B93: BCF 07.40B94: BCF 28.40B95: MOVF 28,W0B96: BSF 03.50B97: MOVWF 070B98: NOP0B99: BCF 03.50B9A: BCF 07.30B9B: BCF 28.30B9C: MOVF 28,W0B9D: BSF 03.50B9E: MOVWF 07.................... I2C_Write(SHT25_ADDR);0B9F: MOVLW 800BA0: MOVWF 730BA1: BCF 0A.30BA2: BCF 03.50BA3: CALL 22E0BA4: BSF 0A.3.................... I2C_write(0xE3);0BA5: MOVLW E30BA6: MOVWF 730BA7: BCF 0A.30BA8: CALL 22E0BA9: BSF 0A.3.................... i2c_stop();0BAA: BCF 28.40BAB: MOVF 28,W0BAC: BSF 03.50BAD: MOVWF 070BAE: NOP0BAF: BCF 03.50BB0: BSF 28.30BB1: MOVF 28,W0BB2: BSF 03.50BB3: MOVWF 070BB4: BCF 03.50BB5: BTFSS 07.30BB6: GOTO 3B50BB7: NOP0BB8: GOTO 3B90BB9: NOP0BBA: BSF 28.40BBB: MOVF 28,W0BBC: BSF 03.50BBD: MOVWF 070BBE: NOP........................................ delay_ms(100);0BBF: MOVLW 640BC0: BCF 03.50BC1: MOVWF 650BC2: BCF 0A.30BC3: CALL 2F50BC4: BSF 0A.3........................................ i2c_start();0BC5: BSF 28.40BC6: MOVF 28,W0BC7: BSF 03.50BC8: MOVWF 070BC9: NOP0BCA: BCF 03.50BCB: BSF 28.30BCC: MOVF 28,W0BCD: BSF 03.50BCE: MOVWF 070BCF: NOP0BD0: BCF 03.50BD1: BCF 07.40BD2: BCF 28.40BD3: MOVF 28,W0BD4: BSF 03.50BD5: MOVWF 070BD6: NOP0BD7: BCF 03.50BD8: BCF 07.30BD9: BCF 28.30BDA: MOVF 28,W0BDB: BSF 03.50BDC: MOVWF 07.................... I2C_Write(SHT25_ADDR+1);0BDD: MOVLW 810BDE: MOVWF 730BDF: BCF 0A.30BE0: BCF 03.50BE1: CALL 22E0BE2: BSF 0A.3.................... MSB=i2c_read(1);0BE3: MOVLW 010BE4: MOVWF 770BE5: BCF 0A.30BE6: CALL 2B00BE7: BSF 0A.30BE8: MOVF 78,W0BE9: MOVWF 60.................... LSB=i2c_read(1);0BEA: MOVLW 010BEB: MOVWF 770BEC: BCF 0A.30BED: CALL 2B00BEE: BSF 0A.30BEF: MOVF 78,W0BF0: MOVWF 61.................... Check=i2c_read(0);0BF1: CLRF 770BF2: BCF 0A.30BF3: CALL 2B00BF4: BSF 0A.30BF5: MOVF 78,W0BF6: MOVWF 62.................... i2c_stop();0BF7: BCF 28.40BF8: MOVF 28,W0BF9: BSF 03.50BFA: MOVWF 070BFB: NOP0BFC: BCF 03.50BFD: BSF 28.30BFE: MOVF 28,W0BFF: BSF 03.50C00: MOVWF 070C01: BCF 03.50C02: BTFSS 07.30C03: GOTO 4020C04: NOP0C05: GOTO 4060C06: NOP0C07: BSF 28.40C08: MOVF 28,W0C09: BSF 03.50C0A: MOVWF 070C0B: NOP........................................ LSB = LSB >> 2; // trow out status bits0C0C: BCF 03.50C0D: RRF 61,F0C0E: RRF 61,F0C0F: MOVLW 3F0C10: ANDWF 61,F........................................ data = (((unsigned int16) MSB << 8) + (LSB << 4));0C11: CLRF 660C12: MOVF 60,W0C13: MOVWF 650C14: MOVWF 660C15: CLRF 650C16: SWAPF 61,W0C17: MOVWF 770C18: MOVLW F00C19: ANDWF 77,F0C1A: MOVF 77,W0C1B: ADDWF 65,W0C1C: MOVWF 630C1D: MOVF 66,W0C1E: MOVWF 640C1F: BTFSC 03.00C20: INCF 64,F0C21: CLRF 270C22: BTFSC 0B.70C23: BSF 27.70C24: BCF 0B.7.................... return(-46.85 + 175.72*((float)data/0xFFFF));0C25: MOVF 64,W0C26: BSF 03.50C27: MOVWF 430C28: BCF 03.50C29: MOVF 63,W0C2A: BSF 03.50C2B: MOVWF 420C2C: BCF 0A.30C2D: BCF 03.50C2E: CALL 0380C2F: BSF 0A.30C30: BTFSC 27.70C31: BSF 0B.70C32: MOVF 77,W0C33: MOVWF 650C34: MOVF 78,W0C35: MOVWF 660C36: MOVF 79,W0C37: MOVWF 670C38: MOVF 7A,W0C39: MOVWF 680C3A: CLRF 270C3B: BTFSC 0B.70C3C: BSF 27.70C3D: BCF 0B.70C3E: MOVF 68,W0C3F: BSF 03.50C40: MOVWF 450C41: BCF 03.50C42: MOVF 67,W0C43: BSF 03.50C44: MOVWF 440C45: BCF 03.50C46: MOVF 66,W0C47: BSF 03.50C48: MOVWF 430C49: BCF 03.50C4A: MOVF 65,W0C4B: BSF 03.50C4C: MOVWF 420C4D: CLRF 490C4E: MOVLW FF0C4F: MOVWF 480C50: MOVLW 7F0C51: MOVWF 470C52: MOVLW 8E0C53: MOVWF 460C54: BCF 0A.30C55: BCF 03.50C56: CALL 0570C57: BSF 0A.30C58: BTFSC 27.70C59: BSF 0B.70C5A: MOVLW 520C5B: BSF 03.50C5C: MOVWF 2C0C5D: MOVLW B80C5E: MOVWF 2B0C5F: MOVLW 2F0C60: MOVWF 2A0C61: MOVLW 860C62: MOVWF 290C63: MOVF 7A,W0C64: MOVWF 300C65: MOVF 79,W0C66: MOVWF 2F0C67: MOVF 78,W0C68: MOVWF 2E0C69: MOVF 77,W0C6A: MOVWF 2D0C6B: BCF 0A.30C6C: BCF 03.50C6D: CALL 76E0C6E: BSF 0A.30C6F: BCF 03.10C70: MOVLW 660C71: BSF 03.50C72: MOVWF 2C0C73: MOVWF 2B0C74: MOVLW BB0C75: MOVWF 2A0C76: MOVLW 840C77: MOVWF 290C78: MOVF 7A,W0C79: MOVWF 300C7A: MOVF 79,W0C7B: MOVWF 2F0C7C: MOVF 78,W0C7D: MOVWF 2E0C7E: MOVF 77,W0C7F: MOVWF 2D0C80: BCF 03.50C81: CALL 000.................... }0C82: BSF 0A.30C83: BSF 0A.40C84: GOTO 0FB (RETURN)........................................ float SHT25_get_hum().................... {.................... unsigned int8 MSB, LSB, Check;.................... unsigned int16 data;........................................ i2c_start(); //RH0C85: BSF 28.40C86: MOVF 28,W0C87: BSF 03.50C88: MOVWF 070C89: NOP0C8A: BCF 03.50C8B: BSF 28.30C8C: MOVF 28,W0C8D: BSF 03.50C8E: MOVWF 070C8F: NOP0C90: BCF 03.50C91: BCF 07.40C92: BCF 28.40C93: MOVF 28,W0C94: BSF 03.50C95: MOVWF 070C96: NOP0C97: BCF 03.50C98: BCF 07.30C99: BCF 28.30C9A: MOVF 28,W0C9B: BSF 03.50C9C: MOVWF 07.................... I2C_Write(SHT25_ADDR);0C9D: MOVLW 800C9E: MOVWF 730C9F: BCF 0A.30CA0: BCF 03.50CA1: CALL 22E0CA2: BSF 0A.3.................... I2C_write(0xE5);0CA3: MOVLW E50CA4: MOVWF 730CA5: BCF 0A.30CA6: CALL 22E0CA7: BSF 0A.3........................................ delay_ms(100);0CA8: MOVLW 640CA9: MOVWF 650CAA: BCF 0A.30CAB: CALL 2F50CAC: BSF 0A.3........................................ i2c_start();0CAD: BSF 28.40CAE: MOVF 28,W0CAF: BSF 03.50CB0: MOVWF 070CB1: NOP0CB2: BCF 03.50CB3: BSF 28.30CB4: MOVF 28,W0CB5: BSF 03.50CB6: MOVWF 070CB7: NOP0CB8: BCF 03.50CB9: BTFSS 07.30CBA: GOTO 4B90CBB: BCF 07.40CBC: BCF 28.40CBD: MOVF 28,W0CBE: BSF 03.50CBF: MOVWF 070CC0: NOP0CC1: BCF 03.50CC2: BCF 07.30CC3: BCF 28.30CC4: MOVF 28,W0CC5: BSF 03.50CC6: MOVWF 07.................... I2C_Write(SHT25_ADDR+1);0CC7: MOVLW 810CC8: MOVWF 730CC9: BCF 0A.30CCA: BCF 03.50CCB: CALL 22E0CCC: BSF 0A.3.................... MSB=i2c_read(1);0CCD: MOVLW 010CCE: MOVWF 770CCF: BCF 0A.30CD0: CALL 2B00CD1: BSF 0A.30CD2: MOVF 78,W0CD3: MOVWF 60.................... LSB=i2c_read(1);0CD4: MOVLW 010CD5: MOVWF 770CD6: BCF 0A.30CD7: CALL 2B00CD8: BSF 0A.30CD9: MOVF 78,W0CDA: MOVWF 61.................... Check=i2c_read(0);0CDB: CLRF 770CDC: BCF 0A.30CDD: CALL 2B00CDE: BSF 0A.30CDF: MOVF 78,W0CE0: MOVWF 62.................... i2c_stop();0CE1: BCF 28.40CE2: MOVF 28,W0CE3: BSF 03.50CE4: MOVWF 070CE5: NOP0CE6: BCF 03.50CE7: BSF 28.30CE8: MOVF 28,W0CE9: BSF 03.50CEA: MOVWF 070CEB: BCF 03.50CEC: BTFSS 07.30CED: GOTO 4EC0CEE: NOP0CEF: GOTO 4F00CF0: NOP0CF1: BSF 28.40CF2: MOVF 28,W0CF3: BSF 03.50CF4: MOVWF 070CF5: NOP........................................ LSB = LSB >> 2; // trow out status bits0CF6: BCF 03.50CF7: RRF 61,F0CF8: RRF 61,F0CF9: MOVLW 3F0CFA: ANDWF 61,F........................................ data = (((unsigned int16) MSB << 8) + (LSB << 4) );0CFB: CLRF 660CFC: MOVF 60,W0CFD: MOVWF 650CFE: MOVWF 660CFF: CLRF 650D00: SWAPF 61,W0D01: MOVWF 770D02: MOVLW F00D03: ANDWF 77,F0D04: MOVF 77,W0D05: ADDWF 65,W0D06: MOVWF 630D07: MOVF 66,W0D08: MOVWF 640D09: BTFSC 03.00D0A: INCF 64,F0D0B: CLRF 270D0C: BTFSC 0B.70D0D: BSF 27.70D0E: BCF 0B.7.................... return( -6.0 + 125.0*((float)data/0xFFFF));0D0F: MOVF 64,W0D10: BSF 03.50D11: MOVWF 430D12: BCF 03.50D13: MOVF 63,W0D14: BSF 03.50D15: MOVWF 420D16: BCF 0A.30D17: BCF 03.50D18: CALL 0380D19: BSF 0A.30D1A: BTFSC 27.70D1B: BSF 0B.70D1C: MOVF 77,W0D1D: MOVWF 650D1E: MOVF 78,W0D1F: MOVWF 660D20: MOVF 79,W0D21: MOVWF 670D22: MOVF 7A,W0D23: MOVWF 680D24: CLRF 270D25: BTFSC 0B.70D26: BSF 27.70D27: BCF 0B.70D28: MOVF 7A,W0D29: BSF 03.50D2A: MOVWF 450D2B: BCF 03.50D2C: MOVF 79,W0D2D: BSF 03.50D2E: MOVWF 440D2F: BCF 03.50D30: MOVF 78,W0D31: BSF 03.50D32: MOVWF 430D33: BCF 03.50D34: MOVF 77,W0D35: BSF 03.50D36: MOVWF 420D37: CLRF 490D38: MOVLW FF0D39: MOVWF 480D3A: MOVLW 7F0D3B: MOVWF 470D3C: MOVLW 8E0D3D: MOVWF 460D3E: BCF 0A.30D3F: BCF 03.50D40: CALL 0570D41: BSF 0A.30D42: BTFSC 27.70D43: BSF 0B.70D44: BSF 03.50D45: CLRF 2C0D46: CLRF 2B0D47: MOVLW 7A0D48: MOVWF 2A0D49: MOVLW 850D4A: MOVWF 290D4B: MOVF 7A,W0D4C: MOVWF 300D4D: MOVF 79,W0D4E: MOVWF 2F0D4F: MOVF 78,W0D50: MOVWF 2E0D51: MOVF 77,W0D52: MOVWF 2D0D53: BCF 0A.30D54: BCF 03.50D55: CALL 76E0D56: BSF 0A.30D57: BCF 03.10D58: BSF 03.50D59: CLRF 2C0D5A: CLRF 2B0D5B: MOVLW C00D5C: MOVWF 2A0D5D: MOVLW 810D5E: MOVWF 290D5F: MOVF 7A,W0D60: MOVWF 300D61: MOVF 79,W0D62: MOVWF 2F0D63: MOVF 78,W0D64: MOVWF 2E0D65: MOVF 77,W0D66: MOVWF 2D0D67: BCF 03.50D68: CALL 000.................... }0D69: BSF 0A.30D6A: BSF 0A.40D6B: GOTO 106 (RETURN).................................................................................................... #include "MPL3115.h".................... #define MPL3115_ADDR_R 0xC1 //addresa pro cteni.................... #define MPL3115_ADDR_W 0xC0........................................ #include "MPL3115.c".................... void mpl3115_setA (void) //nastavení pro výku.................... {............................................................ i2c_start(); //STANDBY mode*0A20: BSF 28.40A21: MOVF 28,W0A22: BSF 03.50A23: MOVWF 070A24: NOP0A25: BCF 03.50A26: BSF 28.30A27: MOVF 28,W0A28: BSF 03.50A29: MOVWF 070A2A: NOP0A2B: BCF 03.50A2C: BCF 07.40A2D: BCF 28.40A2E: MOVF 28,W0A2F: BSF 03.50A30: MOVWF 070A31: NOP0A32: BCF 03.50A33: BCF 07.30A34: BCF 28.30A35: MOVF 28,W0A36: BSF 03.50A37: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0A38: MOVLW C00A39: MOVWF 730A3A: BCF 0A.30A3B: BCF 03.50A3C: CALL 22E0A3D: BSF 0A.3.................... I2C_write(0x26);0A3E: MOVLW 260A3F: MOVWF 730A40: BCF 0A.30A41: CALL 22E0A42: BSF 0A.3.................... I2C_write(0xB8);0A43: MOVLW B80A44: MOVWF 730A45: BCF 0A.30A46: CALL 22E0A47: BSF 0A.3.................... i2c_stop();0A48: BCF 28.40A49: MOVF 28,W0A4A: BSF 03.50A4B: MOVWF 070A4C: NOP0A4D: BCF 03.50A4E: BSF 28.30A4F: MOVF 28,W0A50: BSF 03.50A51: MOVWF 070A52: BCF 03.50A53: BTFSS 07.30A54: GOTO 2530A55: NOP0A56: GOTO 2570A57: NOP0A58: BSF 28.40A59: MOVF 28,W0A5A: BSF 03.50A5B: MOVWF 070A5C: NOP........................................ i2c_start(); //PT_DATA_CFG set0A5D: BCF 03.50A5E: BSF 28.40A5F: MOVF 28,W0A60: BSF 03.50A61: MOVWF 070A62: NOP0A63: BCF 03.50A64: BSF 28.30A65: MOVF 28,W0A66: BSF 03.50A67: MOVWF 070A68: NOP0A69: BCF 03.50A6A: BCF 07.40A6B: BCF 28.40A6C: MOVF 28,W0A6D: BSF 03.50A6E: MOVWF 070A6F: NOP0A70: BCF 03.50A71: BCF 07.30A72: BCF 28.30A73: MOVF 28,W0A74: BSF 03.50A75: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0A76: MOVLW C00A77: MOVWF 730A78: BCF 0A.30A79: BCF 03.50A7A: CALL 22E0A7B: BSF 0A.3.................... I2C_write(0x13);0A7C: MOVLW 130A7D: MOVWF 730A7E: BCF 0A.30A7F: CALL 22E0A80: BSF 0A.3.................... I2C_write(0x07); //hodnota0A81: MOVLW 070A82: MOVWF 730A83: BCF 0A.30A84: CALL 22E0A85: BSF 0A.3.................... i2c_stop();0A86: BCF 28.40A87: MOVF 28,W0A88: BSF 03.50A89: MOVWF 070A8A: NOP0A8B: BCF 03.50A8C: BSF 28.30A8D: MOVF 28,W0A8E: BSF 03.50A8F: MOVWF 070A90: BCF 03.50A91: BTFSS 07.30A92: GOTO 2910A93: NOP0A94: GOTO 2950A95: NOP0A96: BSF 28.40A97: MOVF 28,W0A98: BSF 03.50A99: MOVWF 070A9A: NOP........................................ i2c_start(); //ACTIVE mode0A9B: BCF 03.50A9C: BSF 28.40A9D: MOVF 28,W0A9E: BSF 03.50A9F: MOVWF 070AA0: NOP0AA1: BCF 03.50AA2: BSF 28.30AA3: MOVF 28,W0AA4: BSF 03.50AA5: MOVWF 070AA6: NOP0AA7: BCF 03.50AA8: BCF 07.40AA9: BCF 28.40AAA: MOVF 28,W0AAB: BSF 03.50AAC: MOVWF 070AAD: NOP0AAE: BCF 03.50AAF: BCF 07.30AB0: BCF 28.30AB1: MOVF 28,W0AB2: BSF 03.50AB3: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0AB4: MOVLW C00AB5: MOVWF 730AB6: BCF 0A.30AB7: BCF 03.50AB8: CALL 22E0AB9: BSF 0A.3.................... I2C_write(0x26);0ABA: MOVLW 260ABB: MOVWF 730ABC: BCF 0A.30ABD: CALL 22E0ABE: BSF 0A.3.................... I2C_write(0xB9);0ABF: MOVLW B90AC0: MOVWF 730AC1: BCF 0A.30AC2: CALL 22E0AC3: BSF 0A.3.................... i2c_stop();0AC4: BCF 28.40AC5: MOVF 28,W0AC6: BSF 03.50AC7: MOVWF 070AC8: NOP0AC9: BCF 03.50ACA: BSF 28.30ACB: MOVF 28,W0ACC: BSF 03.50ACD: MOVWF 070ACE: BCF 03.50ACF: BTFSS 07.30AD0: GOTO 2CF0AD1: NOP0AD2: GOTO 2D30AD3: NOP0AD4: BSF 28.40AD5: MOVF 28,W0AD6: BSF 03.50AD7: MOVWF 070AD8: NOP.................... }0AD9: BCF 03.50ADA: BSF 0A.30ADB: BSF 0A.40ADC: GOTO 0E2 (RETURN)........................................ void mpl3115_setP (void) //nastavení pro tlak.................... {............................................................ i2c_start(); //STANDBY mode*05E6: BSF 28.405E7: MOVF 28,W05E8: BSF 03.505E9: MOVWF 0705EA: NOP05EB: BCF 03.505EC: BSF 28.305ED: MOVF 28,W05EE: BSF 03.505EF: MOVWF 0705F0: NOP05F1: BCF 03.505F2: BCF 07.405F3: BCF 28.405F4: MOVF 28,W05F5: BSF 03.505F6: MOVWF 0705F7: NOP05F8: BCF 03.505F9: BCF 07.305FA: BCF 28.305FB: MOVF 28,W05FC: BSF 03.505FD: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);05FE: MOVLW C005FF: MOVWF 730600: BCF 03.50601: CALL 22E.................... I2C_write(0x26);0602: MOVLW 260603: MOVWF 730604: CALL 22E.................... I2C_write(0xB8);0605: MOVLW B80606: MOVWF 730607: CALL 22E.................... i2c_stop();0608: BCF 28.40609: MOVF 28,W060A: BSF 03.5060B: MOVWF 07060C: NOP060D: BCF 03.5060E: BSF 28.3060F: MOVF 28,W0610: BSF 03.50611: MOVWF 070612: BCF 03.50613: BTFSS 07.30614: GOTO 6130615: NOP0616: GOTO 6170617: NOP0618: BSF 28.40619: MOVF 28,W061A: BSF 03.5061B: MOVWF 07061C: NOP........................................ i2c_start(); //PT_DATA_CFG set061D: BCF 03.5061E: BSF 28.4061F: MOVF 28,W0620: BSF 03.50621: MOVWF 070622: NOP0623: BCF 03.50624: BSF 28.30625: MOVF 28,W0626: BSF 03.50627: MOVWF 070628: NOP0629: BCF 03.5062A: BCF 07.4062B: BCF 28.4062C: MOVF 28,W062D: BSF 03.5062E: MOVWF 07062F: NOP0630: BCF 03.50631: BCF 07.30632: BCF 28.30633: MOVF 28,W0634: BSF 03.50635: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0636: MOVLW C00637: MOVWF 730638: BCF 03.50639: CALL 22E.................... I2C_write(0x13);063A: MOVLW 13063B: MOVWF 73063C: CALL 22E.................... I2C_write(0x07); //hodnota063D: MOVLW 07063E: MOVWF 73063F: CALL 22E.................... i2c_stop();0640: BCF 28.40641: MOVF 28,W0642: BSF 03.50643: MOVWF 070644: NOP0645: BCF 03.50646: BSF 28.30647: MOVF 28,W0648: BSF 03.50649: MOVWF 07064A: BCF 03.5064B: BTFSS 07.3064C: GOTO 64B064D: NOP064E: GOTO 64F064F: NOP0650: BSF 28.40651: MOVF 28,W0652: BSF 03.50653: MOVWF 070654: NOP........................................ i2c_start(); //ACTIVE mode0655: BCF 03.50656: BSF 28.40657: MOVF 28,W0658: BSF 03.50659: MOVWF 07065A: NOP065B: BCF 03.5065C: BSF 28.3065D: MOVF 28,W065E: BSF 03.5065F: MOVWF 070660: NOP0661: BCF 03.50662: BCF 07.40663: BCF 28.40664: MOVF 28,W0665: BSF 03.50666: MOVWF 070667: NOP0668: BCF 03.50669: BCF 07.3066A: BCF 28.3066B: MOVF 28,W066C: BSF 03.5066D: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);066E: MOVLW C0066F: MOVWF 730670: BCF 03.50671: CALL 22E.................... I2C_write(0x26);0672: MOVLW 260673: MOVWF 730674: CALL 22E.................... I2C_write(0x39);0675: MOVLW 390676: MOVWF 730677: CALL 22E.................... i2c_stop();0678: BCF 28.40679: MOVF 28,W067A: BSF 03.5067B: MOVWF 07067C: NOP067D: BCF 03.5067E: BSF 28.3067F: MOVF 28,W0680: BSF 03.50681: MOVWF 070682: BCF 03.50683: BTFSS 07.30684: GOTO 6830685: NOP0686: GOTO 6870687: NOP0688: BSF 28.40689: MOVF 28,W068A: BSF 03.5068B: MOVWF 07068C: NOP.................... }068D: BCF 03.5068E: BSF 0A.3068F: BSF 0A.40690: GOTO 0BB (RETURN)............................................................ byte mpl3115_read (byte reg).................... {.................... byte i;........................................ i2c_start();0691: BSF 28.40692: MOVF 28,W0693: BSF 03.50694: MOVWF 070695: NOP0696: BCF 03.50697: BSF 28.30698: MOVF 28,W0699: BSF 03.5069A: MOVWF 07069B: NOP069C: BCF 03.5069D: BCF 07.4069E: BCF 28.4069F: MOVF 28,W06A0: BSF 03.506A1: MOVWF 0706A2: NOP06A3: BCF 03.506A4: BCF 07.306A5: BCF 28.306A6: MOVF 28,W06A7: BSF 03.506A8: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);06A9: MOVLW C006AA: MOVWF 7306AB: BCF 03.506AC: CALL 22E.................... I2C_write(reg);06AD: MOVF 70,W06AE: MOVWF 7306AF: CALL 22E.................... i2c_start();06B0: BSF 28.406B1: MOVF 28,W06B2: BSF 03.506B3: MOVWF 0706B4: NOP06B5: BCF 03.506B6: BSF 28.306B7: MOVF 28,W06B8: BSF 03.506B9: MOVWF 0706BA: NOP06BB: BCF 03.506BC: BTFSS 07.306BD: GOTO 6BC06BE: BCF 07.406BF: BCF 28.406C0: MOVF 28,W06C1: BSF 03.506C2: MOVWF 0706C3: NOP06C4: BCF 03.506C5: BCF 07.306C6: BCF 28.306C7: MOVF 28,W06C8: BSF 03.506C9: MOVWF 07.................... I2C_Write(MPL3115_ADDR_R);06CA: MOVLW C106CB: MOVWF 7306CC: BCF 03.506CD: CALL 22E.................... i=i2c_read(0);06CE: CLRF 7706CF: CALL 2B006D0: MOVF 78,W06D1: MOVWF 71.................... i2c_stop();06D2: BCF 28.406D3: MOVF 28,W06D4: BSF 03.506D5: MOVWF 0706D6: NOP06D7: BCF 03.506D8: BSF 28.306D9: MOVF 28,W06DA: BSF 03.506DB: MOVWF 0706DC: BCF 03.506DD: BTFSS 07.306DE: GOTO 6DD06DF: NOP06E0: GOTO 6E106E1: NOP06E2: BSF 28.406E3: MOVF 28,W06E4: BSF 03.506E5: MOVWF 0706E6: NOP........................................ return i;06E7: MOVF 71,W06E8: MOVWF 78.................... }06E9: BCF 03.506EA: RETURN............................................................ float mpl3115_T (void) //teplota ve stupnich.................... {.................... int m;.................... float l, t;........................................ m= mpl3115_read (0x04);06EB: MOVLW 0406EC: MOVWF 7006ED: CALL 69106EE: MOVF 78,W06EF: MOVWF 60.................... l= (float)(mpl3115_read(0x05)>>4)/16.0;06F0: MOVLW 0506F1: MOVWF 7006F2: CALL 69106F3: SWAPF 78,W06F4: MOVWF 7706F5: MOVLW 0F06F6: ANDWF 77,F06F7: MOVF 77,W06F8: CLRF 2706F9: BTFSC 0B.706FA: BSF 27.706FB: BCF 0B.706FC: BSF 03.506FD: CLRF 4306FE: MOVWF 4206FF: BCF 03.50700: CALL 0380701: BTFSC 27.70702: BSF 0B.70703: MOVF 77,W0704: MOVWF 690705: MOVF 78,W0706: MOVWF 6A0707: MOVF 79,W0708: MOVWF 6B0709: MOVF 7A,W070A: MOVWF 6C070B: CLRF 27070C: BTFSC 0B.7070D: BSF 27.7070E: BCF 0B.7070F: MOVF 6C,W0710: BSF 03.50711: MOVWF 450712: BCF 03.50713: MOVF 6B,W0714: BSF 03.50715: MOVWF 440716: BCF 03.50717: MOVF 6A,W0718: BSF 03.50719: MOVWF 43071A: BCF 03.5071B: MOVF 69,W071C: BSF 03.5071D: MOVWF 42071E: CLRF 49071F: CLRF 480720: CLRF 470721: MOVLW 830722: MOVWF 460723: BCF 03.50724: CALL 0570725: BTFSC 27.70726: BSF 0B.70727: MOVF 7A,W0728: MOVWF 640729: MOVF 79,W072A: MOVWF 63072B: MOVF 78,W072C: MOVWF 62072D: MOVF 77,W072E: MOVWF 61072F: CLRF 270730: BTFSC 0B.70731: BSF 27.70732: BCF 0B.7.................... t = (float)(M + L);0733: BSF 03.50734: CLRF 430735: BCF 03.50736: MOVF 60,W0737: BSF 03.50738: MOVWF 420739: BCF 03.5073A: CALL 038073B: BTFSC 27.7073C: BSF 0B.7073D: BCF 03.1073E: MOVF 7A,W073F: BSF 03.50740: MOVWF 2C0741: MOVF 79,W0742: MOVWF 2B0743: MOVF 78,W0744: MOVWF 2A0745: MOVF 77,W0746: MOVWF 290747: BCF 03.50748: MOVF 64,W0749: BSF 03.5074A: MOVWF 30074B: BCF 03.5074C: MOVF 63,W074D: BSF 03.5074E: MOVWF 2F074F: BCF 03.50750: MOVF 62,W0751: BSF 03.50752: MOVWF 2E0753: BCF 03.50754: MOVF 61,W0755: BSF 03.50756: MOVWF 2D0757: BSF 0A.30758: BCF 03.50759: CALL 000075A: BCF 0A.3075B: MOVF 7A,W075C: MOVWF 68075D: MOVF 79,W075E: MOVWF 67075F: MOVF 78,W0760: MOVWF 660761: MOVF 77,W0762: MOVWF 65.................... return t;0763: MOVF 65,W0764: MOVWF 770765: MOVF 66,W0766: MOVWF 780767: MOVF 67,W0768: MOVWF 790769: MOVF 68,W076A: MOVWF 7A.................... }076B: BSF 0A.3076C: BSF 0A.4076D: GOTO 0CB (RETURN)........................................ float mpl3115_A (void) //vyska v m.................... {........................................ int16 m;.................... unsigned int8 c;.................... float l, a;........................................ m= mpl3115_read (0x01);*0ADD: MOVLW 010ADE: MOVWF 700ADF: BCF 0A.30AE0: CALL 6910AE1: BSF 0A.30AE2: CLRF 610AE3: MOVF 78,W0AE4: MOVWF 60.................... c= mpl3115_read (0x02);0AE5: MOVLW 020AE6: MOVWF 700AE7: BCF 0A.30AE8: CALL 6910AE9: BSF 0A.30AEA: MOVF 78,W0AEB: MOVWF 62.................... l= (float)(mpl3115_read(0x03)>>4)/16.0;0AEC: MOVLW 030AED: MOVWF 700AEE: BCF 0A.30AEF: CALL 6910AF0: BSF 0A.30AF1: SWAPF 78,W0AF2: MOVWF 770AF3: MOVLW 0F0AF4: ANDWF 77,F0AF5: MOVF 77,W0AF6: CLRF 270AF7: BTFSC 0B.70AF8: BSF 27.70AF9: BCF 0B.70AFA: BSF 03.50AFB: CLRF 430AFC: MOVWF 420AFD: BCF 0A.30AFE: BCF 03.50AFF: CALL 0380B00: BSF 0A.30B01: BTFSC 27.70B02: BSF 0B.70B03: MOVF 77,W0B04: MOVWF 6B0B05: MOVF 78,W0B06: MOVWF 6C0B07: MOVF 79,W0B08: MOVWF 6D0B09: MOVF 7A,W0B0A: MOVWF 6E0B0B: CLRF 270B0C: BTFSC 0B.70B0D: BSF 27.70B0E: BCF 0B.70B0F: MOVF 7A,W0B10: BSF 03.50B11: MOVWF 450B12: BCF 03.50B13: MOVF 79,W0B14: BSF 03.50B15: MOVWF 440B16: BCF 03.50B17: MOVF 78,W0B18: BSF 03.50B19: MOVWF 430B1A: BCF 03.50B1B: MOVF 77,W0B1C: BSF 03.50B1D: MOVWF 420B1E: CLRF 490B1F: CLRF 480B20: CLRF 470B21: MOVLW 830B22: MOVWF 460B23: BCF 0A.30B24: BCF 03.50B25: CALL 0570B26: BSF 0A.30B27: BTFSC 27.70B28: BSF 0B.70B29: MOVF 7A,W0B2A: MOVWF 660B2B: MOVF 79,W0B2C: MOVWF 650B2D: MOVF 78,W0B2E: MOVWF 640B2F: MOVF 77,W0B30: MOVWF 63.................... a = (float)((m << 8)|c) + l;0B31: MOVF 60,W0B32: MOVWF 6D0B33: CLRF 6C0B34: MOVF 6C,W0B35: IORWF 62,W0B36: MOVWF 770B37: MOVF 60,W0B38: MOVWF 7A0B39: MOVF 77,W0B3A: CLRF 270B3B: BTFSC 0B.70B3C: BSF 27.70B3D: BCF 0B.70B3E: BSF 03.50B3F: MOVWF 420B40: MOVF 7A,W0B41: MOVWF 430B42: BCF 0A.30B43: BCF 03.50B44: CALL 0380B45: BSF 0A.30B46: BTFSC 27.70B47: BSF 0B.70B48: MOVF 77,W0B49: MOVWF 6C0B4A: MOVF 78,W0B4B: MOVWF 6D0B4C: MOVF 79,W0B4D: MOVWF 6E0B4E: MOVF 7A,W0B4F: MOVWF 6F0B50: BCF 03.10B51: MOVF 7A,W0B52: BSF 03.50B53: MOVWF 2C0B54: BCF 03.50B55: MOVF 79,W0B56: BSF 03.50B57: MOVWF 2B0B58: BCF 03.50B59: MOVF 78,W0B5A: BSF 03.50B5B: MOVWF 2A0B5C: BCF 03.50B5D: MOVF 77,W0B5E: BSF 03.50B5F: MOVWF 290B60: BCF 03.50B61: MOVF 66,W0B62: BSF 03.50B63: MOVWF 300B64: BCF 03.50B65: MOVF 65,W0B66: BSF 03.50B67: MOVWF 2F0B68: BCF 03.50B69: MOVF 64,W0B6A: BSF 03.50B6B: MOVWF 2E0B6C: BCF 03.50B6D: MOVF 63,W0B6E: BSF 03.50B6F: MOVWF 2D0B70: BCF 03.50B71: CALL 0000B72: MOVF 7A,W0B73: MOVWF 6A0B74: MOVF 79,W0B75: MOVWF 690B76: MOVF 78,W0B77: MOVWF 680B78: MOVF 77,W0B79: MOVWF 67.................... return a;0B7A: MOVF 67,W0B7B: MOVWF 770B7C: MOVF 68,W0B7D: MOVWF 780B7E: MOVF 69,W0B7F: MOVWF 790B80: MOVF 6A,W0B81: MOVWF 7A.................... }0B82: BSF 0A.30B83: BSF 0A.40B84: GOTO 0F0 (RETURN)............................................................ float mpl3115_P (void) //tlak v Pa.................... {.................... unsigned int32 m;.................... unsigned int16 c;.................... unsigned int8 l,l2;.................... float p, l1;........................................ m= mpl3115_read (0x01);*0946: MOVLW 010947: MOVWF 700948: BCF 0A.30949: CALL 691094A: BSF 0A.3094B: CLRF 63094C: CLRF 62094D: CLRF 61094E: MOVF 78,W094F: MOVWF 60.................... c= mpl3115_read (0x02);0950: MOVLW 020951: MOVWF 700952: BCF 0A.30953: CALL 6910954: BSF 0A.30955: CLRF 650956: MOVF 78,W0957: MOVWF 64.................... l=mpl3115_read(0x03);0958: MOVLW 030959: MOVWF 70095A: BCF 0A.3095B: CALL 691095C: BSF 0A.3095D: MOVF 78,W095E: MOVWF 66.................... l2=l<<2;095F: RLF 66,W0960: MOVWF 670961: RLF 67,F0962: MOVLW FC0963: ANDWF 67,F.................... l1= (float)(l>>6)/4.0;0964: SWAPF 66,W0965: MOVWF 770966: RRF 77,F0967: RRF 77,F0968: MOVLW 030969: ANDWF 77,F096A: MOVF 77,W096B: CLRF 27096C: BTFSC 0B.7096D: BSF 27.7096E: BCF 0B.7096F: BSF 03.50970: CLRF 430971: MOVWF 420972: BCF 0A.30973: BCF 03.50974: CALL 0380975: BSF 0A.30976: BTFSC 27.70977: BSF 0B.70978: MOVF 77,W0979: MOVWF 71097A: MOVF 78,W097B: MOVWF 72097C: MOVF 79,W097D: MOVWF 73097E: MOVF 7A,W097F: MOVWF 740980: CLRF 270981: BTFSC 0B.70982: BSF 27.70983: BCF 0B.70984: MOVF 74,W0985: BSF 03.50986: MOVWF 450987: MOVF 73,W0988: MOVWF 440989: MOVF 72,W098A: MOVWF 43098B: MOVF 71,W098C: MOVWF 42098D: CLRF 49098E: CLRF 48098F: CLRF 470990: MOVLW 810991: MOVWF 460992: BCF 0A.30993: BCF 03.50994: CALL 0570995: BSF 0A.30996: BTFSC 27.70997: BSF 0B.70998: MOVF 7A,W0999: MOVWF 6F099A: MOVF 79,W099B: MOVWF 6E099C: MOVF 78,W099D: MOVWF 6D099E: MOVF 77,W099F: MOVWF 6C.................... p = (float)((m << 10)|(c<<2)|(l>>6)) + l1;09A0: CLRF 7109A1: RLF 60,W09A2: MOVWF 7209A3: RLF 61,W09A4: MOVWF 7309A5: RLF 62,W09A6: MOVWF 7409A7: RLF 72,F09A8: RLF 73,F09A9: RLF 74,F09AA: MOVLW FC09AB: ANDWF 72,F09AC: RLF 64,W09AD: MOVWF 7909AE: RLF 65,W09AF: MOVWF 7A09B0: RLF 79,F09B1: RLF 7A,F09B2: MOVLW FC09B3: ANDWF 79,F09B4: MOVF 79,W09B5: IORWF 71,F09B6: MOVF 7A,W09B7: IORWF 72,F09B8: SWAPF 66,W09B9: MOVWF 7709BA: RRF 77,F09BB: RRF 77,F09BC: MOVLW 0309BD: ANDWF 77,F09BE: MOVF 77,W09BF: IORWF 71,W09C0: MOVWF 7709C1: MOVF 72,W09C2: MOVWF 7809C3: MOVF 73,W09C4: MOVWF 7909C5: MOVF 74,W09C6: MOVWF 7A09C7: MOVF 7A,W09C8: MOVWF 7E09C9: MOVF 79,W09CA: MOVWF 7D09CB: MOVF 78,W09CC: MOVWF 7C09CD: MOVF 77,W09CE: MOVWF 7B*09E9: MOVF 77,W09EA: MOVWF 7109EB: MOVF 78,W09EC: MOVWF 7209ED: MOVF 79,W09EE: MOVWF 7309EF: MOVF 7A,W09F0: MOVWF 7409F1: BCF 03.109F2: MOVF 74,W09F3: BSF 03.509F4: MOVWF 2C09F5: MOVF 73,W09F6: MOVWF 2B09F7: MOVF 72,W09F8: MOVWF 2A09F9: MOVF 71,W09FA: MOVWF 2909FB: BCF 03.509FC: MOVF 6F,W09FD: BSF 03.509FE: MOVWF 3009FF: BCF 03.50A00: MOVF 6E,W0A01: BSF 03.50A02: MOVWF 2F0A03: BCF 03.50A04: MOVF 6D,W0A05: BSF 03.50A06: MOVWF 2E0A07: BCF 03.50A08: MOVF 6C,W0A09: BSF 03.50A0A: MOVWF 2D0A0B: BCF 03.50A0C: CALL 0000A0D: MOVF 7A,W0A0E: MOVWF 6B0A0F: MOVF 79,W0A10: MOVWF 6A0A11: MOVF 78,W0A12: MOVWF 690A13: MOVF 77,W0A14: MOVWF 68........................................ return p;0A15: MOVF 68,W0A16: MOVWF 770A17: MOVF 69,W0A18: MOVWF 780A19: MOVF 6A,W0A1A: MOVWF 790A1B: MOVF 6B,W0A1C: MOVWF 7A.................... }0A1D: BSF 0A.30A1E: BSF 0A.40A1F: GOTO 0D7 (RETURN)................................................................................ #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*0534: BSF 28.40535: MOVF 28,W0536: BSF 03.50537: MOVWF 070538: NOP0539: BCF 03.5053A: BSF 28.3053B: MOVF 28,W053C: BSF 03.5053D: MOVWF 07053E: NOP053F: BCF 03.50540: BCF 07.40541: BCF 28.40542: MOVF 28,W0543: BSF 03.50544: MOVWF 070545: NOP0546: BCF 03.50547: BCF 07.30548: BCF 28.30549: MOVF 28,W054A: BSF 03.5054B: MOVWF 07.................... I2C_Write(MAG_ADDR_W);054C: MOVLW 3C054D: MOVWF 73054E: BCF 03.5054F: CALL 22E.................... I2C_Write(0x00);0550: CLRF 730551: CALL 22E.................... I2C_Write(0x70);0552: MOVLW 700553: MOVWF 730554: CALL 22E.................... i2c_stop();0555: BCF 28.40556: MOVF 28,W0557: BSF 03.50558: MOVWF 070559: NOP055A: BCF 03.5055B: BSF 28.3055C: MOVF 28,W055D: BSF 03.5055E: MOVWF 07055F: BCF 03.50560: BTFSS 07.30561: GOTO 5600562: NOP0563: GOTO 5640564: NOP0565: BSF 28.40566: MOVF 28,W0567: BSF 03.50568: MOVWF 070569: NOP.................... Delay_ms(6);056A: MOVLW 06056B: BCF 03.5056C: MOVWF 65056D: CALL 2F5........................................ i2c_start(); //nastavení Configuration Register B056E: BSF 28.4056F: MOVF 28,W0570: BSF 03.50571: MOVWF 070572: NOP0573: BCF 03.50574: BSF 28.30575: MOVF 28,W0576: BSF 03.50577: MOVWF 070578: NOP0579: BCF 03.5057A: BCF 07.4057B: BCF 28.4057C: MOVF 28,W057D: BSF 03.5057E: MOVWF 07057F: NOP0580: BCF 03.50581: BCF 07.30582: BCF 28.30583: MOVF 28,W0584: BSF 03.50585: MOVWF 07.................... I2C_Write(MAG_ADDR_W);0586: MOVLW 3C0587: MOVWF 730588: BCF 03.50589: CALL 22E.................... I2C_Write(0x01);058A: MOVLW 01058B: MOVWF 73058C: CALL 22E.................... I2C_Write(MAG_ROZ810);058D: MOVLW E0058E: MOVWF 73058F: CALL 22E.................... i2c_stop();0590: BCF 28.40591: MOVF 28,W0592: BSF 03.50593: MOVWF 070594: NOP0595: BCF 03.50596: BSF 28.30597: MOVF 28,W0598: BSF 03.50599: MOVWF 07059A: BCF 03.5059B: BTFSS 07.3059C: GOTO 59B059D: NOP059E: GOTO 59F059F: NOP05A0: BSF 28.405A1: MOVF 28,W05A2: BSF 03.505A3: MOVWF 0705A4: NOP........................................ Delay_ms(6);05A5: MOVLW 0605A6: BCF 03.505A7: MOVWF 6505A8: CALL 2F5........................................ i2c_start(); //nastveni Mode Register05A9: BSF 28.405AA: MOVF 28,W05AB: BSF 03.505AC: MOVWF 0705AD: NOP05AE: BCF 03.505AF: BSF 28.305B0: MOVF 28,W05B1: BSF 03.505B2: MOVWF 0705B3: NOP05B4: BCF 03.505B5: BCF 07.405B6: BCF 28.405B7: MOVF 28,W05B8: BSF 03.505B9: MOVWF 0705BA: NOP05BB: BCF 03.505BC: BCF 07.305BD: BCF 28.305BE: MOVF 28,W05BF: BSF 03.505C0: MOVWF 07.................... I2C_Write(MAG_ADDR_W);05C1: MOVLW 3C05C2: MOVWF 7305C3: BCF 03.505C4: CALL 22E.................... I2C_Write(0x02);05C5: MOVLW 0205C6: MOVWF 7305C7: CALL 22E.................... I2C_Write(0x00);05C8: CLRF 7305C9: CALL 22E.................... i2c_stop();05CA: BCF 28.405CB: MOVF 28,W05CC: BSF 03.505CD: MOVWF 0705CE: NOP05CF: BCF 03.505D0: BSF 28.305D1: MOVF 28,W05D2: BSF 03.505D3: MOVWF 0705D4: BCF 03.505D5: BTFSS 07.305D6: GOTO 5D505D7: NOP05D8: GOTO 5D905D9: NOP05DA: BSF 28.405DB: MOVF 28,W05DC: BSF 03.505DD: MOVWF 0705DE: NOP.................... Delay_ms(6);05DF: MOVLW 0605E0: BCF 03.505E1: MOVWF 6505E2: CALL 2F5.................... }05E3: BSF 0A.305E4: BSF 0A.405E5: GOTO 0AB (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();*0D6C: BSF 28.40D6D: MOVF 28,W0D6E: BSF 03.50D6F: MOVWF 070D70: NOP0D71: BCF 03.50D72: BSF 28.30D73: MOVF 28,W0D74: BSF 03.50D75: MOVWF 070D76: NOP0D77: BCF 03.50D78: BCF 07.40D79: BCF 28.40D7A: MOVF 28,W0D7B: BSF 03.50D7C: MOVWF 070D7D: NOP0D7E: BCF 03.50D7F: BCF 07.30D80: BCF 28.30D81: MOVF 28,W0D82: BSF 03.50D83: MOVWF 07.................... I2C_Write(MAG_ADDR_W);0D84: MOVLW 3C0D85: MOVWF 730D86: BCF 0A.30D87: BCF 03.50D88: CALL 22E0D89: BSF 0A.3.................... I2C_write(reg);0D8A: MOVF 72,W0D8B: MOVWF 730D8C: BCF 0A.30D8D: CALL 22E0D8E: BSF 0A.3.................... i2c_stop();0D8F: BCF 28.40D90: MOVF 28,W0D91: BSF 03.50D92: MOVWF 070D93: NOP0D94: BCF 03.50D95: BSF 28.30D96: MOVF 28,W0D97: BSF 03.50D98: MOVWF 070D99: BCF 03.50D9A: BTFSS 07.30D9B: GOTO 59A0D9C: NOP0D9D: GOTO 59E0D9E: NOP0D9F: BSF 28.40DA0: MOVF 28,W0DA1: BSF 03.50DA2: MOVWF 070DA3: NOP.................... i2c_start();0DA4: BCF 03.50DA5: BSF 28.40DA6: MOVF 28,W0DA7: BSF 03.50DA8: MOVWF 070DA9: NOP0DAA: BCF 03.50DAB: BSF 28.30DAC: MOVF 28,W0DAD: BSF 03.50DAE: MOVWF 070DAF: NOP0DB0: BCF 03.50DB1: BCF 07.40DB2: BCF 28.40DB3: MOVF 28,W0DB4: BSF 03.50DB5: MOVWF 070DB6: NOP0DB7: BCF 03.50DB8: BCF 07.30DB9: BCF 28.30DBA: MOVF 28,W0DBB: BSF 03.50DBC: MOVWF 07.................... I2C_Write(MAG_ADDR_R);0DBD: MOVLW 3D0DBE: MOVWF 730DBF: BCF 0A.30DC0: BCF 03.50DC1: CALL 22E0DC2: BSF 0A.3.................... reg=i2c_read(0);0DC3: CLRF 770DC4: BCF 0A.30DC5: CALL 2B00DC6: BSF 0A.30DC7: MOVF 78,W0DC8: MOVWF 72.................... return reg;0DC9: MOVF 72,W0DCA: MOVWF 78.................... }0DCB: RETURN............................................................ signed int16 mag_vypocet(unsigned int8 h, unsigned int8 l) //prepocet na 16bit cislo.................... {.................... signed int16 x;.................... x = (((unsigned int16) h << 8) + l );*07E5: CLRF 7C07E6: MOVF 72,W07E7: MOVWF 7B07E8: MOVWF 7C07E9: CLRF 7B07EA: MOVF 73,W07EB: ADDWF 7B,W07EC: MOVWF 7407ED: MOVF 7C,W07EE: MOVWF 7507EF: BTFSC 03.007F0: INCF 75,F.................... return x;07F1: MOVF 74,W07F2: MOVWF 7807F3: MOVF 75,W07F4: MOVWF 79.................... }07F5: RETURN............................................................ signed int16 mag_readX(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x03);*1000: MOVLW 031001: MOVWF 721002: BCF 0A.41003: BSF 0A.31004: CALL 56C1005: BSF 0A.41006: BCF 0A.31007: MOVF 78,W1008: MOVWF 6E.................... l=mag_read(0x04);1009: MOVLW 04100A: MOVWF 72100B: BCF 0A.4100C: BSF 0A.3100D: CALL 56C100E: BSF 0A.4100F: BCF 0A.31010: MOVF 78,W1011: MOVWF 6F.................... x=mag_vypocet(h,l);1012: MOVF 6E,W1013: MOVWF 721014: MOVF 6F,W1015: MOVWF 731016: BCF 0A.41017: CALL 7E51018: BSF 0A.41019: MOVF 79,W101A: MOVWF 71101B: MOVF 78,W101C: MOVWF 70.................... return x;101D: MOVF 70,W101E: MOVWF 78101F: MOVF 71,W1020: MOVWF 79........................................ }............................................................ signed int16 mag_readY(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x07);*1025: MOVLW 071026: MOVWF 721027: BCF 0A.41028: BSF 0A.31029: CALL 56C102A: BSF 0A.4102B: BCF 0A.3102C: MOVF 78,W102D: MOVWF 6E.................... l=mag_read(0x08);102E: MOVLW 08102F: MOVWF 721030: BCF 0A.41031: BSF 0A.31032: CALL 56C1033: BSF 0A.41034: BCF 0A.31035: MOVF 78,W1036: MOVWF 6F.................... x=mag_vypocet(h,l);1037: MOVF 6E,W1038: MOVWF 721039: MOVF 6F,W103A: MOVWF 73103B: BCF 0A.4103C: CALL 7E5103D: BSF 0A.4103E: MOVF 79,W103F: MOVWF 711040: MOVF 78,W1041: MOVWF 70.................... return x;1042: MOVF 70,W1043: MOVWF 781044: MOVF 71,W1045: MOVWF 79........................................ }............................................................ signed int16 mag_readZ(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x05);*104A: MOVLW 05104B: MOVWF 72104C: BCF 0A.4104D: BSF 0A.3104E: CALL 56C104F: BSF 0A.41050: BCF 0A.31051: MOVF 78,W1052: MOVWF 6E.................... l=mag_read(0x06);1053: MOVLW 061054: MOVWF 721055: BCF 0A.41056: BSF 0A.31057: CALL 56C1058: BSF 0A.41059: BCF 0A.3105A: MOVF 78,W105B: MOVWF 6F.................... x=mag_vypocet(h,l);105C: MOVF 6E,W105D: MOVWF 72105E: MOVF 6F,W105F: MOVWF 731060: BCF 0A.41061: CALL 7E51062: BSF 0A.41063: MOVF 79,W1064: MOVWF 711065: MOVF 78,W1066: MOVWF 70.................... return x;1067: MOVF 70,W1068: MOVWF 781069: MOVF 71,W106A: MOVWF 79........................................ }............................................................................................................................................ #define SEND_DELAY 50 // Cas mezi dvema znaky na RS232........................................ char VER[4]=VERSION;*1827: MOVLW 301828: MOVWF 2B1829: MOVLW 2E182A: MOVWF 2C182B: MOVLW 31182C: MOVWF 2D182D: CLRF 2E........................................ unsigned int16 timer0_overflow_count;.................... float anemo=0;................................................................................ #int_TIMER1.................... void TIMER1_isr(void).................... {.................... // 32.768 kHz krystal pro timer1 oscilátor.................... anemo = ((timer0_overflow_count * 0xFF) + get_timer0())/(32768.0/0xFFFF); // pocet pulzu za 1s*0123: MOVF 30,W0124: BSF 03.50125: MOVWF 410126: BCF 03.50127: MOVF 2F,W0128: BSF 03.50129: MOVWF 40012A: CLRF 43012B: MOVLW FF012C: MOVWF 42*0141: MOVF 79,W0142: MOVWF 410143: MOVF 78,W0144: MOVWF 400145: BCF 03.50146: MOVF 01,W0147: BSF 03.50148: ADDWF 40,F0149: BTFSC 03.0014A: INCF 41,F014B: MOVF 41,W014C: MOVWF 43014D: MOVF 40,W014E: MOVWF 42014F: BCF 03.50150: CALL 0380151: MOVF 7A,W0152: BSF 03.50153: MOVWF 450154: MOVF 79,W0155: MOVWF 440156: MOVF 78,W0157: MOVWF 430158: MOVF 77,W0159: MOVWF 42015A: MOVLW 80015B: MOVWF 49015C: CLRF 48015D: CLRF 47015E: MOVLW 7E015F: MOVWF 460160: BCF 03.50161: CALL 0570162: MOVF 7A,W0163: MOVWF 340164: MOVF 79,W0165: MOVWF 330166: MOVF 78,W0167: MOVWF 320168: MOVF 77,W0169: MOVWF 31.................... anemo = anemo / 2; //pocet otacek za sekundu016A: MOVF 34,W016B: BSF 03.5016C: MOVWF 45016D: BCF 03.5016E: MOVF 33,W016F: BSF 03.50170: MOVWF 440171: BCF 03.50172: MOVF 32,W0173: BSF 03.50174: MOVWF 430175: BCF 03.50176: MOVF 31,W0177: BSF 03.50178: MOVWF 420179: CLRF 49017A: CLRF 48017B: CLRF 47017C: MOVLW 80017D: MOVWF 46017E: BCF 03.5017F: CALL 0570180: MOVF 7A,W0181: MOVWF 340182: MOVF 79,W0183: MOVWF 330184: MOVF 78,W0185: MOVWF 320186: MOVF 77,W0187: MOVWF 31........................................ timer0_overflow_count=0; //nulovani0188: CLRF 300189: CLRF 2F.................... set_timer0(0);018A: CLRF 01.................... set_timer1(0);018B: CLRF 0F018C: CLRF 0E........................................ }....................018D: BCF 0C.0018E: BCF 0A.3018F: BCF 0A.40190: GOTO 021.................... #int_TIMER0 //pro preteceni èítaèe pùlzù od anemometru (RA4).................... void TIMER0_isr(void).................... {.................... timer0_overflow_count++;0191: INCF 2F,F0192: BTFSC 03.20193: INCF 30,F.................... }........................................0194: BCF 0B.20195: BCF 0A.30196: BCF 0A.40197: GOTO 021.................... float azimut (void) //vypocet azimutu smeru vetru.................... {.................... signed int16 X,Y,Z;.................... X= mag_readX();*1021: MOVF 79,W1022: MOVWF 611023: MOVF 78,W1024: MOVWF 60.................... Y= mag_readY();*1046: MOVF 79,W1047: MOVWF 631048: MOVF 78,W1049: MOVWF 62.................... Z= mag_readZ();*106B: MOVF 79,W106C: MOVWF 65106D: MOVF 78,W106E: MOVWF 64........................................ float a, b;.................... a=(float)Y/X;106F: MOVF 63,W1070: MOVWF 731071: MOVF 62,W1072: MOVWF 721073: BCF 0A.41074: BSF 0A.31075: CALL 5CC1076: BSF 0A.41077: BCF 0A.31078: MOVF 77,W1079: MOVWF 6E107A: MOVF 78,W107B: MOVWF 6F107C: MOVF 79,W107D: MOVWF 70107E: MOVF 7A,W107F: MOVWF 711080: MOVF 61,W1081: MOVWF 731082: MOVF 60,W1083: MOVWF 721084: BCF 0A.41085: BSF 0A.31086: CALL 5CC1087: BSF 0A.41088: BCF 0A.31089: CLRF 27108A: BTFSC 0B.7108B: BSF 27.7108C: BCF 0B.7108D: MOVF 71,W108E: BSF 03.5108F: MOVWF 451090: MOVF 70,W1091: MOVWF 441092: BCF 03.51093: MOVF 6F,W1094: BSF 03.51095: MOVWF 431096: BCF 03.51097: MOVF 6E,W1098: BSF 03.51099: MOVWF 42109A: MOVF 7A,W109B: MOVWF 49109C: MOVF 79,W109D: MOVWF 48109E: MOVF 78,W109F: MOVWF 4710A0: MOVF 77,W10A1: MOVWF 4610A2: BCF 0A.410A3: BCF 03.510A4: CALL 05710A5: BSF 0A.410A6: BTFSC 27.710A7: BSF 0B.710A8: MOVF 7A,W10A9: MOVWF 6910AA: MOVF 79,W10AB: MOVWF 6810AC: MOVF 78,W10AD: MOVWF 6710AE: MOVF 77,W10AF: MOVWF 66.................... b=atan(a);10B0: MOVF 69,W10B1: MOVWF 7110B2: MOVF 68,W10B3: MOVWF 7010B4: MOVF 67,W10B5: MOVWF 6F10B6: MOVF 66,W10B7: MOVWF 6E*139A: MOVF 7A,W139B: MOVWF 6D139C: MOVF 79,W139D: MOVWF 6C139E: MOVF 78,W139F: MOVWF 6B13A0: MOVF 77,W13A1: MOVWF 6A13A2: CLRF 2713A3: BTFSC 0B.713A4: BSF 27.713A5: BCF 0B.7.................... b = (b/3.14)*180;13A6: MOVF 6D,W13A7: BSF 03.513A8: MOVWF 4513A9: BCF 03.513AA: MOVF 6C,W13AB: BSF 03.513AC: MOVWF 4413AD: BCF 03.513AE: MOVF 6B,W13AF: BSF 03.513B0: MOVWF 4313B1: BCF 03.513B2: MOVF 6A,W13B3: BSF 03.513B4: MOVWF 4213B5: MOVLW C313B6: MOVWF 4913B7: MOVLW F513B8: MOVWF 4813B9: MOVLW 4813BA: MOVWF 4713BB: MOVLW 8013BC: MOVWF 4613BD: BCF 0A.413BE: BCF 03.513BF: CALL 05713C0: BSF 0A.413C1: BTFSC 27.713C2: BSF 0B.713C3: MOVF 77,W13C4: MOVWF 6E13C5: MOVF 78,W13C6: MOVWF 6F13C7: MOVF 79,W13C8: MOVWF 7013C9: MOVF 7A,W13CA: MOVWF 7113CB: BSF 03.513CC: MOVWF 2C13CD: MOVF 70,W13CE: MOVWF 2B13CF: BCF 03.513D0: MOVF 6F,W13D1: BSF 03.513D2: MOVWF 2A13D3: BCF 03.513D4: MOVF 6E,W13D5: BSF 03.513D6: MOVWF 2913D7: CLRF 3013D8: CLRF 2F13D9: MOVLW 3413DA: MOVWF 2E13DB: MOVLW 8613DC: MOVWF 2D13DD: BCF 0A.413DE: BCF 03.513DF: CALL 76E13E0: BSF 0A.413E1: MOVF 7A,W13E2: MOVWF 6D13E3: MOVF 79,W13E4: MOVWF 6C13E5: MOVF 78,W13E6: MOVWF 6B13E7: MOVF 77,W13E8: MOVWF 6A.................... b=abs(b);13E9: MOVF 6A,W13EA: MOVWF 7713EB: MOVF 6B,W13EC: MOVWF 7813ED: MOVF 6C,W13EE: MOVWF 7913EF: MOVF 6D,W13F0: MOVWF 7A13F1: BCF 78.713F2: MOVF 6D,W13F3: MOVWF 6D13F4: MOVF 6C,W13F5: MOVWF 6C13F6: MOVF 78,W13F7: MOVWF 6B13F8: MOVF 6A,W13F9: MOVWF 6A........................................ if(X==0) //osetreni proti deleni 013FA: MOVF 60,F13FB: BTFSS 03.213FC: GOTO 41713FD: MOVF 61,F13FE: BTFSS 03.213FF: GOTO 417.................... {.................... if(Y>0)1400: BTFSC 63.71401: GOTO 4101402: MOVF 63,F1403: BTFSS 03.21404: GOTO 4091405: MOVF 62,W1406: SUBLW 001407: BTFSC 03.01408: GOTO 410.................... {.................... b=90;1409: CLRF 6D140A: CLRF 6C140B: MOVLW 34140C: MOVWF 6B140D: MOVLW 85140E: MOVWF 6A.................... }.................... else140F: GOTO 416.................... {.................... b=270;1410: CLRF 6D1411: CLRF 6C1412: MOVLW 071413: MOVWF 6B1414: MOVLW 871415: MOVWF 6A.................... }.................... }.................... else1416: GOTO 499.................... {.................... if(X>0)1417: BTFSC 61.71418: GOTO 4701419: MOVF 61,F141A: BTFSS 03.2141B: GOTO 420141C: MOVF 60,W141D: SUBLW 00141E: BTFSC 03.0141F: GOTO 470.................... {.................... if(Y>=0)1420: BTFSC 63.71421: GOTO 449.................... {.................... b=180+b;1422: BCF 03.11423: BSF 03.51424: CLRF 2C1425: CLRF 2B1426: MOVLW 341427: MOVWF 2A1428: MOVLW 861429: MOVWF 29142A: BCF 03.5142B: MOVF 6D,W142C: BSF 03.5142D: MOVWF 30142E: BCF 03.5142F: MOVF 6C,W1430: BSF 03.51431: MOVWF 2F1432: BCF 03.51433: MOVF 6B,W1434: BSF 03.51435: MOVWF 2E1436: BCF 03.51437: MOVF 6A,W1438: BSF 03.51439: MOVWF 2D143A: BCF 0A.4143B: BSF 0A.3143C: BCF 03.5143D: CALL 000143E: BSF 0A.4143F: BCF 0A.31440: MOVF 7A,W1441: MOVWF 6D1442: MOVF 79,W1443: MOVWF 6C1444: MOVF 78,W1445: MOVWF 6B1446: MOVF 77,W1447: MOVWF 6A........................................ }.................... else1448: GOTO 46F.................... {.................... b=180-b;1449: BSF 03.1144A: BSF 03.5144B: CLRF 2C144C: CLRF 2B144D: MOVLW 34144E: MOVWF 2A144F: MOVLW 861450: MOVWF 291451: BCF 03.51452: MOVF 6D,W1453: BSF 03.51454: MOVWF 301455: BCF 03.51456: MOVF 6C,W1457: BSF 03.51458: MOVWF 2F1459: BCF 03.5145A: MOVF 6B,W145B: BSF 03.5145C: MOVWF 2E145D: BCF 03.5145E: MOVF 6A,W145F: BSF 03.51460: MOVWF 2D1461: BCF 0A.41462: BSF 0A.31463: BCF 03.51464: CALL 0001465: BSF 0A.41466: BCF 0A.31467: MOVF 7A,W1468: MOVWF 6D1469: MOVF 79,W146A: MOVWF 6C146B: MOVF 78,W146C: MOVWF 6B146D: MOVF 77,W146E: MOVWF 6A........................................ }.................... }.................... else146F: GOTO 499.................... {.................... if(Y>=0)1470: BTFSC 63.71471: GOTO 499.................... {.................... b=360-b;1472: BSF 03.11473: BSF 03.51474: CLRF 2C1475: CLRF 2B1476: MOVLW 341477: MOVWF 2A1478: MOVLW 871479: MOVWF 29147A: BCF 03.5147B: MOVF 6D,W147C: BSF 03.5147D: MOVWF 30147E: BCF 03.5147F: MOVF 6C,W1480: BSF 03.51481: MOVWF 2F1482: BCF 03.51483: MOVF 6B,W1484: BSF 03.51485: MOVWF 2E1486: BCF 03.51487: MOVF 6A,W1488: BSF 03.51489: MOVWF 2D148A: BCF 0A.4148B: BSF 0A.3148C: BCF 03.5148D: CALL 000148E: BSF 0A.4148F: BCF 0A.31490: MOVF 7A,W1491: MOVWF 6D1492: MOVF 79,W1493: MOVWF 6C1494: MOVF 78,W1495: MOVWF 6B1496: MOVF 77,W1497: MOVWF 6A........................................ }.................... else1498: GOTO 499.................... {.................... b=b;........................................ }.................... }........................................ }........................................ return b;1499: MOVF 6A,W149A: MOVWF 77149B: MOVF 6B,W149C: MOVWF 78149D: MOVF 6C,W149E: MOVWF 79149F: MOVF 6D,W14A0: MOVWF 7A........................................ }14A1: BSF 0A.314A2: BSF 0A.414A3: GOTO 111 (RETURN)............................................................................................................................................ void uvitani(void) // uvodni zprava.................... {.................... printf("\r\n\r\n# Meteorologicka stanice %s (C) 2013 www.mlab.cz \r\n",VERSION);*04AB: MOVLW 9804AC: BSF 03.604AD: MOVWF 0D04AE: MOVLW 0104AF: MOVWF 0F04B0: BCF 03.004B1: MOVLW 1D04B2: BCF 03.604B3: MOVWF 6004B4: CALL 3F504B5: MOVLW B404B6: BSF 03.604B7: MOVWF 0D04B8: MOVLW 0104B9: MOVWF 0F04BA: BCF 03.604BB: CALL 44404BC: MOVLW A704BD: BSF 03.604BE: MOVWF 0D04BF: MOVLW 0104C0: MOVWF 0F04C1: BSF 03.004C2: MOVLW 1804C3: BCF 03.604C4: MOVWF 6004C5: CALL 3F5.................... printf("\r\n# Autor: %s Posledni uprava: %s \r\n",AUTOR, DATE);// Welcome message04C6: MOVLW B604C7: BSF 03.604C8: MOVWF 0D04C9: MOVLW 0104CA: MOVWF 0F04CB: BCF 03.004CC: MOVLW 0B04CD: BCF 03.604CE: MOVWF 6004CF: CALL 3F504D0: MOVLW C904D1: BSF 03.604D2: MOVWF 0D04D3: MOVLW 0104D4: MOVWF 0F04D5: BCF 03.604D6: CALL 44404D7: MOVLW BC04D8: BSF 03.604D9: MOVWF 0D04DA: MOVLW 0104DB: MOVWF 0F04DC: BSF 03.004DD: MOVLW 1204DE: BCF 03.604DF: MOVWF 6004E0: CALL 3F504E1: MOVLW CF04E2: BSF 03.604E3: MOVWF 0D04E4: MOVLW 0104E5: MOVWF 0F04E6: BCF 03.604E7: CALL 44404E8: MOVLW 2004E9: MOVWF 6404EA: CALL 3D104EB: MOVLW 0D04EC: MOVWF 6404ED: CALL 3D104EE: MOVLW 0A04EF: MOVWF 6404F0: CALL 3D1.................... printf("# ver poradi ");04F1: MOVLW D404F2: BSF 03.604F3: MOVWF 0D04F4: MOVLW 0104F5: MOVWF 0F04F6: BCF 03.604F7: CALL 444.................... printf("altimet_t[°C] altimet_a[m] altimet_p[Pa] ");04F8: MOVLW DB04F9: BSF 03.604FA: MOVWF 0D04FB: MOVLW 0104FC: MOVWF 0F.................... printf("sht_t[°C] sht_h[%%] Anemo[m/s]check\r\n\r\n");*051D: MOVLW 05051E: MOVWF 0D051F: MOVLW 020520: MOVWF 0F0521: MOVLW 100522: BCF 03.60523: MOVWF 600524: CALL 48A0525: MOVLW 250526: MOVWF 640527: CALL 3D10528: MOVLW 170529: BSF 03.6052A: MOVWF 0D052B: MOVLW 02052C: MOVWF 0F052D: MOVLW 16052E: BCF 03.6052F: MOVWF 600530: CALL 48A.................... }0531: BSF 0A.30532: BSF 0A.40533: GOTO 0A6 (RETURN)........................................ void main().................... {*1800: CLRF 041801: BCF 03.71802: MOVLW 1F1803: ANDWF 03,F1804: MOVLW 711805: BSF 03.51806: MOVWF 0F1807: MOVF 0F,W1808: BCF 03.51809: BCF 28.7180A: MOVF 28,W180B: BSF 03.5180C: MOVWF 07180D: BCF 03.5180E: BSF 07.7180F: CLRF 341810: CLRF 331811: CLRF 321812: CLRF 311813: BSF 03.51814: BSF 03.61815: MOVF 09,W1816: ANDLW C01817: MOVWF 091818: BCF 03.61819: BCF 1F.4181A: BCF 1F.5181B: MOVLW 00181C: BSF 03.6181D: MOVWF 08181E: BCF 03.5181F: CLRF 071820: CLRF 081821: CLRF 09.................... setup_wdt(WDT_2304MS); //nastavení resetu pokud nedojde v cas k jeho vynulovani*1830: MOVLW 091831: BSF 03.61832: MOVWF 051833: MOVLW 0F1834: MOVWF 771835: BCF 03.61836: CLRF 011837: MOVLW 811838: MOVWF 041839: BCF 03.7183A: MOVF 00,W183B: ANDLW F0183C: IORLW 07183D: MOVWF 00183E: CLRWDT183F: MOVF 00,W1840: ANDLW F71841: BTFSC 77.31842: ANDLW F01843: IORWF 77,W1844: MOVWF 00.................... restart_wdt(); //---WDT1845: CLRWDT.................... setup_adc_ports(NO_ANALOGS|VSS_VDD);1846: BSF 03.51847: BSF 03.61848: MOVF 09,W1849: ANDLW C0184A: MOVWF 09184B: BCF 03.6184C: BCF 1F.4184D: BCF 1F.5184E: MOVLW 00184F: BSF 03.61850: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_2);1851: BCF 03.51852: BCF 03.61853: BCF 1F.61854: BCF 1F.71855: BSF 03.51856: BCF 1F.71857: BCF 03.51858: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);1859: BCF 14.5185A: BCF 28.5185B: MOVF 28,W185C: BSF 03.5185D: MOVWF 07185E: BCF 03.5185F: BSF 28.41860: MOVF 28,W1861: BSF 03.51862: MOVWF 071863: BCF 03.51864: BCF 28.31865: MOVF 28,W1866: BSF 03.51867: MOVWF 071868: MOVLW 011869: BCF 03.5186A: MOVWF 14186B: MOVLW 00186C: BSF 03.5186D: MOVWF 14.................... setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);186E: MOVF 01,W186F: ANDLW C71870: IORLW 281871: MOVWF 01.................... setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);1872: MOVLW 0F1873: BCF 03.51874: MOVWF 10.................... setup_timer_2(T2_DISABLED,0,1);1875: MOVLW 001876: MOVWF 781877: MOVWF 121878: MOVLW 001879: BSF 03.5187A: MOVWF 12.................... setup_ccp1(CCP_OFF);187B: BCF 03.5187C: BSF 28.2187D: MOVF 28,W187E: BSF 03.5187F: MOVWF 071880: BCF 03.51881: CLRF 171882: BSF 03.51883: CLRF 1B1884: CLRF 1C1885: MOVLW 011886: MOVWF 1D.................... setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard1887: BCF 03.51888: BSF 03.61889: CLRF 07188A: CLRF 08188B: CLRF 09............................................................ float altimet_t; //teplota z MPL3115.................... float altimet_p; //tlak z MPL3115.................... float altimet_a; //vyska z MPL3115.................... float sht25_t; //teplota z SHT25.................... float sht25_h; //relativni vlhkost z SHT25.................... float smer_v; //smer vetru........................................ unsigned int16 poradi=0; //cislo vzorku.................... unsigned int8 sht_config;188C: BCF 03.6188D: CLRF 50188E: CLRF 4F........................................ //nastaveni SHT25.................... SHT25_soft_reset();188F: BCF 0A.41890: BCF 0A.31891: GOTO 2781892: BSF 0A.41893: BSF 0A.3.................... sht_config = SHT25_RH12_T14 | SHT25_HEATER_OFF; //vypnuti topeni v SHT251894: CLRF 51.................... SHT25_setup(sht_config);1895: MOVF 51,W1896: MOVWF 601897: BCF 0A.41898: BCF 0A.31899: GOTO 309189A: BSF 0A.4189B: BSF 0A.3........................................ //nastavení pøeruení pro anemometr.................... enable_interrupts(INT_TIMER1);189C: BSF 03.5189D: BSF 0C.0.................... enable_interrupts(INT_TIMER0);189E: BCF 03.5189F: BSF 0B.5.................... enable_interrupts(GLOBAL);18A0: MOVLW C018A1: IORWF 0B,F.................... restart_wdt(); //---WDT18A2: CLRWDT........................................ uvitani();18A3: BCF 0A.418A4: BCF 0A.318A5: GOTO 4AB18A6: BSF 0A.418A7: BSF 0A.3.................... set_mag(); //nastaveni magnetometru pro smer vetru18A8: BCF 0A.418A9: BCF 0A.318AA: GOTO 53418AB: BSF 0A.418AC: BSF 0A.3........................................ // vynulovani promenych pro anemometr.................... set_timer0(0);18AD: CLRF 01.................... set_timer1(0);18AE: CLRF 0F18AF: CLRF 0E.................... timer0_overflow_count=0;18B0: CLRF 3018B1: CLRF 2F.................... anemo=0;18B2: CLRF 3418B3: CLRF 3318B4: CLRF 3218B5: CLRF 31........................................ restart_wdt(); //---WDT18B6: CLRWDT........................................ while(TRUE).................... {.................... char output[12]; // vystupni zasobnik.................... int8 j; // ukazatel na retezec.................... int8 check=0; // Checksum is calculated between '$' and '*'18B7: CLRF 5F............................................................ mpl3115_setP(); //nastaveni pro tlak a teplotu18B8: BCF 0A.418B9: BCF 0A.318BA: GOTO 5E618BB: BSF 0A.418BC: BSF 0A.3.................... delay_ms (500);18BD: MOVLW 0218BE: MOVWF 6018BF: MOVLW FA18C0: MOVWF 6518C1: BCF 0A.418C2: BCF 0A.318C3: CALL 2F518C4: BSF 0A.418C5: BSF 0A.318C6: DECFSZ 60,F18C7: GOTO 0BF.................... altimet_t=mpl3115_T();18C8: BCF 0A.418C9: BCF 0A.318CA: GOTO 6EB18CB: BSF 0A.418CC: BSF 0A.318CD: MOVF 7A,W18CE: MOVWF 3A18CF: MOVF 79,W18D0: MOVWF 3918D1: MOVF 78,W18D2: MOVWF 3818D3: MOVF 77,W18D4: MOVWF 37.................... altimet_p=mpl3115_P();18D5: BCF 0A.418D6: GOTO 14618D7: BSF 0A.418D8: MOVF 7A,W18D9: MOVWF 3E18DA: MOVF 79,W18DB: MOVWF 3D18DC: MOVF 78,W18DD: MOVWF 3C18DE: MOVF 77,W18DF: MOVWF 3B........................................ mpl3115_setA(); //nastaveni pro vysku a teplotu18E0: BCF 0A.418E1: GOTO 22018E2: BSF 0A.4.................... delay_ms (500);18E3: MOVLW 0218E4: MOVWF 6018E5: MOVLW FA18E6: MOVWF 6518E7: BCF 0A.418E8: BCF 0A.318E9: CALL 2F518EA: BSF 0A.418EB: BSF 0A.318EC: DECFSZ 60,F18ED: GOTO 0E5.................... altimet_a=mpl3115_A();18EE: BCF 0A.418EF: GOTO 2DD18F0: BSF 0A.418F1: MOVF 7A,W18F2: MOVWF 4218F3: MOVF 79,W18F4: MOVWF 4118F5: MOVF 78,W18F6: MOVWF 4018F7: MOVF 77,W18F8: MOVWF 3F........................................ sht25_t=SHT25_get_temp(); //mereni hodnot z SHT2518F9: BCF 0A.418FA: GOTO 38518FB: BSF 0A.418FC: MOVF 7A,W18FD: MOVWF 4618FE: MOVF 79,W18FF: MOVWF 451900: MOVF 78,W1901: MOVWF 441902: MOVF 77,W1903: MOVWF 43.................... sht25_h=SHT25_get_hum();1904: BCF 0A.41905: GOTO 4851906: BSF 0A.41907: MOVF 7A,W1908: MOVWF 4A1909: MOVF 79,W190A: MOVWF 49190B: MOVF 78,W190C: MOVWF 48190D: MOVF 77,W190E: MOVWF 47........................................ smer_v=azimut(); //vrati azimut aktualniho smeru vetru190F: BCF 0A.31910: GOTO 0001911: BSF 0A.31912: MOVF 7A,W1913: MOVWF 4E1914: MOVF 79,W1915: MOVWF 4D1916: MOVF 78,W1917: MOVWF 4C1918: MOVF 77,W1919: MOVWF 4B............................................................ delay_us(SEND_DELAY);191A: MOVLW 21191B: MOVWF 77191C: DECFSZ 77,F191D: GOTO 11C.................... putc('$');191E: MOVLW 24191F: MOVWF 641920: BCF 0A.41921: BCF 0A.31922: CALL 3D11923: BSF 0A.41924: BSF 0A.3.................... delay_us(SEND_DELAY);1925: MOVLW 211926: MOVWF 771927: DECFSZ 77,F1928: GOTO 127.................... sprintf(output,"MST%s \0",VER);1929: CLRF 36192A: MOVLW 52192B: MOVWF 35192C: MOVLW 4D192D: MOVWF 6D192E: BCF 0A.4192F: CALL 6321930: BSF 0A.41931: MOVLW 531932: MOVWF 6D1933: BCF 0A.41934: CALL 6321935: BSF 0A.41936: MOVLW 541937: MOVWF 6D1938: BCF 0A.41939: CALL 632193A: BSF 0A.4193B: MOVLW 2B193C: MOVWF 04193D: BCF 03.7193E: BCF 0A.4193F: GOTO 63F1940: BSF 0A.41941: MOVLW 201942: MOVWF 6D1943: BCF 0A.41944: CALL 6321945: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }1946: CLRF 5E1947: MOVLW 521948: ADDWF 5E,W1949: MOVWF 04194A: BCF 03.7194B: MOVF 00,F194C: BTFSC 03.2194D: GOTO 167194E: MOVLW 21194F: MOVWF 771950: DECFSZ 77,F1951: GOTO 1501952: MOVLW 521953: ADDWF 5E,W1954: MOVWF 041955: BCF 03.71956: MOVF 00,W1957: MOVWF 601958: MOVF 60,W1959: MOVWF 64195A: BCF 0A.4195B: BCF 0A.3195C: CALL 3D1195D: BSF 0A.4195E: BSF 0A.3195F: MOVF 5E,W1960: INCF 5E,F1961: ADDLW 521962: MOVWF 041963: BCF 03.71964: MOVF 00,W1965: XORWF 5F,F1966: GOTO 147.................... sprintf(output,"%4.0Lu \0", poradi);1967: CLRF 361968: MOVLW 521969: MOVWF 35196A: MOVLW 01196B: MOVWF 04196C: MOVF 50,W196D: MOVWF 61196E: MOVF 4F,W196F: MOVWF 601970: BCF 0A.41971: GOTO 6571972: BSF 0A.41973: MOVLW 201974: MOVWF 6D1975: BCF 0A.41976: CALL 6321977: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }1978: CLRF 5E1979: MOVLW 52197A: ADDWF 5E,W197B: MOVWF 04197C: BCF 03.7197D: MOVF 00,F197E: BTFSC 03.2197F: GOTO 1991980: MOVLW 211981: MOVWF 771982: DECFSZ 77,F1983: GOTO 1821984: MOVLW 521985: ADDWF 5E,W1986: MOVWF 041987: BCF 03.71988: MOVF 00,W1989: MOVWF 60198A: MOVF 60,W198B: MOVWF 64198C: BCF 0A.4198D: BCF 0A.3198E: CALL 3D1198F: BSF 0A.41990: BSF 0A.31991: MOVF 5E,W1992: INCF 5E,F1993: ADDLW 521994: MOVWF 041995: BCF 03.71996: MOVF 00,W1997: XORWF 5F,F1998: GOTO 179.................... sprintf(output,"%6.2f \0", altimet_t );1999: CLRF 36199A: MOVLW 52199B: MOVWF 35199C: MOVLW 05199D: MOVWF 04199E: MOVF 3A,W199F: MOVWF 6319A0: MOVF 39,W19A1: MOVWF 6219A2: MOVF 38,W19A3: MOVWF 6119A4: MOVF 37,W19A5: MOVWF 6019A6: MOVLW 0219A7: MOVWF 6419A8: BCF 0A.419A9: CALL 70219AA: BSF 0A.419AB: MOVLW 2019AC: MOVWF 6D19AD: BCF 0A.419AE: CALL 63219AF: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }19B0: CLRF 5E19B1: MOVLW 5219B2: ADDWF 5E,W19B3: MOVWF 0419B4: BCF 03.719B5: MOVF 00,F19B6: BTFSC 03.219B7: GOTO 1D119B8: MOVLW 2119B9: MOVWF 7719BA: DECFSZ 77,F19BB: GOTO 1BA19BC: MOVLW 5219BD: ADDWF 5E,W19BE: MOVWF 0419BF: BCF 03.719C0: MOVF 00,W19C1: MOVWF 6019C2: MOVF 60,W19C3: MOVWF 6419C4: BCF 0A.419C5: BCF 0A.319C6: CALL 3D119C7: BSF 0A.419C8: BSF 0A.319C9: MOVF 5E,W19CA: INCF 5E,F19CB: ADDLW 5219CC: MOVWF 0419CD: BCF 03.719CE: MOVF 00,W19CF: XORWF 5F,F19D0: GOTO 1B1.................... sprintf(output,"%7.2f \0", altimet_a);19D1: CLRF 3619D2: MOVLW 5219D3: MOVWF 3519D4: MOVLW 0619D5: MOVWF 0419D6: MOVF 42,W19D7: MOVWF 6319D8: MOVF 41,W19D9: MOVWF 6219DA: MOVF 40,W19DB: MOVWF 6119DC: MOVF 3F,W19DD: MOVWF 6019DE: MOVLW 0219DF: MOVWF 6419E0: BCF 0A.419E1: CALL 70219E2: BSF 0A.419E3: MOVLW 2019E4: MOVWF 6D19E5: BCF 0A.419E6: CALL 63219E7: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }19E8: CLRF 5E19E9: MOVLW 5219EA: ADDWF 5E,W19EB: MOVWF 0419EC: BCF 03.719ED: MOVF 00,F19EE: BTFSC 03.219EF: GOTO 20919F0: MOVLW 2119F1: MOVWF 7719F2: DECFSZ 77,F19F3: GOTO 1F219F4: MOVLW 5219F5: ADDWF 5E,W19F6: MOVWF 0419F7: BCF 03.719F8: MOVF 00,W19F9: MOVWF 6019FA: MOVF 60,W19FB: MOVWF 6419FC: BCF 0A.419FD: BCF 0A.319FE: CALL 3D119FF: BSF 0A.41A00: BSF 0A.31A01: MOVF 5E,W1A02: INCF 5E,F1A03: ADDLW 521A04: MOVWF 041A05: BCF 03.71A06: MOVF 00,W1A07: XORWF 5F,F1A08: GOTO 1E9.................... sprintf(output,"%9.2f \0", altimet_p);1A09: CLRF 361A0A: MOVLW 521A0B: MOVWF 351A0C: MOVLW 081A0D: MOVWF 041A0E: MOVF 3E,W1A0F: MOVWF 631A10: MOVF 3D,W1A11: MOVWF 621A12: MOVF 3C,W1A13: MOVWF 611A14: MOVF 3B,W1A15: MOVWF 601A16: MOVLW 021A17: MOVWF 641A18: BCF 0A.41A19: CALL 7021A1A: BSF 0A.41A1B: MOVLW 201A1C: MOVWF 6D1A1D: BCF 0A.41A1E: CALL 6321A1F: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }1A20: CLRF 5E1A21: MOVLW 521A22: ADDWF 5E,W1A23: MOVWF 041A24: BCF 03.71A25: MOVF 00,F1A26: BTFSC 03.21A27: GOTO 2411A28: MOVLW 211A29: MOVWF 771A2A: DECFSZ 77,F1A2B: GOTO 22A1A2C: MOVLW 521A2D: ADDWF 5E,W1A2E: MOVWF 041A2F: BCF 03.71A30: MOVF 00,W1A31: MOVWF 601A32: MOVF 60,W1A33: MOVWF 641A34: BCF 0A.41A35: BCF 0A.31A36: CALL 3D11A37: BSF 0A.41A38: BSF 0A.31A39: MOVF 5E,W1A3A: INCF 5E,F1A3B: ADDLW 521A3C: MOVWF 041A3D: BCF 03.71A3E: MOVF 00,W1A3F: XORWF 5F,F1A40: GOTO 221.................... sprintf(output,"%6.2f \0", sht25_t);1A41: CLRF 361A42: MOVLW 521A43: MOVWF 351A44: MOVLW 051A45: MOVWF 041A46: MOVF 46,W1A47: MOVWF 631A48: MOVF 45,W1A49: MOVWF 621A4A: MOVF 44,W1A4B: MOVWF 611A4C: MOVF 43,W1A4D: MOVWF 601A4E: MOVLW 021A4F: MOVWF 641A50: BCF 0A.41A51: CALL 7021A52: BSF 0A.41A53: MOVLW 201A54: MOVWF 6D1A55: BCF 0A.41A56: CALL 6321A57: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }1A58: CLRF 5E1A59: MOVLW 521A5A: ADDWF 5E,W1A5B: MOVWF 041A5C: BCF 03.71A5D: MOVF 00,F1A5E: BTFSC 03.21A5F: GOTO 2791A60: MOVLW 211A61: MOVWF 771A62: DECFSZ 77,F1A63: GOTO 2621A64: MOVLW 521A65: ADDWF 5E,W1A66: MOVWF 041A67: BCF 03.71A68: MOVF 00,W1A69: MOVWF 601A6A: MOVF 60,W1A6B: MOVWF 641A6C: BCF 0A.41A6D: BCF 0A.31A6E: CALL 3D11A6F: BSF 0A.41A70: BSF 0A.31A71: MOVF 5E,W1A72: INCF 5E,F1A73: ADDLW 521A74: MOVWF 041A75: BCF 03.71A76: MOVF 00,W1A77: XORWF 5F,F1A78: GOTO 259.................... sprintf(output,"%6.2f \0", sht25_h);1A79: CLRF 361A7A: MOVLW 521A7B: MOVWF 351A7C: MOVLW 051A7D: MOVWF 041A7E: MOVF 4A,W1A7F: MOVWF 631A80: MOVF 49,W1A81: MOVWF 621A82: MOVF 48,W1A83: MOVWF 611A84: MOVF 47,W1A85: MOVWF 601A86: MOVLW 021A87: MOVWF 641A88: BCF 0A.41A89: CALL 7021A8A: BSF 0A.41A8B: MOVLW 201A8C: MOVWF 6D1A8D: BCF 0A.41A8E: CALL 6321A8F: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }1A90: CLRF 5E1A91: MOVLW 521A92: ADDWF 5E,W1A93: MOVWF 041A94: BCF 03.71A95: MOVF 00,F1A96: BTFSC 03.21A97: GOTO 2B11A98: MOVLW 211A99: MOVWF 771A9A: DECFSZ 77,F1A9B: GOTO 29A1A9C: MOVLW 521A9D: ADDWF 5E,W1A9E: MOVWF 041A9F: BCF 03.71AA0: MOVF 00,W1AA1: MOVWF 601AA2: MOVF 60,W1AA3: MOVWF 641AA4: BCF 0A.41AA5: BCF 0A.31AA6: CALL 3D11AA7: BSF 0A.41AA8: BSF 0A.31AA9: MOVF 5E,W1AAA: INCF 5E,F1AAB: ADDLW 521AAC: MOVWF 041AAD: BCF 03.71AAE: MOVF 00,W1AAF: XORWF 5F,F1AB0: GOTO 291.................... sprintf(output,"%6.2f \0", smer_v);1AB1: CLRF 361AB2: MOVLW 521AB3: MOVWF 351AB4: MOVLW 051AB5: MOVWF 041AB6: MOVF 4E,W1AB7: MOVWF 631AB8: MOVF 4D,W1AB9: MOVWF 621ABA: MOVF 4C,W1ABB: MOVWF 611ABC: MOVF 4B,W1ABD: MOVWF 601ABE: MOVLW 021ABF: MOVWF 641AC0: BCF 0A.41AC1: CALL 7021AC2: BSF 0A.41AC3: MOVLW 201AC4: MOVWF 6D1AC5: BCF 0A.41AC6: CALL 6321AC7: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }1AC8: CLRF 5E1AC9: MOVLW 521ACA: ADDWF 5E,W1ACB: MOVWF 041ACC: BCF 03.71ACD: MOVF 00,F1ACE: BTFSC 03.21ACF: GOTO 2E91AD0: MOVLW 211AD1: MOVWF 771AD2: DECFSZ 77,F1AD3: GOTO 2D21AD4: MOVLW 521AD5: ADDWF 5E,W1AD6: MOVWF 041AD7: BCF 03.71AD8: MOVF 00,W1AD9: MOVWF 601ADA: MOVF 60,W1ADB: MOVWF 641ADC: BCF 0A.41ADD: BCF 0A.31ADE: CALL 3D11ADF: BSF 0A.41AE0: BSF 0A.31AE1: MOVF 5E,W1AE2: INCF 5E,F1AE3: ADDLW 521AE4: MOVWF 041AE5: BCF 03.71AE6: MOVF 00,W1AE7: XORWF 5F,F1AE8: GOTO 2C9.................... sprintf(output,"%5.2f \0", anemo);1AE9: CLRF 361AEA: MOVLW 521AEB: MOVWF 351AEC: MOVLW 041AED: MOVWF 041AEE: MOVF 34,W1AEF: MOVWF 631AF0: MOVF 33,W1AF1: MOVWF 621AF2: MOVF 32,W1AF3: MOVWF 611AF4: MOVF 31,W1AF5: MOVWF 601AF6: MOVLW 021AF7: MOVWF 641AF8: BCF 0A.41AF9: CALL 7021AFA: BSF 0A.41AFB: MOVLW 201AFC: MOVWF 6D1AFD: BCF 0A.41AFE: CALL 6321AFF: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j]); check^=output[j++]; }1B00: CLRF 5E1B01: MOVLW 521B02: ADDWF 5E,W1B03: MOVWF 041B04: BCF 03.71B05: MOVF 00,F1B06: BTFSC 03.21B07: GOTO 3211B08: MOVLW 211B09: MOVWF 771B0A: DECFSZ 77,F1B0B: GOTO 30A1B0C: MOVLW 521B0D: ADDWF 5E,W1B0E: MOVWF 041B0F: BCF 03.71B10: MOVF 00,W1B11: MOVWF 601B12: MOVF 60,W1B13: MOVWF 641B14: BCF 0A.41B15: BCF 0A.31B16: CALL 3D11B17: BSF 0A.41B18: BSF 0A.31B19: MOVF 5E,W1B1A: INCF 5E,F1B1B: ADDLW 521B1C: MOVWF 041B1D: BCF 03.71B1E: MOVF 00,W1B1F: XORWF 5F,F1B20: GOTO 301.................... sprintf(output,"*%X\r\n\0", check);1B21: CLRF 361B22: MOVLW 521B23: MOVWF 351B24: MOVLW 2A1B25: MOVWF 6D1B26: BCF 0A.41B27: CALL 6321B28: BSF 0A.41B29: MOVF 5F,W1B2A: MOVWF 601B2B: MOVLW 371B2C: MOVWF 611B2D: BCF 0A.31B2E: GOTO 4A41B2F: BSF 0A.31B30: MOVLW 0D1B31: MOVWF 6D1B32: BCF 0A.41B33: CALL 6321B34: BSF 0A.41B35: MOVLW 0A1B36: MOVWF 6D1B37: BCF 0A.41B38: CALL 6321B39: BSF 0A.4.................... j=0; while(output[j]!=0) { delay_us(SEND_DELAY); putc(output[j++]); }1B3A: CLRF 5E1B3B: MOVLW 521B3C: ADDWF 5E,W1B3D: MOVWF 041B3E: BCF 03.71B3F: MOVF 00,F1B40: BTFSC 03.21B41: GOTO 3551B42: MOVLW 211B43: MOVWF 771B44: DECFSZ 77,F1B45: GOTO 3441B46: MOVF 5E,W1B47: INCF 5E,F1B48: ADDLW 521B49: MOVWF 041B4A: BCF 03.71B4B: MOVF 00,W1B4C: MOVWF 601B4D: MOVF 60,W1B4E: MOVWF 641B4F: BCF 0A.41B50: BCF 0A.31B51: CALL 3D11B52: BSF 0A.41B53: BSF 0A.31B54: GOTO 33B.................... delay_us(SEND_DELAY);1B55: MOVLW 211B56: MOVWF 771B57: DECFSZ 77,F1B58: GOTO 357........................................ poradi++;1B59: INCF 4F,F1B5A: BTFSC 03.21B5B: INCF 50,F.................... restart_wdt();1B5C: CLRWDT.................... }1B5D: GOTO 0B7........................................ }............................................................1B5E: SLEEPConfiguration Fuses:Word 1: 2CFD INTRC WDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40