CCS PCM C Compiler, Version 4.106, 47914 06-5-13 11:39Filename: c:\users\honza\documents\pic\meteo_stanice\nová sloka\main.lstROM used: 5847 words (71%)Largest free fragment is 2048RAM used: 25 (7%) at main() level260 (71%) worst caseStack: 5 worst case (3 in main + 2 for interrupts)*0000: MOVLW 150001: MOVWF 0A0002: GOTO 53E0003: 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)*0303: MOVLW E20304: MOVWF 040305: BCF 03.70306: MOVF 00,W0307: BTFSC 03.20308: GOTO 3160309: MOVLW 02030A: MOVWF 78030B: CLRF 77030C: DECFSZ 77,F030D: GOTO 30C030E: DECFSZ 78,F030F: GOTO 30B0310: MOVLW 970311: MOVWF 770312: DECFSZ 77,F0313: GOTO 3120314: DECFSZ 00,F0315: GOTO 3090316: RETURN........................................ //set I2C.................... #define PIN_SDA PIN_C3.................... #define PIN_SCL PIN_C4.................... #use i2c(master, sda=PIN_SDA, scl=PIN_SCL)*022E: MOVLW 08022F: MOVWF 780230: NOP0231: BCF 07.40232: BCF 28.40233: MOVF 28,W0234: BSF 03.50235: MOVWF 070236: NOP0237: BCF 03.50238: BSF 03.60239: RLF 12,F023A: BCF 03.6023B: BCF 07.3023C: BTFSS 03.0023D: GOTO 244023E: BSF 28.3023F: MOVF 28,W0240: BSF 03.50241: MOVWF 070242: GOTO 2480243: BCF 03.50244: BCF 28.30245: MOVF 28,W0246: BSF 03.50247: MOVWF 070248: NOP0249: BCF 03.5024A: BSF 28.4024B: MOVF 28,W024C: BSF 03.5024D: MOVWF 07024E: BCF 03.5024F: BTFSS 07.40250: GOTO 24F0251: DECFSZ 78,F0252: GOTO 2300253: NOP0254: BCF 07.40255: BCF 28.40256: MOVF 28,W0257: BSF 03.50258: MOVWF 070259: NOP025A: BCF 03.5025B: BSF 28.3025C: MOVF 28,W025D: BSF 03.5025E: MOVWF 07025F: NOP0260: NOP0261: BCF 03.50262: BSF 28.40263: MOVF 28,W0264: BSF 03.50265: MOVWF 070266: BCF 03.50267: BTFSS 07.40268: GOTO 2670269: CLRF 78026A: NOP026B: BTFSC 07.3026C: BSF 78.0026D: BCF 07.4026E: BCF 28.4026F: MOVF 28,W0270: BSF 03.50271: MOVWF 070272: BCF 03.50273: BCF 07.30274: BCF 28.30275: MOVF 28,W0276: BSF 03.50277: MOVWF 070278: BCF 03.50279: RETURN*02B6: MOVLW 0802B7: BSF 03.602B8: MOVWF 1302B9: MOVF 77,W02BA: MOVWF 1402BB: BCF 03.602BC: BSF 28.302BD: MOVF 28,W02BE: BSF 03.502BF: MOVWF 0702C0: NOP02C1: BCF 03.502C2: BSF 28.402C3: MOVF 28,W02C4: BSF 03.502C5: MOVWF 0702C6: BCF 03.502C7: BTFSS 07.402C8: GOTO 2C702C9: BTFSC 07.302CA: BSF 03.002CB: BTFSS 07.302CC: BCF 03.002CD: RLF 78,F02CE: NOP02CF: BCF 28.402D0: MOVF 28,W02D1: BSF 03.502D2: MOVWF 0702D3: BCF 03.502D4: BCF 07.402D5: BSF 03.602D6: DECFSZ 13,F02D7: GOTO 2BB02D8: BCF 03.602D9: BSF 28.302DA: MOVF 28,W02DB: BSF 03.502DC: MOVWF 0702DD: NOP02DE: BCF 03.502DF: BCF 07.302E0: BSF 03.602E1: MOVF 14,W02E2: BTFSC 03.202E3: GOTO 2EB02E4: BCF 03.602E5: BCF 28.302E6: MOVF 28,W02E7: BSF 03.502E8: MOVWF 0702E9: BCF 03.502EA: BSF 03.602EB: NOP02EC: BCF 03.602ED: BSF 28.402EE: MOVF 28,W02EF: BSF 03.502F0: MOVWF 0702F1: BCF 03.502F2: BTFSS 07.402F3: GOTO 2F202F4: NOP02F5: BCF 07.402F6: BCF 28.402F7: MOVF 28,W02F8: BSF 03.502F9: MOVWF 0702FA: NOP02FB: BCF 03.502FC: BCF 07.302FD: BCF 28.302FE: MOVF 28,W02FF: BSF 03.50300: MOVWF 070301: BCF 03.50302: RETURN.................... //set RS232.................... #use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8) //rcv TXD xmit RXD*0F62: BCF 03.50F63: BCF 28.70F64: MOVF 28,W0F65: BSF 03.50F66: MOVWF 070F67: BCF 03.50F68: BCF 07.70F69: MOVLW 080F6A: MOVWF 780F6B: GOTO 76C0F6C: NOP0F6D: BSF 78.70F6E: GOTO 77F0F6F: BCF 78.70F70: BSF 03.50F71: RRF 5F,F0F72: BCF 03.50F73: BTFSC 03.00F74: BSF 07.70F75: BTFSS 03.00F76: BCF 07.70F77: BSF 78.60F78: GOTO 77F0F79: BCF 78.60F7A: DECFSZ 78,F0F7B: GOTO 7700F7C: GOTO 77D0F7D: NOP0F7E: BSF 07.70F7F: MOVLW 3F0F80: MOVWF 040F81: DECFSZ 04,F0F82: GOTO 7810F83: NOP0F84: BTFSC 78.70F85: GOTO 76F0F86: BTFSC 78.60F87: GOTO 779............................................................ #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;*10E7: BCF 6F.0.................... flag = 0;10E8: BCF 6F.1.................... y = x;10E9: MOVF 6E,W10EA: BCF 03.510EB: BSF 03.610EC: MOVWF 1310ED: BSF 03.510EE: BCF 03.610EF: MOVF 6D,W10F0: BCF 03.510F1: BSF 03.610F2: MOVWF 1210F3: BSF 03.510F4: BCF 03.610F5: MOVF 6C,W10F6: BCF 03.510F7: BSF 03.610F8: MOVWF 1110F9: BSF 03.510FA: BCF 03.610FB: MOVF 6B,W10FC: BCF 03.510FD: BSF 03.610FE: MOVWF 10........................................ if (x < 0)10FF: BSF 03.51100: BCF 03.61101: MOVF 6E,W1102: BCF 03.51103: BSF 03.61104: MOVWF 201105: BSF 03.51106: BCF 03.61107: MOVF 6D,W1108: BCF 03.51109: BSF 03.6110A: MOVWF 1F110B: BSF 03.5110C: BCF 03.6110D: MOVF 6C,W110E: BCF 03.5110F: BSF 03.61110: MOVWF 1E1111: BSF 03.51112: BCF 03.61113: MOVF 6B,W1114: BCF 03.51115: BSF 03.61116: MOVWF 1D1117: CLRF 241118: CLRF 231119: CLRF 22111A: CLRF 21111B: BCF 0A.4111C: BSF 0A.3111D: BCF 03.6111E: CALL 5A9111F: BSF 0A.41120: BCF 0A.31121: BTFSS 03.01122: GOTO 12B.................... {.................... s = 1;1123: BSF 03.51124: BSF 6F.0.................... y = -y;1125: BCF 03.51126: BSF 03.61127: MOVF 11,W1128: XORLW 801129: MOVWF 11112A: BCF 03.6.................... }........................................ if (y > 1.0)112B: BSF 03.6112C: CLRF 20112D: CLRF 1F112E: CLRF 1E112F: MOVLW 7F1130: MOVWF 1D1131: MOVF 13,W1132: MOVWF 241133: MOVF 12,W1134: MOVWF 231135: MOVF 11,W1136: MOVWF 221137: MOVF 10,W1138: MOVWF 211139: BCF 0A.4113A: BSF 0A.3113B: BCF 03.6113C: CALL 5A9113D: BSF 0A.4113E: BCF 0A.3113F: BTFSS 03.01140: GOTO 1661141: CLRF 271142: BTFSC 0B.71143: BSF 27.71144: BCF 0B.7.................... {.................... y = 1.0/y;1145: BSF 03.61146: CLRF 591147: CLRF 581148: CLRF 571149: MOVLW 7F114A: MOVWF 56114B: MOVF 13,W114C: MOVWF 5D114D: MOVF 12,W114E: MOVWF 5C114F: MOVF 11,W1150: MOVWF 5B1151: MOVF 10,W1152: MOVWF 5A1153: BCF 0A.41154: BCF 03.61155: CALL 0571156: BSF 0A.41157: BTFSC 27.71158: BSF 0B.71159: MOVF 7A,W115A: BSF 03.6115B: MOVWF 13115C: MOVF 79,W115D: MOVWF 12115E: MOVF 78,W115F: MOVWF 111160: MOVF 77,W1161: MOVWF 10.................... flag = 1;1162: BSF 03.51163: BCF 03.61164: BSF 6F.11165: BCF 03.5.................... }........................................ res = pat[0]*y*y + pat[1];1166: MOVLW 0A1167: BSF 03.61168: MOVWF 241169: MOVLW 89116A: MOVWF 23116B: MOVLW 34116C: MOVWF 22116D: MOVLW 7C116E: MOVWF 21116F: MOVF 13,W1170: MOVWF 281171: MOVF 12,W1172: MOVWF 271173: MOVF 11,W1174: MOVWF 261175: MOVF 10,W1176: MOVWF 251177: BCF 0A.41178: BSF 0A.31179: BCF 03.6117A: CALL 2AB117B: BSF 0A.4117C: BCF 0A.3117D: MOVF 77,W117E: BSF 03.6117F: MOVWF 1C1180: MOVF 78,W1181: MOVWF 1D1182: MOVF 79,W1183: MOVWF 1E1184: MOVF 7A,W1185: MOVWF 1F1186: MOVWF 241187: MOVF 1E,W1188: MOVWF 231189: MOVF 1D,W118A: MOVWF 22118B: MOVF 1C,W118C: MOVWF 21118D: MOVF 13,W118E: MOVWF 28118F: MOVF 12,W1190: MOVWF 271191: MOVF 11,W1192: MOVWF 261193: MOVF 10,W1194: MOVWF 251195: BCF 0A.41196: BSF 0A.31197: BCF 03.61198: CALL 2AB1199: BSF 0A.4119A: BCF 0A.3119B: MOVF 77,W119C: BSF 03.6119D: MOVWF 1C119E: MOVF 78,W119F: MOVWF 1D11A0: MOVF 79,W11A1: MOVWF 1E11A2: MOVF 7A,W11A3: MOVWF 1F11A4: BCF 03.111A5: MOVF 1F,W11A6: MOVWF 2411A7: MOVF 1E,W11A8: MOVWF 2311A9: MOVF 1D,W11AA: MOVWF 2211AB: MOVF 1C,W11AC: MOVWF 2111AD: MOVLW 7C11AE: MOVWF 2811AF: MOVLW 7911B0: MOVWF 2711B1: MOVLW 3511B2: MOVWF 2611B3: MOVLW 8111B4: MOVWF 2511B5: BCF 0A.411B6: BCF 03.611B7: CALL 5DC11B8: BSF 0A.411B9: MOVF 7A,W11BA: BSF 03.611BB: MOVWF 1711BC: MOVF 79,W11BD: MOVWF 1611BE: MOVF 78,W11BF: MOVWF 1511C0: MOVF 77,W11C1: MOVWF 14.................... res = res*y*y + pat[2];11C2: MOVF 17,W11C3: MOVWF 2411C4: MOVF 16,W11C5: MOVWF 2311C6: MOVF 15,W11C7: MOVWF 2211C8: MOVF 14,W11C9: MOVWF 2111CA: MOVF 13,W11CB: MOVWF 2811CC: MOVF 12,W11CD: MOVWF 2711CE: MOVF 11,W11CF: MOVWF 2611D0: MOVF 10,W11D1: MOVWF 2511D2: BCF 0A.411D3: BSF 0A.311D4: BCF 03.611D5: CALL 2AB11D6: BSF 0A.411D7: BCF 0A.311D8: MOVF 77,W11D9: BSF 03.611DA: MOVWF 1C11DB: MOVF 78,W11DC: MOVWF 1D11DD: MOVF 79,W11DE: MOVWF 1E11DF: MOVF 7A,W11E0: MOVWF 1F11E1: MOVWF 2411E2: MOVF 1E,W11E3: MOVWF 2311E4: MOVF 1D,W11E5: MOVWF 2211E6: MOVF 1C,W11E7: MOVWF 2111E8: MOVF 13,W11E9: MOVWF 2811EA: MOVF 12,W11EB: MOVWF 2711EC: MOVF 11,W11ED: MOVWF 2611EE: MOVF 10,W11EF: MOVWF 2511F0: BCF 0A.411F1: BSF 0A.311F2: BCF 03.611F3: CALL 2AB11F4: BSF 0A.411F5: BCF 0A.311F6: MOVF 77,W11F7: BSF 03.611F8: MOVWF 1C11F9: MOVF 78,W11FA: MOVWF 1D11FB: MOVF 79,W11FC: MOVWF 1E11FD: MOVF 7A,W11FE: MOVWF 1F11FF: BCF 03.11200: MOVF 1F,W1201: MOVWF 241202: MOVF 1E,W1203: MOVWF 231204: MOVF 1D,W1205: MOVWF 221206: MOVF 1C,W1207: MOVWF 211208: MOVLW 3F1209: MOVWF 28120A: MOVLW 02120B: MOVWF 27120C: MOVLW 33120D: MOVWF 26120E: MOVLW 83120F: MOVWF 251210: BCF 0A.41211: BCF 03.61212: CALL 5DC1213: BSF 0A.41214: MOVF 7A,W1215: BSF 03.61216: MOVWF 171217: MOVF 79,W1218: MOVWF 161219: MOVF 78,W121A: MOVWF 15121B: MOVF 77,W121C: MOVWF 14.................... res = res*y*y + pat[3];121D: MOVF 17,W121E: MOVWF 24121F: MOVF 16,W1220: MOVWF 231221: MOVF 15,W1222: MOVWF 221223: MOVF 14,W1224: MOVWF 211225: MOVF 13,W1226: MOVWF 281227: MOVF 12,W1228: MOVWF 271229: MOVF 11,W122A: MOVWF 26122B: MOVF 10,W122C: MOVWF 25122D: BCF 0A.4122E: BSF 0A.3122F: BCF 03.61230: CALL 2AB1231: BSF 0A.41232: BCF 0A.31233: MOVF 77,W1234: BSF 03.61235: MOVWF 1C1236: MOVF 78,W1237: MOVWF 1D1238: MOVF 79,W1239: MOVWF 1E123A: MOVF 7A,W123B: MOVWF 1F123C: MOVWF 24123D: MOVF 1E,W123E: MOVWF 23123F: MOVF 1D,W1240: MOVWF 221241: MOVF 1C,W1242: MOVWF 211243: MOVF 13,W1244: MOVWF 281245: MOVF 12,W1246: MOVWF 271247: MOVF 11,W1248: MOVWF 261249: MOVF 10,W124A: MOVWF 25124B: BCF 0A.4124C: BSF 0A.3124D: BCF 03.6124E: CALL 2AB124F: BSF 0A.41250: BCF 0A.31251: MOVF 77,W1252: BSF 03.61253: MOVWF 1C1254: MOVF 78,W1255: MOVWF 1D1256: MOVF 79,W1257: MOVWF 1E1258: MOVF 7A,W1259: MOVWF 1F125A: BCF 03.1125B: MOVF 1F,W125C: MOVWF 24125D: MOVF 1E,W125E: MOVWF 23125F: MOVF 1D,W1260: MOVWF 221261: MOVF 1C,W1262: MOVWF 211263: MOVLW 331264: MOVWF 281265: MOVLW 8C1266: MOVWF 271267: MOVLW 1E1268: MOVWF 261269: MOVLW 83126A: MOVWF 25126B: BCF 0A.4126C: BCF 03.6126D: CALL 5DC126E: BSF 0A.4126F: MOVF 7A,W1270: BSF 03.61271: MOVWF 171272: MOVF 79,W1273: MOVWF 161274: MOVF 78,W1275: MOVWF 151276: MOVF 77,W1277: MOVWF 14........................................ r = qat[0]*y*y + qat[1];1278: CLRF 241279: CLRF 23127A: CLRF 22127B: MOVLW 7F127C: MOVWF 21127D: MOVF 13,W127E: MOVWF 28127F: MOVF 12,W1280: MOVWF 271281: MOVF 11,W1282: MOVWF 261283: MOVF 10,W1284: MOVWF 251285: BCF 0A.41286: BSF 0A.31287: BCF 03.61288: CALL 2AB1289: BSF 0A.4128A: BCF 0A.3128B: MOVF 77,W128C: BSF 03.6128D: MOVWF 1C128E: MOVF 78,W128F: MOVWF 1D1290: MOVF 79,W1291: MOVWF 1E1292: MOVF 7A,W1293: MOVWF 1F1294: MOVWF 241295: MOVF 1E,W1296: MOVWF 231297: MOVF 1D,W1298: MOVWF 221299: MOVF 1C,W129A: MOVWF 21129B: MOVF 13,W129C: MOVWF 28129D: MOVF 12,W129E: MOVWF 27129F: MOVF 11,W12A0: MOVWF 2612A1: MOVF 10,W12A2: MOVWF 2512A3: BCF 0A.412A4: BSF 0A.312A5: BCF 03.612A6: CALL 2AB12A7: BSF 0A.412A8: BCF 0A.312A9: MOVF 77,W12AA: BSF 03.612AB: MOVWF 1C12AC: MOVF 78,W12AD: MOVWF 1D12AE: MOVF 79,W12AF: MOVWF 1E12B0: MOVF 7A,W12B1: MOVWF 1F12B2: BCF 03.112B3: MOVF 1F,W12B4: MOVWF 2412B5: MOVF 1E,W12B6: MOVWF 2312B7: MOVF 1D,W12B8: MOVWF 2212B9: MOVF 1C,W12BA: MOVWF 2112BB: MOVLW 1B12BC: MOVWF 2812BD: MOVLW E412BE: MOVWF 2712BF: MOVLW 3512C0: MOVWF 2612C1: MOVLW 8212C2: MOVWF 2512C3: BCF 0A.412C4: BCF 03.612C5: CALL 5DC12C6: BSF 0A.412C7: MOVF 7A,W12C8: BSF 03.612C9: MOVWF 1B12CA: MOVF 79,W12CB: MOVWF 1A12CC: MOVF 78,W12CD: MOVWF 1912CE: MOVF 77,W12CF: MOVWF 18.................... r = r*y*y + qat[2];12D0: MOVF 1B,W12D1: MOVWF 2412D2: MOVF 1A,W12D3: MOVWF 2312D4: MOVF 19,W12D5: MOVWF 2212D6: MOVF 18,W12D7: MOVWF 2112D8: MOVF 13,W12D9: MOVWF 2812DA: MOVF 12,W12DB: MOVWF 2712DC: MOVF 11,W12DD: MOVWF 2612DE: MOVF 10,W12DF: MOVWF 2512E0: BCF 0A.412E1: BSF 0A.312E2: BCF 03.612E3: CALL 2AB12E4: BSF 0A.412E5: BCF 0A.312E6: MOVF 77,W12E7: BSF 03.612E8: MOVWF 1C12E9: MOVF 78,W12EA: MOVWF 1D12EB: MOVF 79,W12EC: MOVWF 1E12ED: MOVF 7A,W12EE: MOVWF 1F12EF: MOVWF 2412F0: MOVF 1E,W12F1: MOVWF 2312F2: MOVF 1D,W12F3: MOVWF 2212F4: MOVF 1C,W12F5: MOVWF 2112F6: MOVF 13,W12F7: MOVWF 2812F8: MOVF 12,W12F9: MOVWF 2712FA: MOVF 11,W12FB: MOVWF 2612FC: MOVF 10,W12FD: MOVWF 2512FE: BCF 0A.412FF: BSF 0A.31300: BCF 03.61301: CALL 2AB1302: BSF 0A.41303: BCF 0A.31304: MOVF 77,W1305: BSF 03.61306: MOVWF 1C1307: MOVF 78,W1308: MOVWF 1D1309: MOVF 79,W130A: MOVWF 1E130B: MOVF 7A,W130C: MOVWF 1F130D: BCF 03.1130E: MOVF 1F,W130F: MOVWF 241310: MOVF 1E,W1311: MOVWF 231312: MOVF 1D,W1313: MOVWF 221314: MOVF 1C,W1315: MOVWF 211316: MOVLW A41317: MOVWF 281318: MOVLW DB1319: MOVWF 27131A: MOVLW 67131B: MOVWF 26131C: MOVLW 83131D: MOVWF 25131E: BCF 0A.4131F: BCF 03.61320: CALL 5DC1321: BSF 0A.41322: MOVF 7A,W1323: BSF 03.61324: MOVWF 1B1325: MOVF 79,W1326: MOVWF 1A1327: MOVF 78,W1328: MOVWF 191329: MOVF 77,W132A: MOVWF 18.................... r = r*y*y + qat[3];132B: MOVF 1B,W132C: MOVWF 24132D: MOVF 1A,W132E: MOVWF 23132F: MOVF 19,W1330: MOVWF 221331: MOVF 18,W1332: MOVWF 211333: MOVF 13,W1334: MOVWF 281335: MOVF 12,W1336: MOVWF 271337: MOVF 11,W1338: MOVWF 261339: MOVF 10,W133A: MOVWF 25133B: BCF 0A.4133C: BSF 0A.3133D: BCF 03.6133E: CALL 2AB133F: BSF 0A.41340: BCF 0A.31341: MOVF 77,W1342: BSF 03.61343: MOVWF 1C1344: MOVF 78,W1345: MOVWF 1D1346: MOVF 79,W1347: MOVWF 1E1348: MOVF 7A,W1349: MOVWF 1F134A: MOVWF 24134B: MOVF 1E,W134C: MOVWF 23134D: MOVF 1D,W134E: MOVWF 22134F: MOVF 1C,W1350: MOVWF 211351: MOVF 13,W1352: MOVWF 281353: MOVF 12,W1354: MOVWF 271355: MOVF 11,W1356: MOVWF 261357: MOVF 10,W1358: MOVWF 251359: BCF 0A.4135A: BSF 0A.3135B: BCF 03.6135C: CALL 2AB135D: BSF 0A.4135E: BCF 0A.3135F: MOVF 77,W1360: BSF 03.61361: MOVWF 1C1362: MOVF 78,W1363: MOVWF 1D1364: MOVF 79,W1365: MOVWF 1E1366: MOVF 7A,W1367: MOVWF 1F1368: BCF 03.11369: MOVF 1F,W136A: MOVWF 24136B: MOVF 1E,W136C: MOVWF 23136D: MOVF 1D,W136E: MOVWF 22136F: MOVF 1C,W1370: MOVWF 211371: MOVLW 331372: MOVWF 281373: MOVLW 8C1374: MOVWF 271375: MOVLW 1E1376: MOVWF 261377: MOVLW 831378: MOVWF 251379: BCF 0A.4137A: BCF 03.6137B: CALL 5DC137C: BSF 0A.4137D: MOVF 7A,W137E: BSF 03.6137F: MOVWF 1B1380: MOVF 79,W1381: MOVWF 1A1382: MOVF 78,W1383: MOVWF 191384: MOVF 77,W1385: MOVWF 18........................................ res = y*res/r;1386: MOVF 13,W1387: MOVWF 241388: MOVF 12,W1389: MOVWF 23138A: MOVF 11,W138B: MOVWF 22138C: MOVF 10,W138D: MOVWF 21138E: MOVF 17,W138F: MOVWF 281390: MOVF 16,W1391: MOVWF 271392: MOVF 15,W1393: MOVWF 261394: MOVF 14,W1395: MOVWF 251396: BCF 0A.41397: BSF 0A.31398: BCF 03.61399: CALL 2AB139A: BSF 0A.4139B: BCF 0A.3139C: MOVF 77,W139D: BSF 03.6139E: MOVWF 1C139F: MOVF 78,W13A0: MOVWF 1D13A1: MOVF 79,W13A2: MOVWF 1E13A3: MOVF 7A,W13A4: MOVWF 1F13A5: BCF 03.613A6: CLRF 2713A7: BTFSC 0B.713A8: BSF 27.713A9: BCF 0B.713AA: BSF 03.613AB: MOVF 1F,W13AC: MOVWF 5913AD: MOVF 1E,W13AE: MOVWF 5813AF: MOVF 1D,W13B0: MOVWF 5713B1: MOVF 1C,W13B2: MOVWF 5613B3: MOVF 1B,W13B4: MOVWF 5D13B5: MOVF 1A,W13B6: MOVWF 5C13B7: MOVF 19,W13B8: MOVWF 5B13B9: MOVF 18,W13BA: MOVWF 5A13BB: BCF 0A.413BC: BCF 03.613BD: CALL 05713BE: BSF 0A.413BF: BTFSC 27.713C0: BSF 0B.713C1: MOVF 7A,W13C2: BSF 03.613C3: MOVWF 1713C4: MOVF 79,W13C5: MOVWF 1613C6: MOVF 78,W13C7: MOVWF 1513C8: MOVF 77,W13C9: MOVWF 14............................................................ if (flag) // for |x| > 113CA: BSF 03.513CB: BCF 03.613CC: BTFSS 6F.113CD: GOTO 3F0.................... res = PI_DIV_BY_TWO - res;13CE: BSF 03.113CF: MOVLW DB13D0: BCF 03.513D1: BSF 03.613D2: MOVWF 2413D3: MOVLW 0F13D4: MOVWF 2313D5: MOVLW 4913D6: MOVWF 2213D7: MOVLW 7F13D8: MOVWF 2113D9: MOVF 17,W13DA: MOVWF 2813DB: MOVF 16,W13DC: MOVWF 2713DD: MOVF 15,W13DE: MOVWF 2613DF: MOVF 14,W13E0: MOVWF 2513E1: BCF 0A.413E2: BCF 03.613E3: CALL 5DC13E4: BSF 0A.413E5: MOVF 7A,W13E6: BSF 03.613E7: MOVWF 1713E8: MOVF 79,W13E9: MOVWF 1613EA: MOVF 78,W13EB: MOVWF 1513EC: MOVF 77,W13ED: MOVWF 1413EE: BSF 03.513EF: BCF 03.6.................... if (s)13F0: BTFSS 6F.013F1: GOTO 3F9.................... res = -res;13F2: BCF 03.513F3: BSF 03.613F4: MOVF 15,W13F5: XORLW 8013F6: MOVWF 1513F7: BSF 03.513F8: BCF 03.6........................................ return(res);13F9: BCF 03.513FA: BSF 03.613FB: MOVF 14,W13FC: MOVWF 7713FD: MOVF 15,W13FE: MOVWF 7813FF: MOVF 16,W1400: MOVWF 791401: MOVF 17,W1402: 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;*1563: CLRF 291564: 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*027A: BSF 28.3027B: MOVF 28,W027C: BSF 03.5027D: MOVWF 07027E: NOP027F: BCF 03.50280: BSF 28.40281: MOVF 28,W0282: BSF 03.50283: MOVWF 070284: NOP0285: BCF 03.50286: BCF 07.30287: BCF 28.30288: MOVF 28,W0289: BSF 03.5028A: MOVWF 07028B: NOP028C: BCF 03.5028D: BCF 07.4028E: BCF 28.4028F: MOVF 28,W0290: BSF 03.50291: MOVWF 07.................... i2c_write(0x80); // Device address0292: MOVLW 800293: BCF 03.50294: BSF 03.60295: MOVWF 120296: BCF 03.60297: CALL 22E.................... i2c_write(0xFE); // Device command0298: MOVLW FE0299: BSF 03.6029A: MOVWF 12029B: BCF 03.6029C: CALL 22E.................... i2c_stop(); // Stop condition029D: BCF 28.3029E: MOVF 28,W029F: BSF 03.502A0: MOVWF 0702A1: NOP02A2: BCF 03.502A3: BSF 28.402A4: MOVF 28,W02A5: BSF 03.502A6: MOVWF 0702A7: BCF 03.502A8: BTFSS 07.402A9: GOTO 2A802AA: NOP02AB: GOTO 2AC02AC: NOP02AD: BSF 28.302AE: MOVF 28,W02AF: BSF 03.502B0: MOVWF 0702B1: NOP.................... }02B2: BCF 03.502B3: BCF 0A.302B4: BSF 0A.402B5: GOTO 5B0 (RETURN)........................................ unsigned int8 SHT25_setup(unsigned int8 setup_reg ) // writes to status register and returns its value.................... {.................... unsigned int8 reg;........................................ i2c_start(); // Start condition*0317: BSF 28.30318: MOVF 28,W0319: BSF 03.5031A: MOVWF 07031B: NOP031C: BCF 03.5031D: BSF 28.4031E: MOVF 28,W031F: BSF 03.50320: MOVWF 070321: NOP0322: BCF 03.50323: BCF 07.30324: BCF 28.30325: MOVF 28,W0326: BSF 03.50327: MOVWF 070328: NOP0329: BCF 03.5032A: BCF 07.4032B: BCF 28.4032C: MOVF 28,W032D: BSF 03.5032E: MOVWF 07.................... i2c_write(SHT25_ADDR); // Device address032F: MOVLW 800330: BCF 03.50331: BSF 03.60332: MOVWF 120333: BCF 03.60334: CALL 22E.................... i2c_write(0xE7); // Device command0335: MOVLW E70336: BSF 03.60337: MOVWF 120338: BCF 03.60339: CALL 22E........................................ i2c_start(); // Start condition033A: BSF 28.3033B: MOVF 28,W033C: BSF 03.5033D: MOVWF 07033E: NOP033F: BCF 03.50340: BSF 28.40341: MOVF 28,W0342: BSF 03.50343: MOVWF 070344: NOP0345: BCF 03.50346: BTFSS 07.40347: GOTO 3460348: BCF 07.30349: BCF 28.3034A: MOVF 28,W034B: BSF 03.5034C: MOVWF 07034D: NOP034E: BCF 03.5034F: BCF 07.40350: BCF 28.40351: MOVF 28,W0352: BSF 03.50353: MOVWF 07.................... i2c_write(SHT25_ADDR+1); // Device address0354: MOVLW 810355: BCF 03.50356: BSF 03.60357: MOVWF 120358: BCF 03.60359: CALL 22E.................... reg=i2c_read(0); // Read status actual status register035A: CLRF 77035B: CALL 2B6035C: MOVF 78,W035D: BSF 03.5035E: MOVWF 5E........................................ reg = (reg & 0x3A) | setup_reg;035F: MOVF 5E,W0360: ANDLW 3A0361: IORWF 5D,W0362: MOVWF 5E........................................ i2c_start(); // Start condition0363: BCF 03.50364: BSF 28.30365: MOVF 28,W0366: BSF 03.50367: MOVWF 070368: NOP0369: BCF 03.5036A: BSF 28.4036B: MOVF 28,W036C: BSF 03.5036D: MOVWF 07036E: NOP036F: BCF 03.50370: BTFSS 07.40371: GOTO 3700372: BCF 07.30373: BCF 28.30374: MOVF 28,W0375: BSF 03.50376: MOVWF 070377: NOP0378: BCF 03.50379: BCF 07.4037A: BCF 28.4037B: MOVF 28,W037C: BSF 03.5037D: MOVWF 07.................... i2c_write(SHT25_ADDR); // Device address037E: MOVLW 80037F: BCF 03.50380: BSF 03.60381: MOVWF 120382: BCF 03.60383: CALL 22E.................... i2c_write(0xE6); // Write to status register0384: MOVLW E60385: BSF 03.60386: MOVWF 120387: BCF 03.60388: CALL 22E.................... i2c_write(reg); // Device command0389: BSF 03.5038A: MOVF 5E,W038B: BCF 03.5038C: BSF 03.6038D: MOVWF 12038E: BCF 03.6038F: CALL 22E.................... i2c_stop(); // Stop condition0390: BCF 28.30391: MOVF 28,W0392: BSF 03.50393: MOVWF 070394: NOP0395: BCF 03.50396: BSF 28.40397: MOVF 28,W0398: BSF 03.50399: MOVWF 07039A: BCF 03.5039B: BTFSS 07.4039C: GOTO 39B039D: NOP039E: GOTO 39F039F: NOP03A0: BSF 28.303A1: MOVF 28,W03A2: BSF 03.503A3: MOVWF 0703A4: NOP........................................ delay_ms(10);03A5: MOVLW 0A03A6: MOVWF 6203A7: BCF 03.503A8: CALL 303........................................ i2c_start(); // Start condition03A9: BSF 28.303AA: MOVF 28,W03AB: BSF 03.503AC: MOVWF 0703AD: NOP03AE: BCF 03.503AF: BSF 28.403B0: MOVF 28,W03B1: BSF 03.503B2: MOVWF 0703B3: NOP03B4: BCF 03.503B5: BCF 07.303B6: BCF 28.303B7: MOVF 28,W03B8: BSF 03.503B9: MOVWF 0703BA: NOP03BB: BCF 03.503BC: BCF 07.403BD: BCF 28.403BE: MOVF 28,W03BF: BSF 03.503C0: MOVWF 07.................... i2c_write(SHT25_ADDR); // Device address03C1: MOVLW 8003C2: BCF 03.503C3: BSF 03.603C4: MOVWF 1203C5: BCF 03.603C6: CALL 22E.................... i2c_write(0xE7); // Device command03C7: MOVLW E703C8: BSF 03.603C9: MOVWF 1203CA: BCF 03.603CB: CALL 22E........................................ i2c_start(); // Start condition03CC: BSF 28.303CD: MOVF 28,W03CE: BSF 03.503CF: MOVWF 0703D0: NOP03D1: BCF 03.503D2: BSF 28.403D3: MOVF 28,W03D4: BSF 03.503D5: MOVWF 0703D6: NOP03D7: BCF 03.503D8: BTFSS 07.403D9: GOTO 3D803DA: BCF 07.303DB: BCF 28.303DC: MOVF 28,W03DD: BSF 03.503DE: MOVWF 0703DF: NOP03E0: BCF 03.503E1: BCF 07.403E2: BCF 28.403E3: MOVF 28,W03E4: BSF 03.503E5: MOVWF 07.................... i2c_write(SHT25_ADDR+1); // Device address03E6: MOVLW 8103E7: BCF 03.503E8: BSF 03.603E9: MOVWF 1203EA: BCF 03.603EB: CALL 22E.................... reg=i2c_read(0); // Read status actual status register03EC: CLRF 7703ED: CALL 2B603EE: MOVF 78,W03EF: BSF 03.503F0: MOVWF 5E........................................ return (reg);03F1: MOVF 5E,W03F2: MOVWF 78.................... }03F3: BCF 03.503F4: BCF 0A.303F5: BSF 0A.403F6: GOTO 5B8 (RETURN)............................................................ float SHT25_get_temp().................... {.................... unsigned int8 MSB, LSB, Check;.................... unsigned int16 data;........................................ i2c_start();*0B22: BSF 28.30B23: MOVF 28,W0B24: BSF 03.50B25: MOVWF 070B26: NOP0B27: BCF 03.50B28: BSF 28.40B29: MOVF 28,W0B2A: BSF 03.50B2B: MOVWF 070B2C: NOP0B2D: BCF 03.50B2E: BTFSS 07.40B2F: GOTO 32E0B30: BCF 07.30B31: BCF 28.30B32: MOVF 28,W0B33: BSF 03.50B34: MOVWF 070B35: NOP0B36: BCF 03.50B37: BCF 07.40B38: BCF 28.40B39: MOVF 28,W0B3A: BSF 03.50B3B: MOVWF 07.................... I2C_Write(SHT25_ADDR);0B3C: MOVLW 800B3D: BCF 03.50B3E: BSF 03.60B3F: MOVWF 120B40: BCF 0A.30B41: BCF 03.60B42: CALL 22E0B43: BSF 0A.3.................... I2C_write(0xE3);0B44: MOVLW E30B45: BSF 03.60B46: MOVWF 120B47: BCF 0A.30B48: BCF 03.60B49: CALL 22E0B4A: BSF 0A.3.................... i2c_stop();0B4B: BCF 28.30B4C: MOVF 28,W0B4D: BSF 03.50B4E: MOVWF 070B4F: NOP0B50: BCF 03.50B51: BSF 28.40B52: MOVF 28,W0B53: BSF 03.50B54: MOVWF 070B55: BCF 03.50B56: BTFSS 07.40B57: GOTO 3560B58: NOP0B59: GOTO 35A0B5A: NOP0B5B: BSF 28.30B5C: MOVF 28,W0B5D: BSF 03.50B5E: MOVWF 070B5F: NOP........................................ delay_ms(100);0B60: MOVLW 640B61: MOVWF 620B62: BCF 0A.30B63: BCF 03.50B64: CALL 3030B65: BSF 0A.3........................................ i2c_start();0B66: BSF 28.30B67: MOVF 28,W0B68: BSF 03.50B69: MOVWF 070B6A: NOP0B6B: BCF 03.50B6C: BSF 28.40B6D: MOVF 28,W0B6E: BSF 03.50B6F: MOVWF 070B70: NOP0B71: BCF 03.50B72: BCF 07.30B73: BCF 28.30B74: MOVF 28,W0B75: BSF 03.50B76: MOVWF 070B77: NOP0B78: BCF 03.50B79: BCF 07.40B7A: BCF 28.40B7B: MOVF 28,W0B7C: BSF 03.50B7D: MOVWF 07.................... I2C_Write(SHT25_ADDR+1);0B7E: MOVLW 810B7F: BCF 03.50B80: BSF 03.60B81: MOVWF 120B82: BCF 0A.30B83: BCF 03.60B84: CALL 22E0B85: BSF 0A.3.................... MSB=i2c_read(1);0B86: MOVLW 010B87: MOVWF 770B88: BCF 0A.30B89: CALL 2B60B8A: BSF 0A.30B8B: MOVF 78,W0B8C: BSF 03.50B8D: MOVWF 5D.................... LSB=i2c_read(1);0B8E: MOVLW 010B8F: MOVWF 770B90: BCF 0A.30B91: BCF 03.50B92: CALL 2B60B93: BSF 0A.30B94: MOVF 78,W0B95: BSF 03.50B96: MOVWF 5E.................... Check=i2c_read(0);0B97: CLRF 770B98: BCF 0A.30B99: BCF 03.50B9A: CALL 2B60B9B: BSF 0A.30B9C: MOVF 78,W0B9D: BSF 03.50B9E: MOVWF 5F.................... i2c_stop();0B9F: BCF 03.50BA0: BCF 28.30BA1: MOVF 28,W0BA2: BSF 03.50BA3: MOVWF 070BA4: NOP0BA5: BCF 03.50BA6: BSF 28.40BA7: MOVF 28,W0BA8: BSF 03.50BA9: MOVWF 070BAA: BCF 03.50BAB: BTFSS 07.40BAC: GOTO 3AB0BAD: NOP0BAE: GOTO 3AF0BAF: NOP0BB0: BSF 28.30BB1: MOVF 28,W0BB2: BSF 03.50BB3: MOVWF 070BB4: NOP........................................ LSB = LSB >> 2; // trow out status bits0BB5: RRF 5E,F0BB6: RRF 5E,F0BB7: MOVLW 3F0BB8: ANDWF 5E,F........................................ data = (((unsigned int16) MSB << 8) + (LSB << 4));0BB9: CLRF 630BBA: MOVF 5D,W0BBB: MOVWF 620BBC: MOVWF 630BBD: CLRF 620BBE: SWAPF 5E,W0BBF: MOVWF 770BC0: MOVLW F00BC1: ANDWF 77,F0BC2: MOVF 77,W0BC3: ADDWF 62,W0BC4: MOVWF 600BC5: MOVF 63,W0BC6: MOVWF 610BC7: BTFSC 03.00BC8: INCF 61,F0BC9: BCF 03.50BCA: CLRF 270BCB: BTFSC 0B.70BCC: BSF 27.70BCD: BCF 0B.7.................... return(-46.85 + 175.72*((float)data/0xFFFF));0BCE: BSF 03.50BCF: MOVF 61,W0BD0: BCF 03.50BD1: BSF 03.60BD2: MOVWF 450BD3: BSF 03.50BD4: BCF 03.60BD5: MOVF 60,W0BD6: BCF 03.50BD7: BSF 03.60BD8: MOVWF 440BD9: BCF 0A.30BDA: BCF 03.60BDB: CALL 0380BDC: BSF 0A.30BDD: BTFSC 27.70BDE: BSF 0B.70BDF: MOVF 77,W0BE0: BSF 03.50BE1: MOVWF 620BE2: MOVF 78,W0BE3: MOVWF 630BE4: MOVF 79,W0BE5: MOVWF 640BE6: MOVF 7A,W0BE7: MOVWF 650BE8: BCF 03.50BE9: CLRF 270BEA: BTFSC 0B.70BEB: BSF 27.70BEC: BCF 0B.70BED: BSF 03.50BEE: MOVF 65,W0BEF: BCF 03.50BF0: BSF 03.60BF1: MOVWF 590BF2: BSF 03.50BF3: BCF 03.60BF4: MOVF 64,W0BF5: BCF 03.50BF6: BSF 03.60BF7: MOVWF 580BF8: BSF 03.50BF9: BCF 03.60BFA: MOVF 63,W0BFB: BCF 03.50BFC: BSF 03.60BFD: MOVWF 570BFE: BSF 03.50BFF: BCF 03.60C00: MOVF 62,W0C01: BCF 03.50C02: BSF 03.60C03: MOVWF 560C04: CLRF 5D0C05: MOVLW FF0C06: MOVWF 5C0C07: MOVLW 7F0C08: MOVWF 5B0C09: MOVLW 8E0C0A: MOVWF 5A0C0B: BCF 0A.30C0C: BCF 03.60C0D: CALL 0570C0E: BSF 0A.30C0F: BTFSC 27.70C10: BSF 0B.70C11: MOVLW 520C12: BSF 03.60C13: MOVWF 240C14: MOVLW B80C15: MOVWF 230C16: MOVLW 2F0C17: MOVWF 220C18: MOVLW 860C19: MOVWF 210C1A: MOVF 7A,W0C1B: MOVWF 280C1C: MOVF 79,W0C1D: MOVWF 270C1E: MOVF 78,W0C1F: MOVWF 260C20: MOVF 77,W0C21: MOVWF 250C22: BCF 03.60C23: CALL 2AB0C24: BCF 03.10C25: MOVLW 660C26: BSF 03.60C27: MOVWF 240C28: MOVWF 230C29: MOVLW BB0C2A: MOVWF 220C2B: MOVLW 840C2C: MOVWF 210C2D: MOVF 7A,W0C2E: MOVWF 280C2F: MOVF 79,W0C30: MOVWF 270C31: MOVF 78,W0C32: MOVWF 260C33: MOVF 77,W0C34: MOVWF 250C35: BCF 0A.30C36: BCF 03.60C37: CALL 5DC0C38: BSF 0A.3.................... }0C39: BCF 0A.30C3A: BSF 0A.40C3B: GOTO 611 (RETURN)........................................ float SHT25_get_hum().................... {.................... unsigned int8 MSB, LSB, Check;.................... unsigned int16 data;........................................ i2c_start(); //RH0C3C: BSF 28.30C3D: MOVF 28,W0C3E: BSF 03.50C3F: MOVWF 070C40: NOP0C41: BCF 03.50C42: BSF 28.40C43: MOVF 28,W0C44: BSF 03.50C45: MOVWF 070C46: NOP0C47: BCF 03.50C48: BCF 07.30C49: BCF 28.30C4A: MOVF 28,W0C4B: BSF 03.50C4C: MOVWF 070C4D: NOP0C4E: BCF 03.50C4F: BCF 07.40C50: BCF 28.40C51: MOVF 28,W0C52: BSF 03.50C53: MOVWF 07.................... I2C_Write(SHT25_ADDR);0C54: MOVLW 800C55: BCF 03.50C56: BSF 03.60C57: MOVWF 120C58: BCF 0A.30C59: BCF 03.60C5A: CALL 22E0C5B: BSF 0A.3.................... I2C_write(0xE5);0C5C: MOVLW E50C5D: BSF 03.60C5E: MOVWF 120C5F: BCF 0A.30C60: BCF 03.60C61: CALL 22E0C62: BSF 0A.3........................................ delay_ms(100);0C63: MOVLW 640C64: BSF 03.50C65: MOVWF 620C66: BCF 0A.30C67: BCF 03.50C68: CALL 3030C69: BSF 0A.3........................................ i2c_start();0C6A: BSF 28.30C6B: MOVF 28,W0C6C: BSF 03.50C6D: MOVWF 070C6E: NOP0C6F: BCF 03.50C70: BSF 28.40C71: MOVF 28,W0C72: BSF 03.50C73: MOVWF 070C74: NOP0C75: BCF 03.50C76: BTFSS 07.40C77: GOTO 4760C78: BCF 07.30C79: BCF 28.30C7A: MOVF 28,W0C7B: BSF 03.50C7C: MOVWF 070C7D: NOP0C7E: BCF 03.50C7F: BCF 07.40C80: BCF 28.40C81: MOVF 28,W0C82: BSF 03.50C83: MOVWF 07.................... I2C_Write(SHT25_ADDR+1);0C84: MOVLW 810C85: BCF 03.50C86: BSF 03.60C87: MOVWF 120C88: BCF 0A.30C89: BCF 03.60C8A: CALL 22E0C8B: BSF 0A.3.................... MSB=i2c_read(1);0C8C: MOVLW 010C8D: MOVWF 770C8E: BCF 0A.30C8F: CALL 2B60C90: BSF 0A.30C91: MOVF 78,W0C92: BSF 03.50C93: MOVWF 5D.................... LSB=i2c_read(1);0C94: MOVLW 010C95: MOVWF 770C96: BCF 0A.30C97: BCF 03.50C98: CALL 2B60C99: BSF 0A.30C9A: MOVF 78,W0C9B: BSF 03.50C9C: MOVWF 5E.................... Check=i2c_read(0);0C9D: CLRF 770C9E: BCF 0A.30C9F: BCF 03.50CA0: CALL 2B60CA1: BSF 0A.30CA2: MOVF 78,W0CA3: BSF 03.50CA4: MOVWF 5F.................... i2c_stop();0CA5: BCF 03.50CA6: BCF 28.30CA7: MOVF 28,W0CA8: BSF 03.50CA9: MOVWF 070CAA: NOP0CAB: BCF 03.50CAC: BSF 28.40CAD: MOVF 28,W0CAE: BSF 03.50CAF: MOVWF 070CB0: BCF 03.50CB1: BTFSS 07.40CB2: GOTO 4B10CB3: NOP0CB4: GOTO 4B50CB5: NOP0CB6: BSF 28.30CB7: MOVF 28,W0CB8: BSF 03.50CB9: MOVWF 070CBA: NOP........................................ LSB = LSB >> 2; // trow out status bits0CBB: RRF 5E,F0CBC: RRF 5E,F0CBD: MOVLW 3F0CBE: ANDWF 5E,F........................................ data = (((unsigned int16) MSB << 8) + (LSB << 4) );0CBF: CLRF 630CC0: MOVF 5D,W0CC1: MOVWF 620CC2: MOVWF 630CC3: CLRF 620CC4: SWAPF 5E,W0CC5: MOVWF 770CC6: MOVLW F00CC7: ANDWF 77,F0CC8: MOVF 77,W0CC9: ADDWF 62,W0CCA: MOVWF 600CCB: MOVF 63,W0CCC: MOVWF 610CCD: BTFSC 03.00CCE: INCF 61,F0CCF: BCF 03.50CD0: CLRF 270CD1: BTFSC 0B.70CD2: BSF 27.70CD3: BCF 0B.7.................... return( -6.0 + 125.0*((float)data/0xFFFF));0CD4: BSF 03.50CD5: MOVF 61,W0CD6: BCF 03.50CD7: BSF 03.60CD8: MOVWF 450CD9: BSF 03.50CDA: BCF 03.60CDB: MOVF 60,W0CDC: BCF 03.50CDD: BSF 03.60CDE: MOVWF 440CDF: BCF 0A.30CE0: BCF 03.60CE1: CALL 0380CE2: BSF 0A.30CE3: BTFSC 27.70CE4: BSF 0B.70CE5: MOVF 77,W0CE6: BSF 03.50CE7: MOVWF 620CE8: MOVF 78,W0CE9: MOVWF 630CEA: MOVF 79,W0CEB: MOVWF 640CEC: MOVF 7A,W0CED: MOVWF 650CEE: BCF 03.50CEF: CLRF 270CF0: BTFSC 0B.70CF1: BSF 27.70CF2: BCF 0B.70CF3: BSF 03.50CF4: MOVF 65,W0CF5: BCF 03.50CF6: BSF 03.60CF7: MOVWF 590CF8: BSF 03.50CF9: BCF 03.60CFA: MOVF 64,W0CFB: BCF 03.50CFC: BSF 03.60CFD: MOVWF 580CFE: BSF 03.50CFF: BCF 03.60D00: MOVF 63,W0D01: BCF 03.50D02: BSF 03.60D03: MOVWF 570D04: BSF 03.50D05: BCF 03.60D06: MOVF 62,W0D07: BCF 03.50D08: BSF 03.60D09: MOVWF 560D0A: CLRF 5D0D0B: MOVLW FF0D0C: MOVWF 5C0D0D: MOVLW 7F0D0E: MOVWF 5B0D0F: MOVLW 8E0D10: MOVWF 5A0D11: BCF 0A.30D12: BCF 03.60D13: CALL 0570D14: BSF 0A.30D15: BTFSC 27.70D16: BSF 0B.70D17: BSF 03.60D18: CLRF 240D19: CLRF 230D1A: MOVLW 7A0D1B: MOVWF 220D1C: MOVLW 850D1D: MOVWF 210D1E: MOVF 7A,W0D1F: MOVWF 280D20: MOVF 79,W0D21: MOVWF 270D22: MOVF 78,W0D23: MOVWF 260D24: MOVF 77,W0D25: MOVWF 250D26: BCF 03.60D27: CALL 2AB0D28: BCF 03.10D29: BSF 03.60D2A: CLRF 240D2B: CLRF 230D2C: MOVLW C00D2D: MOVWF 220D2E: MOVLW 810D2F: MOVWF 210D30: MOVF 7A,W0D31: MOVWF 280D32: MOVF 79,W0D33: MOVWF 270D34: MOVF 78,W0D35: MOVWF 260D36: MOVF 77,W0D37: MOVWF 250D38: BCF 0A.30D39: BCF 03.60D3A: CALL 5DC0D3B: BSF 0A.3.................... }0D3C: BCF 0A.30D3D: BSF 0A.40D3E: GOTO 61E (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*090A: BSF 28.3090B: MOVF 28,W090C: BSF 03.5090D: MOVWF 07090E: NOP090F: BCF 03.50910: BSF 28.40911: MOVF 28,W0912: BSF 03.50913: MOVWF 070914: NOP0915: BCF 03.50916: BCF 07.30917: BCF 28.30918: MOVF 28,W0919: BSF 03.5091A: MOVWF 07091B: NOP091C: BCF 03.5091D: BCF 07.4091E: BCF 28.4091F: MOVF 28,W0920: BSF 03.50921: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0922: MOVLW C00923: BCF 03.50924: BSF 03.60925: MOVWF 120926: BCF 0A.30927: BCF 03.60928: CALL 22E0929: BSF 0A.3.................... I2C_write(0x26);092A: MOVLW 26092B: BSF 03.6092C: MOVWF 12092D: BCF 0A.3092E: BCF 03.6092F: CALL 22E0930: BSF 0A.3.................... I2C_write(0xB8);0931: MOVLW B80932: BSF 03.60933: MOVWF 120934: BCF 0A.30935: BCF 03.60936: CALL 22E0937: BSF 0A.3.................... i2c_stop();0938: BCF 28.30939: MOVF 28,W093A: BSF 03.5093B: MOVWF 07093C: NOP093D: BCF 03.5093E: BSF 28.4093F: MOVF 28,W0940: BSF 03.50941: MOVWF 070942: BCF 03.50943: BTFSS 07.40944: GOTO 1430945: NOP0946: GOTO 1470947: NOP0948: BSF 28.30949: MOVF 28,W094A: BSF 03.5094B: MOVWF 07094C: NOP........................................ i2c_start(); //PT_DATA_CFG set094D: BCF 03.5094E: BSF 28.3094F: MOVF 28,W0950: BSF 03.50951: MOVWF 070952: NOP0953: BCF 03.50954: BSF 28.40955: MOVF 28,W0956: BSF 03.50957: MOVWF 070958: NOP0959: BCF 03.5095A: BCF 07.3095B: BCF 28.3095C: MOVF 28,W095D: BSF 03.5095E: MOVWF 07095F: NOP0960: BCF 03.50961: BCF 07.40962: BCF 28.40963: MOVF 28,W0964: BSF 03.50965: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0966: MOVLW C00967: BCF 03.50968: BSF 03.60969: MOVWF 12096A: BCF 0A.3096B: BCF 03.6096C: CALL 22E096D: BSF 0A.3.................... I2C_write(0x13);096E: MOVLW 13096F: BSF 03.60970: MOVWF 120971: BCF 0A.30972: BCF 03.60973: CALL 22E0974: BSF 0A.3.................... I2C_write(0x07); //hodnota0975: MOVLW 070976: BSF 03.60977: MOVWF 120978: BCF 0A.30979: BCF 03.6097A: CALL 22E097B: BSF 0A.3.................... i2c_stop();097C: BCF 28.3097D: MOVF 28,W097E: BSF 03.5097F: MOVWF 070980: NOP0981: BCF 03.50982: BSF 28.40983: MOVF 28,W0984: BSF 03.50985: MOVWF 070986: BCF 03.50987: BTFSS 07.40988: GOTO 1870989: NOP098A: GOTO 18B098B: NOP098C: BSF 28.3098D: MOVF 28,W098E: BSF 03.5098F: MOVWF 070990: NOP........................................ i2c_start(); //ACTIVE mode0991: BCF 03.50992: BSF 28.30993: MOVF 28,W0994: BSF 03.50995: MOVWF 070996: NOP0997: BCF 03.50998: BSF 28.40999: MOVF 28,W099A: BSF 03.5099B: MOVWF 07099C: NOP099D: BCF 03.5099E: BCF 07.3099F: BCF 28.309A0: MOVF 28,W09A1: BSF 03.509A2: MOVWF 0709A3: NOP09A4: BCF 03.509A5: BCF 07.409A6: BCF 28.409A7: MOVF 28,W09A8: BSF 03.509A9: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);09AA: MOVLW C009AB: BCF 03.509AC: BSF 03.609AD: MOVWF 1209AE: BCF 0A.309AF: BCF 03.609B0: CALL 22E09B1: BSF 0A.3.................... I2C_write(0x26);09B2: MOVLW 2609B3: BSF 03.609B4: MOVWF 1209B5: BCF 0A.309B6: BCF 03.609B7: CALL 22E09B8: BSF 0A.3.................... I2C_write(0xB9);09B9: MOVLW B909BA: BSF 03.609BB: MOVWF 1209BC: BCF 0A.309BD: BCF 03.609BE: CALL 22E09BF: BSF 0A.3.................... i2c_stop();09C0: BCF 28.309C1: MOVF 28,W09C2: BSF 03.509C3: MOVWF 0709C4: NOP09C5: BCF 03.509C6: BSF 28.409C7: MOVF 28,W09C8: BSF 03.509C9: MOVWF 0709CA: BCF 03.509CB: BTFSS 07.409CC: GOTO 1CB09CD: NOP09CE: GOTO 1CF09CF: NOP09D0: BSF 28.309D1: MOVF 28,W09D2: BSF 03.509D3: MOVWF 0709D4: NOP.................... }09D5: BCF 03.509D6: BCF 0A.309D7: BSF 0A.409D8: GOTO 5F4 (RETURN)........................................ void mpl3115_setP (void) //nastavení pro tlak.................... {............................................................ i2c_start(); //STANDBY mode*04BB: BSF 28.304BC: MOVF 28,W04BD: BSF 03.504BE: MOVWF 0704BF: NOP04C0: BCF 03.504C1: BSF 28.404C2: MOVF 28,W04C3: BSF 03.504C4: MOVWF 0704C5: NOP04C6: BCF 03.504C7: BCF 07.304C8: BCF 28.304C9: MOVF 28,W04CA: BSF 03.504CB: MOVWF 0704CC: NOP04CD: BCF 03.504CE: BCF 07.404CF: BCF 28.404D0: MOVF 28,W04D1: BSF 03.504D2: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);04D3: MOVLW C004D4: BCF 03.504D5: BSF 03.604D6: MOVWF 1204D7: BCF 03.604D8: CALL 22E.................... I2C_write(0x26);04D9: MOVLW 2604DA: BSF 03.604DB: MOVWF 1204DC: BCF 03.604DD: CALL 22E.................... I2C_write(0xB8);04DE: MOVLW B804DF: BSF 03.604E0: MOVWF 1204E1: BCF 03.604E2: CALL 22E.................... i2c_stop();04E3: BCF 28.304E4: MOVF 28,W04E5: BSF 03.504E6: MOVWF 0704E7: NOP04E8: BCF 03.504E9: BSF 28.404EA: MOVF 28,W04EB: BSF 03.504EC: MOVWF 0704ED: BCF 03.504EE: BTFSS 07.404EF: GOTO 4EE04F0: NOP04F1: GOTO 4F204F2: NOP04F3: BSF 28.304F4: MOVF 28,W04F5: BSF 03.504F6: MOVWF 0704F7: NOP........................................ i2c_start(); //PT_DATA_CFG set04F8: BCF 03.504F9: BSF 28.304FA: MOVF 28,W04FB: BSF 03.504FC: MOVWF 0704FD: NOP04FE: BCF 03.504FF: BSF 28.40500: MOVF 28,W0501: BSF 03.50502: MOVWF 070503: NOP0504: BCF 03.50505: BCF 07.30506: BCF 28.30507: MOVF 28,W0508: BSF 03.50509: MOVWF 07050A: NOP050B: BCF 03.5050C: BCF 07.4050D: BCF 28.4050E: MOVF 28,W050F: BSF 03.50510: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0511: MOVLW C00512: BCF 03.50513: BSF 03.60514: MOVWF 120515: BCF 03.60516: CALL 22E.................... I2C_write(0x13);0517: MOVLW 130518: BSF 03.60519: MOVWF 12051A: BCF 03.6051B: CALL 22E.................... I2C_write(0x07); //hodnota051C: MOVLW 07051D: BSF 03.6051E: MOVWF 12051F: BCF 03.60520: CALL 22E.................... i2c_stop();0521: BCF 28.30522: MOVF 28,W0523: BSF 03.50524: MOVWF 070525: NOP0526: BCF 03.50527: BSF 28.40528: MOVF 28,W0529: BSF 03.5052A: MOVWF 07052B: BCF 03.5052C: BTFSS 07.4052D: GOTO 52C052E: NOP052F: GOTO 5300530: NOP0531: BSF 28.30532: MOVF 28,W0533: BSF 03.50534: MOVWF 070535: NOP........................................ i2c_start(); //ACTIVE mode0536: BCF 03.50537: BSF 28.30538: MOVF 28,W0539: BSF 03.5053A: MOVWF 07053B: NOP053C: BCF 03.5053D: BSF 28.4053E: MOVF 28,W053F: BSF 03.50540: MOVWF 070541: NOP0542: BCF 03.50543: BCF 07.30544: BCF 28.30545: MOVF 28,W0546: BSF 03.50547: MOVWF 070548: NOP0549: BCF 03.5054A: BCF 07.4054B: BCF 28.4054C: MOVF 28,W054D: BSF 03.5054E: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);054F: MOVLW C00550: BCF 03.50551: BSF 03.60552: MOVWF 120553: BCF 03.60554: CALL 22E.................... I2C_write(0x26);0555: MOVLW 260556: BSF 03.60557: MOVWF 120558: BCF 03.60559: CALL 22E.................... I2C_write(0x39);055A: MOVLW 39055B: BSF 03.6055C: MOVWF 12055D: BCF 03.6055E: CALL 22E.................... i2c_stop();055F: BCF 28.30560: MOVF 28,W0561: BSF 03.50562: MOVWF 070563: NOP0564: BCF 03.50565: BSF 28.40566: MOVF 28,W0567: BSF 03.50568: MOVWF 070569: BCF 03.5056A: BTFSS 07.4056B: GOTO 56A056C: NOP056D: GOTO 56E056E: NOP056F: BSF 28.30570: MOVF 28,W0571: BSF 03.50572: MOVWF 070573: NOP.................... }0574: BCF 03.50575: BCF 0A.30576: BSF 0A.40577: GOTO 5CD (RETURN)............................................................ byte mpl3115_read (byte reg).................... {.................... byte i;........................................ i2c_start();0578: BSF 28.30579: MOVF 28,W057A: BSF 03.5057B: MOVWF 07057C: NOP057D: BCF 03.5057E: BSF 28.4057F: MOVF 28,W0580: BSF 03.50581: MOVWF 070582: NOP0583: BCF 03.50584: BCF 07.30585: BCF 28.30586: MOVF 28,W0587: BSF 03.50588: MOVWF 070589: NOP058A: BCF 03.5058B: BCF 07.4058C: BCF 28.4058D: MOVF 28,W058E: BSF 03.5058F: MOVWF 07.................... I2C_Write(MPL3115_ADDR_W);0590: MOVLW C00591: BCF 03.50592: BSF 03.60593: MOVWF 120594: BCF 03.60595: CALL 22E.................... I2C_write(reg);0596: BSF 03.60597: MOVF 10,W0598: MOVWF 120599: BCF 03.6059A: CALL 22E.................... i2c_start();059B: BSF 28.3059C: MOVF 28,W059D: BSF 03.5059E: MOVWF 07059F: NOP05A0: BCF 03.505A1: BSF 28.405A2: MOVF 28,W05A3: BSF 03.505A4: MOVWF 0705A5: NOP05A6: BCF 03.505A7: BTFSS 07.405A8: GOTO 5A705A9: BCF 07.305AA: BCF 28.305AB: MOVF 28,W05AC: BSF 03.505AD: MOVWF 0705AE: NOP05AF: BCF 03.505B0: BCF 07.405B1: BCF 28.405B2: MOVF 28,W05B3: BSF 03.505B4: MOVWF 07.................... I2C_Write(MPL3115_ADDR_R);05B5: MOVLW C105B6: BCF 03.505B7: BSF 03.605B8: MOVWF 1205B9: BCF 03.605BA: CALL 22E.................... i=i2c_read(0);05BB: CLRF 7705BC: CALL 2B605BD: MOVF 78,W05BE: BSF 03.605BF: MOVWF 11.................... i2c_stop();05C0: BCF 03.605C1: BCF 28.305C2: MOVF 28,W05C3: BSF 03.505C4: MOVWF 0705C5: NOP05C6: BCF 03.505C7: BSF 28.405C8: MOVF 28,W05C9: BSF 03.505CA: MOVWF 0705CB: BCF 03.505CC: BTFSS 07.405CD: GOTO 5CC05CE: NOP05CF: GOTO 5D005D0: NOP05D1: BSF 28.305D2: MOVF 28,W05D3: BSF 03.505D4: MOVWF 0705D5: NOP........................................ return i;05D6: BCF 03.505D7: BSF 03.605D8: MOVF 11,W05D9: MOVWF 78.................... }05DA: BCF 03.605DB: RETURN............................................................ float mpl3115_T (void) //teplota ve stupnich.................... {.................... int m;.................... float l, t;........................................ m= mpl3115_read (0x04);*0722: MOVLW 040723: BSF 03.60724: MOVWF 100725: BCF 03.60726: CALL 5780727: MOVF 78,W0728: BSF 03.50729: MOVWF 5D.................... l= (float)(mpl3115_read(0x05)>>4)/16.0;072A: MOVLW 05072B: BCF 03.5072C: BSF 03.6072D: MOVWF 10072E: BCF 03.6072F: CALL 5780730: SWAPF 78,W0731: MOVWF 770732: MOVLW 0F0733: ANDWF 77,F0734: MOVF 77,W0735: CLRF 270736: BTFSC 0B.70737: BSF 27.70738: BCF 0B.70739: BSF 03.6073A: CLRF 45073B: MOVWF 44073C: BCF 03.6073D: CALL 038073E: BTFSC 27.7073F: BSF 0B.70740: MOVF 77,W0741: BSF 03.50742: MOVWF 660743: MOVF 78,W0744: MOVWF 670745: MOVF 79,W0746: MOVWF 680747: MOVF 7A,W0748: MOVWF 690749: BCF 03.5074A: CLRF 27074B: BTFSC 0B.7074C: BSF 27.7074D: BCF 0B.7074E: BSF 03.5074F: MOVF 69,W0750: BCF 03.50751: BSF 03.60752: MOVWF 590753: BSF 03.50754: BCF 03.60755: MOVF 68,W0756: BCF 03.50757: BSF 03.60758: MOVWF 580759: BSF 03.5075A: BCF 03.6075B: MOVF 67,W075C: BCF 03.5075D: BSF 03.6075E: MOVWF 57075F: BSF 03.50760: BCF 03.60761: MOVF 66,W0762: BCF 03.50763: BSF 03.60764: MOVWF 560765: CLRF 5D0766: CLRF 5C0767: CLRF 5B0768: MOVLW 830769: MOVWF 5A076A: BCF 03.6076B: CALL 057076C: BTFSC 27.7076D: BSF 0B.7076E: MOVF 7A,W076F: BSF 03.50770: MOVWF 610771: MOVF 79,W0772: MOVWF 600773: MOVF 78,W0774: MOVWF 5F0775: MOVF 77,W0776: MOVWF 5E0777: BCF 03.50778: CLRF 270779: BTFSC 0B.7077A: BSF 27.7077B: BCF 0B.7.................... t = (float)(M + L);077C: BSF 03.6077D: CLRF 45077E: BSF 03.5077F: BCF 03.60780: MOVF 5D,W0781: BCF 03.50782: BSF 03.60783: MOVWF 440784: BCF 03.60785: CALL 0380786: BTFSC 27.70787: BSF 0B.70788: BCF 03.10789: MOVF 7A,W078A: BSF 03.6078B: MOVWF 24078C: MOVF 79,W078D: MOVWF 23078E: MOVF 78,W078F: MOVWF 220790: MOVF 77,W0791: MOVWF 210792: BSF 03.50793: BCF 03.60794: MOVF 61,W0795: BCF 03.50796: BSF 03.60797: MOVWF 280798: BSF 03.50799: BCF 03.6079A: MOVF 60,W079B: BCF 03.5079C: BSF 03.6079D: MOVWF 27079E: BSF 03.5079F: BCF 03.607A0: MOVF 5F,W07A1: BCF 03.507A2: BSF 03.607A3: MOVWF 2607A4: BSF 03.507A5: BCF 03.607A6: MOVF 5E,W07A7: BCF 03.507A8: BSF 03.607A9: MOVWF 2507AA: BCF 03.607AB: CALL 5DC07AC: MOVF 7A,W07AD: BSF 03.507AE: MOVWF 6507AF: MOVF 79,W07B0: MOVWF 6407B1: MOVF 78,W07B2: MOVWF 6307B3: MOVF 77,W07B4: MOVWF 62.................... return t;07B5: MOVF 62,W07B6: MOVWF 7707B7: MOVF 63,W07B8: MOVWF 7807B9: MOVF 64,W07BA: MOVWF 7907BB: MOVF 65,W07BC: MOVWF 7A.................... }07BD: BCF 03.507BE: BCF 0A.307BF: BSF 0A.407C0: GOTO 5DB (RETURN)........................................ float mpl3115_A (void) //vyska v m.................... {........................................ int16 m;.................... unsigned int8 c;.................... float l, a;........................................ m= mpl3115_read (0x01);*09D9: MOVLW 0109DA: BSF 03.609DB: MOVWF 1009DC: BCF 0A.309DD: BCF 03.609DE: CALL 57809DF: BSF 0A.309E0: BSF 03.509E1: CLRF 5E09E2: MOVF 78,W09E3: MOVWF 5D.................... c= mpl3115_read (0x02);09E4: MOVLW 0209E5: BCF 03.509E6: BSF 03.609E7: MOVWF 1009E8: BCF 0A.309E9: BCF 03.609EA: CALL 57809EB: BSF 0A.309EC: MOVF 78,W09ED: BSF 03.509EE: MOVWF 5F.................... l= (float)(mpl3115_read(0x03)>>4)/16.0;09EF: MOVLW 0309F0: BCF 03.509F1: BSF 03.609F2: MOVWF 1009F3: BCF 0A.309F4: BCF 03.609F5: CALL 57809F6: BSF 0A.309F7: SWAPF 78,W09F8: MOVWF 7709F9: MOVLW 0F09FA: ANDWF 77,F09FB: MOVF 77,W09FC: CLRF 2709FD: BTFSC 0B.709FE: BSF 27.709FF: BCF 0B.70A00: BSF 03.60A01: CLRF 450A02: MOVWF 440A03: BCF 0A.30A04: BCF 03.60A05: CALL 0380A06: BSF 0A.30A07: BTFSC 27.70A08: BSF 0B.70A09: MOVF 77,W0A0A: BSF 03.50A0B: MOVWF 680A0C: MOVF 78,W0A0D: MOVWF 690A0E: MOVF 79,W0A0F: MOVWF 6A0A10: MOVF 7A,W0A11: MOVWF 6B0A12: BCF 03.50A13: CLRF 270A14: BTFSC 0B.70A15: BSF 27.70A16: BCF 0B.70A17: BSF 03.50A18: MOVF 6B,W0A19: BCF 03.50A1A: BSF 03.60A1B: MOVWF 590A1C: BSF 03.50A1D: BCF 03.60A1E: MOVF 6A,W0A1F: BCF 03.50A20: BSF 03.60A21: MOVWF 580A22: BSF 03.50A23: BCF 03.60A24: MOVF 69,W0A25: BCF 03.50A26: BSF 03.60A27: MOVWF 570A28: BSF 03.50A29: BCF 03.60A2A: MOVF 68,W0A2B: BCF 03.50A2C: BSF 03.60A2D: MOVWF 560A2E: CLRF 5D0A2F: CLRF 5C0A30: CLRF 5B0A31: MOVLW 830A32: MOVWF 5A0A33: BCF 0A.30A34: BCF 03.60A35: CALL 0570A36: BSF 0A.30A37: BTFSC 27.70A38: BSF 0B.70A39: MOVF 7A,W0A3A: BSF 03.50A3B: MOVWF 630A3C: MOVF 79,W0A3D: MOVWF 620A3E: MOVF 78,W0A3F: MOVWF 610A40: MOVF 77,W0A41: MOVWF 60.................... a = (float)((m << 8)|c) + l;0A42: MOVF 5D,W0A43: MOVWF 6A0A44: CLRF 690A45: MOVF 69,W0A46: IORWF 5F,W0A47: MOVWF 770A48: MOVF 5D,W0A49: MOVWF 7A0A4A: MOVF 77,W0A4B: BCF 03.50A4C: CLRF 270A4D: BTFSC 0B.70A4E: BSF 27.70A4F: BCF 0B.70A50: BSF 03.60A51: MOVWF 440A52: MOVF 7A,W0A53: MOVWF 450A54: BCF 0A.30A55: BCF 03.60A56: CALL 0380A57: BSF 0A.30A58: BTFSC 27.70A59: BSF 0B.70A5A: MOVF 77,W0A5B: BSF 03.50A5C: MOVWF 690A5D: MOVF 78,W0A5E: MOVWF 6A0A5F: MOVF 79,W0A60: MOVWF 6B0A61: MOVF 7A,W0A62: MOVWF 6C0A63: BCF 03.10A64: MOVF 6C,W0A65: BCF 03.50A66: BSF 03.60A67: MOVWF 240A68: BSF 03.50A69: BCF 03.60A6A: MOVF 6B,W0A6B: BCF 03.50A6C: BSF 03.60A6D: MOVWF 230A6E: BSF 03.50A6F: BCF 03.60A70: MOVF 6A,W0A71: BCF 03.50A72: BSF 03.60A73: MOVWF 220A74: BSF 03.50A75: BCF 03.60A76: MOVF 69,W0A77: BCF 03.50A78: BSF 03.60A79: MOVWF 210A7A: BSF 03.50A7B: BCF 03.60A7C: MOVF 63,W0A7D: BCF 03.50A7E: BSF 03.60A7F: MOVWF 280A80: BSF 03.50A81: BCF 03.60A82: MOVF 62,W0A83: BCF 03.50A84: BSF 03.60A85: MOVWF 270A86: BSF 03.50A87: BCF 03.60A88: MOVF 61,W0A89: BCF 03.50A8A: BSF 03.60A8B: MOVWF 260A8C: BSF 03.50A8D: BCF 03.60A8E: MOVF 60,W0A8F: BCF 03.50A90: BSF 03.60A91: MOVWF 250A92: BCF 0A.30A93: BCF 03.60A94: CALL 5DC0A95: BSF 0A.30A96: MOVF 7A,W0A97: BSF 03.50A98: MOVWF 670A99: MOVF 79,W0A9A: MOVWF 660A9B: MOVF 78,W0A9C: MOVWF 650A9D: MOVF 77,W0A9E: MOVWF 64.................... return a;0A9F: MOVF 64,W0AA0: MOVWF 770AA1: MOVF 65,W0AA2: MOVWF 780AA3: MOVF 66,W0AA4: MOVWF 790AA5: MOVF 67,W0AA6: MOVWF 7A.................... }0AA7: BCF 03.50AA8: BCF 0A.30AA9: BSF 0A.40AAA: GOTO 604 (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);*0800: MOVLW 010801: BSF 03.60802: MOVWF 100803: BCF 0A.30804: BCF 03.60805: CALL 5780806: BSF 0A.30807: BSF 03.50808: CLRF 600809: CLRF 5F080A: CLRF 5E080B: MOVF 78,W080C: MOVWF 5D.................... c= mpl3115_read (0x02);080D: MOVLW 02080E: BCF 03.5080F: BSF 03.60810: MOVWF 100811: BCF 0A.30812: BCF 03.60813: CALL 5780814: BSF 0A.30815: BSF 03.50816: CLRF 620817: MOVF 78,W0818: MOVWF 61.................... l=mpl3115_read(0x03);0819: MOVLW 03081A: BCF 03.5081B: BSF 03.6081C: MOVWF 10081D: BCF 0A.3081E: BCF 03.6081F: CALL 5780820: BSF 0A.30821: MOVF 78,W0822: BSF 03.50823: MOVWF 63.................... l2=l<<2;0824: RLF 63,W0825: MOVWF 640826: RLF 64,F0827: MOVLW FC0828: ANDWF 64,F.................... l1= (float)(l>>6)/4.0;0829: SWAPF 63,W082A: MOVWF 77082B: RRF 77,F082C: RRF 77,F082D: MOVLW 03082E: ANDWF 77,F082F: MOVF 77,W0830: BCF 03.50831: CLRF 270832: BTFSC 0B.70833: BSF 27.70834: BCF 0B.70835: BSF 03.60836: CLRF 450837: MOVWF 440838: BCF 0A.30839: BCF 03.6083A: CALL 038083B: BSF 0A.3083C: BTFSC 27.7083D: BSF 0B.7083E: MOVF 77,W083F: BSF 03.60840: MOVWF 110841: MOVF 78,W0842: MOVWF 120843: MOVF 79,W0844: MOVWF 130845: MOVF 7A,W0846: MOVWF 140847: BCF 03.60848: CLRF 270849: BTFSC 0B.7084A: BSF 27.7084B: BCF 0B.7084C: BSF 03.6084D: MOVF 14,W084E: MOVWF 59084F: MOVF 13,W0850: MOVWF 580851: MOVF 12,W0852: MOVWF 570853: MOVF 11,W0854: MOVWF 560855: CLRF 5D0856: CLRF 5C0857: CLRF 5B0858: MOVLW 810859: MOVWF 5A085A: BCF 0A.3085B: BCF 03.6085C: CALL 057085D: BSF 0A.3085E: BTFSC 27.7085F: BSF 0B.70860: MOVF 7A,W0861: BSF 03.50862: MOVWF 6C0863: MOVF 79,W0864: MOVWF 6B0865: MOVF 78,W0866: MOVWF 6A0867: MOVF 77,W0868: MOVWF 69.................... p = (float)((m << 10)|(c<<2)|(l>>6)) + l1;0869: BCF 03.5086A: BSF 03.6086B: CLRF 11086C: BSF 03.5086D: BCF 03.6086E: RLF 5D,W086F: BCF 03.50870: BSF 03.60871: MOVWF 120872: BSF 03.50873: BCF 03.60874: RLF 5E,W0875: BCF 03.50876: BSF 03.60877: MOVWF 130878: BSF 03.50879: BCF 03.6087A: RLF 5F,W087B: BCF 03.5087C: BSF 03.6087D: MOVWF 14087E: RLF 12,F087F: RLF 13,F0880: RLF 14,F0881: MOVLW FC0882: ANDWF 12,F0883: BSF 03.50884: BCF 03.60885: RLF 61,W0886: MOVWF 790887: RLF 62,W0888: MOVWF 7A0889: RLF 79,F088A: RLF 7A,F088B: MOVLW FC088C: ANDWF 79,F088D: MOVF 79,W088E: BCF 03.5088F: BSF 03.60890: IORWF 11,F0891: MOVF 7A,W0892: IORWF 12,F0893: BSF 03.50894: BCF 03.60895: SWAPF 63,W0896: MOVWF 770897: RRF 77,F0898: RRF 77,F0899: MOVLW 03089A: ANDWF 77,F089B: MOVF 77,W089C: BCF 03.5089D: BSF 03.6089E: IORWF 11,W089F: MOVWF 7708A0: MOVF 12,W08A1: MOVWF 7808A2: MOVF 13,W08A3: MOVWF 7908A4: MOVF 14,W08A5: MOVWF 7A08A6: MOVF 7A,W08A7: MOVWF 1A08A8: MOVF 79,W08A9: MOVWF 1908AA: MOVF 78,W08AB: MOVWF 1808AC: MOVF 77,W08AD: MOVWF 17*08C8: MOVF 77,W08C9: MOVWF 1108CA: MOVF 78,W08CB: MOVWF 1208CC: MOVF 79,W08CD: MOVWF 1308CE: MOVF 7A,W08CF: MOVWF 1408D0: BCF 03.108D1: MOVF 14,W08D2: MOVWF 2408D3: MOVF 13,W08D4: MOVWF 2308D5: MOVF 12,W08D6: MOVWF 2208D7: MOVF 11,W08D8: MOVWF 2108D9: BSF 03.508DA: BCF 03.608DB: MOVF 6C,W08DC: BCF 03.508DD: BSF 03.608DE: MOVWF 2808DF: BSF 03.508E0: BCF 03.608E1: MOVF 6B,W08E2: BCF 03.508E3: BSF 03.608E4: MOVWF 2708E5: BSF 03.508E6: BCF 03.608E7: MOVF 6A,W08E8: BCF 03.508E9: BSF 03.608EA: MOVWF 2608EB: BSF 03.508EC: BCF 03.608ED: MOVF 69,W08EE: BCF 03.508EF: BSF 03.608F0: MOVWF 2508F1: BCF 0A.308F2: BCF 03.608F3: CALL 5DC08F4: BSF 0A.308F5: MOVF 7A,W08F6: BSF 03.508F7: MOVWF 6808F8: MOVF 79,W08F9: MOVWF 6708FA: MOVF 78,W08FB: MOVWF 6608FC: MOVF 77,W08FD: MOVWF 65........................................ return p;08FE: MOVF 65,W08FF: MOVWF 770900: MOVF 66,W0901: MOVWF 780902: MOVF 67,W0903: MOVWF 790904: MOVF 68,W0905: MOVWF 7A.................... }0906: BCF 03.50907: BCF 0A.30908: BSF 0A.40909: GOTO 5E7 (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*03F7: BSF 28.303F8: MOVF 28,W03F9: BSF 03.503FA: MOVWF 0703FB: NOP03FC: BCF 03.503FD: BSF 28.403FE: MOVF 28,W03FF: BSF 03.50400: MOVWF 070401: NOP0402: BCF 03.50403: BCF 07.30404: BCF 28.30405: MOVF 28,W0406: BSF 03.50407: MOVWF 070408: NOP0409: BCF 03.5040A: BCF 07.4040B: BCF 28.4040C: MOVF 28,W040D: BSF 03.5040E: MOVWF 07.................... I2C_Write(MAG_ADDR_W);040F: MOVLW 3C0410: BCF 03.50411: BSF 03.60412: MOVWF 120413: BCF 03.60414: CALL 22E.................... I2C_Write(0x00);0415: BSF 03.60416: CLRF 120417: BCF 03.60418: CALL 22E.................... I2C_Write(0x70);0419: MOVLW 70041A: BSF 03.6041B: MOVWF 12041C: BCF 03.6041D: CALL 22E.................... i2c_stop();041E: BCF 28.3041F: MOVF 28,W0420: BSF 03.50421: MOVWF 070422: NOP0423: BCF 03.50424: BSF 28.40425: MOVF 28,W0426: BSF 03.50427: MOVWF 070428: BCF 03.50429: BTFSS 07.4042A: GOTO 429042B: NOP042C: GOTO 42D042D: NOP042E: BSF 28.3042F: MOVF 28,W0430: BSF 03.50431: MOVWF 070432: NOP.................... Delay_ms(6);0433: MOVLW 060434: MOVWF 620435: BCF 03.50436: CALL 303........................................ i2c_start(); //nastavení Configuration Register B0437: BSF 28.30438: MOVF 28,W0439: BSF 03.5043A: MOVWF 07043B: NOP043C: BCF 03.5043D: BSF 28.4043E: MOVF 28,W043F: BSF 03.50440: MOVWF 070441: NOP0442: BCF 03.50443: BCF 07.30444: BCF 28.30445: MOVF 28,W0446: BSF 03.50447: MOVWF 070448: NOP0449: BCF 03.5044A: BCF 07.4044B: BCF 28.4044C: MOVF 28,W044D: BSF 03.5044E: MOVWF 07.................... I2C_Write(MAG_ADDR_W);044F: MOVLW 3C0450: BCF 03.50451: BSF 03.60452: MOVWF 120453: BCF 03.60454: CALL 22E.................... I2C_Write(0x01);0455: MOVLW 010456: BSF 03.60457: MOVWF 120458: BCF 03.60459: CALL 22E.................... I2C_Write(MAG_ROZ810);045A: MOVLW E0045B: BSF 03.6045C: MOVWF 12045D: BCF 03.6045E: CALL 22E.................... i2c_stop();045F: BCF 28.30460: MOVF 28,W0461: BSF 03.50462: MOVWF 070463: NOP0464: BCF 03.50465: BSF 28.40466: MOVF 28,W0467: BSF 03.50468: MOVWF 070469: BCF 03.5046A: BTFSS 07.4046B: GOTO 46A046C: NOP046D: GOTO 46E046E: NOP046F: BSF 28.30470: MOVF 28,W0471: BSF 03.50472: MOVWF 070473: NOP........................................ Delay_ms(6);0474: MOVLW 060475: MOVWF 620476: BCF 03.50477: CALL 303........................................ i2c_start(); //nastveni Mode Register0478: BSF 28.30479: MOVF 28,W047A: BSF 03.5047B: MOVWF 07047C: NOP047D: BCF 03.5047E: BSF 28.4047F: MOVF 28,W0480: BSF 03.50481: MOVWF 070482: NOP0483: BCF 03.50484: BCF 07.30485: BCF 28.30486: MOVF 28,W0487: BSF 03.50488: MOVWF 070489: NOP048A: BCF 03.5048B: BCF 07.4048C: BCF 28.4048D: MOVF 28,W048E: BSF 03.5048F: MOVWF 07.................... I2C_Write(MAG_ADDR_W);0490: MOVLW 3C0491: BCF 03.50492: BSF 03.60493: MOVWF 120494: BCF 03.60495: CALL 22E.................... I2C_Write(0x02);0496: MOVLW 020497: BSF 03.60498: MOVWF 120499: BCF 03.6049A: CALL 22E.................... I2C_Write(0x00);049B: BSF 03.6049C: CLRF 12049D: BCF 03.6049E: CALL 22E.................... i2c_stop();049F: BCF 28.304A0: MOVF 28,W04A1: BSF 03.504A2: MOVWF 0704A3: NOP04A4: BCF 03.504A5: BSF 28.404A6: MOVF 28,W04A7: BSF 03.504A8: MOVWF 0704A9: BCF 03.504AA: BTFSS 07.404AB: GOTO 4AA04AC: NOP04AD: GOTO 4AE04AE: NOP04AF: BSF 28.304B0: MOVF 28,W04B1: BSF 03.504B2: MOVWF 0704B3: NOP.................... Delay_ms(6);04B4: MOVLW 0604B5: MOVWF 6204B6: BCF 03.504B7: CALL 303.................... }04B8: BCF 0A.304B9: BSF 0A.404BA: GOTO 5C1 (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();*0D3F: BSF 28.30D40: MOVF 28,W0D41: BSF 03.50D42: MOVWF 070D43: NOP0D44: BCF 03.50D45: BSF 28.40D46: MOVF 28,W0D47: BSF 03.50D48: MOVWF 070D49: NOP0D4A: BCF 03.50D4B: BCF 07.30D4C: BCF 28.30D4D: MOVF 28,W0D4E: BSF 03.50D4F: MOVWF 070D50: NOP0D51: BCF 03.50D52: BCF 07.40D53: BCF 28.40D54: MOVF 28,W0D55: BSF 03.50D56: MOVWF 07.................... I2C_Write(MAG_ADDR_W);0D57: MOVLW 3C0D58: BCF 03.50D59: BSF 03.60D5A: MOVWF 120D5B: BCF 0A.30D5C: BCF 03.60D5D: CALL 22E0D5E: BSF 0A.3.................... I2C_write(reg);0D5F: BSF 03.50D60: MOVF 6F,W0D61: BCF 03.50D62: BSF 03.60D63: MOVWF 120D64: BCF 0A.30D65: BCF 03.60D66: CALL 22E0D67: BSF 0A.3.................... i2c_stop();0D68: BCF 28.30D69: MOVF 28,W0D6A: BSF 03.50D6B: MOVWF 070D6C: NOP0D6D: BCF 03.50D6E: BSF 28.40D6F: MOVF 28,W0D70: BSF 03.50D71: MOVWF 070D72: BCF 03.50D73: BTFSS 07.40D74: GOTO 5730D75: NOP0D76: GOTO 5770D77: NOP0D78: BSF 28.30D79: MOVF 28,W0D7A: BSF 03.50D7B: MOVWF 070D7C: NOP.................... i2c_start();0D7D: BCF 03.50D7E: BSF 28.30D7F: MOVF 28,W0D80: BSF 03.50D81: MOVWF 070D82: NOP0D83: BCF 03.50D84: BSF 28.40D85: MOVF 28,W0D86: BSF 03.50D87: MOVWF 070D88: NOP0D89: BCF 03.50D8A: BCF 07.30D8B: BCF 28.30D8C: MOVF 28,W0D8D: BSF 03.50D8E: MOVWF 070D8F: NOP0D90: BCF 03.50D91: BCF 07.40D92: BCF 28.40D93: MOVF 28,W0D94: BSF 03.50D95: MOVWF 07.................... I2C_Write(MAG_ADDR_R);0D96: MOVLW 3D0D97: BCF 03.50D98: BSF 03.60D99: MOVWF 120D9A: BCF 0A.30D9B: BCF 03.60D9C: CALL 22E0D9D: BSF 0A.3.................... reg=i2c_read(0);0D9E: CLRF 770D9F: BCF 0A.30DA0: CALL 2B60DA1: BSF 0A.30DA2: MOVF 78,W0DA3: BSF 03.50DA4: MOVWF 6F.................... return reg;0DA5: MOVF 6F,W0DA6: MOVWF 78.................... }0DA7: BCF 03.50DA8: RETURN............................................................ signed int16 mag_vypocet(unsigned int8 h, unsigned int8 l) //prepocet na 16bit cislo.................... {.................... signed int16 x;.................... x = (((unsigned int16) h << 8) + l );*07C1: BSF 03.607C2: CLRF 1407C3: BSF 03.507C4: BCF 03.607C5: MOVF 6F,W07C6: BCF 03.507C7: BSF 03.607C8: MOVWF 1307C9: MOVWF 1407CA: CLRF 1307CB: MOVF 10,W07CC: ADDWF 13,W07CD: MOVWF 1107CE: MOVF 14,W07CF: MOVWF 1207D0: BTFSC 03.007D1: INCF 12,F.................... return x;07D2: MOVF 11,W07D3: MOVWF 7807D4: MOVF 12,W07D5: MOVWF 79.................... }07D6: BCF 03.607D7: RETURN............................................................ signed int16 mag_readX(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x03);*1000: MOVLW 031001: BSF 03.51002: MOVWF 6F1003: BCF 0A.41004: BSF 0A.31005: BCF 03.51006: CALL 53F1007: BSF 0A.41008: BCF 0A.31009: MOVF 78,W100A: BSF 03.5100B: MOVWF 6B.................... l=mag_read(0x04);100C: MOVLW 04100D: MOVWF 6F100E: BCF 0A.4100F: BSF 0A.31010: BCF 03.51011: CALL 53F1012: BSF 0A.41013: BCF 0A.31014: MOVF 78,W1015: BSF 03.51016: MOVWF 6C.................... x=mag_vypocet(h,l);1017: MOVF 6B,W1018: MOVWF 6F1019: MOVF 6C,W101A: BCF 03.5101B: BSF 03.6101C: MOVWF 10101D: BCF 0A.4101E: BCF 03.6101F: CALL 7C11020: BSF 0A.41021: MOVF 79,W1022: BSF 03.51023: MOVWF 6E1024: MOVF 78,W1025: MOVWF 6D.................... return x;1026: MOVF 6D,W1027: MOVWF 781028: MOVF 6E,W1029: MOVWF 79........................................ }............................................................ signed int16 mag_readY(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x07);*102E: MOVLW 07102F: MOVWF 6F1030: BCF 0A.41031: BSF 0A.31032: BCF 03.51033: CALL 53F1034: BSF 0A.41035: BCF 0A.31036: MOVF 78,W1037: BSF 03.51038: MOVWF 6B.................... l=mag_read(0x08);1039: MOVLW 08103A: MOVWF 6F103B: BCF 0A.4103C: BSF 0A.3103D: BCF 03.5103E: CALL 53F103F: BSF 0A.41040: BCF 0A.31041: MOVF 78,W1042: BSF 03.51043: MOVWF 6C.................... x=mag_vypocet(h,l);1044: MOVF 6B,W1045: MOVWF 6F1046: MOVF 6C,W1047: BCF 03.51048: BSF 03.61049: MOVWF 10104A: BCF 0A.4104B: BCF 03.6104C: CALL 7C1104D: BSF 0A.4104E: MOVF 79,W104F: BSF 03.51050: MOVWF 6E1051: MOVF 78,W1052: MOVWF 6D.................... return x;1053: MOVF 6D,W1054: MOVWF 781055: MOVF 6E,W1056: MOVWF 79........................................ }............................................................ signed int16 mag_readZ(void) //nacteni osy x.................... {.................... unsigned int8 h,l;.................... signed int16 x;.................... h=mag_read(0x05);*105B: MOVLW 05105C: MOVWF 6F105D: BCF 0A.4105E: BSF 0A.3105F: BCF 03.51060: CALL 53F1061: BSF 0A.41062: BCF 0A.31063: MOVF 78,W1064: BSF 03.51065: MOVWF 6B.................... l=mag_read(0x06);1066: MOVLW 061067: MOVWF 6F1068: BCF 0A.41069: BSF 0A.3106A: BCF 03.5106B: CALL 53F106C: BSF 0A.4106D: BCF 0A.3106E: MOVF 78,W106F: BSF 03.51070: MOVWF 6C.................... x=mag_vypocet(h,l);1071: MOVF 6B,W1072: MOVWF 6F1073: MOVF 6C,W1074: BCF 03.51075: BSF 03.61076: MOVWF 101077: BCF 0A.41078: BCF 03.61079: CALL 7C1107A: BSF 0A.4107B: MOVF 79,W107C: BSF 03.5107D: MOVWF 6E107E: MOVF 78,W107F: MOVWF 6D.................... return x;1080: MOVF 6D,W1081: MOVWF 781082: MOVF 6E,W1083: MOVWF 79........................................ }........................................................................................................................................................................................................ 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 2C,W0124: BSF 03.60125: MOVWF 380126: BCF 03.60127: MOVF 2B,W0128: BSF 03.60129: MOVWF 37012A: CLRF 3A012B: MOVLW FF012C: MOVWF 39*0141: MOVF 79,W0142: MOVWF 380143: MOVF 78,W0144: MOVWF 370145: BCF 03.60146: MOVF 01,W0147: BSF 03.60148: ADDWF 37,F0149: BTFSC 03.0014A: INCF 38,F014B: MOVF 38,W014C: MOVWF 45014D: MOVF 37,W014E: MOVWF 44014F: BCF 03.60150: CALL 0380151: MOVF 7A,W0152: BSF 03.60153: MOVWF 590154: MOVF 79,W0155: MOVWF 580156: MOVF 78,W0157: MOVWF 570158: MOVF 77,W0159: MOVWF 56015A: MOVLW 80015B: MOVWF 5D015C: CLRF 5C015D: CLRF 5B015E: MOVLW 7E015F: MOVWF 5A0160: BCF 03.60161: CALL 0570162: MOVF 7A,W0163: MOVWF 300164: MOVF 79,W0165: MOVWF 2F0166: MOVF 78,W0167: MOVWF 2E0168: MOVF 77,W0169: MOVWF 2D.................... anemo = anemo / 2; //pocet otacek za sekundu016A: MOVF 30,W016B: BSF 03.6016C: MOVWF 59016D: BCF 03.6016E: MOVF 2F,W016F: BSF 03.60170: MOVWF 580171: BCF 03.60172: MOVF 2E,W0173: BSF 03.60174: MOVWF 570175: BCF 03.60176: MOVF 2D,W0177: BSF 03.60178: MOVWF 560179: CLRF 5D017A: CLRF 5C017B: CLRF 5B017C: MOVLW 80017D: MOVWF 5A017E: BCF 03.6017F: CALL 0570180: MOVF 7A,W0181: MOVWF 300182: MOVF 79,W0183: MOVWF 2F0184: MOVF 78,W0185: MOVWF 2E0186: MOVF 77,W0187: MOVWF 2D........................................ timer0_overflow_count=0; //nulovani0188: CLRF 2C0189: CLRF 2B.................... 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 2B,F0192: BTFSC 03.20193: INCF 2C,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();*102A: MOVF 79,W102B: MOVWF 5E102C: MOVF 78,W102D: MOVWF 5D.................... Y= mag_readY();*1057: MOVF 79,W1058: MOVWF 601059: MOVF 78,W105A: MOVWF 5F.................... Z= mag_readZ();*1084: MOVF 79,W1085: MOVWF 621086: MOVF 78,W1087: MOVWF 61........................................ float a, b;.................... a=(float)Y/X;1088: MOVF 60,W1089: BCF 03.5108A: BSF 03.6108B: MOVWF 11108C: BSF 03.5108D: BCF 03.6108E: MOVF 5F,W108F: BCF 03.51090: BSF 03.61091: MOVWF 101092: BCF 0A.41093: BCF 03.61094: CALL 7D81095: BSF 0A.41096: MOVF 77,W1097: BSF 03.51098: MOVWF 6B1099: MOVF 78,W109A: MOVWF 6C109B: MOVF 79,W109C: MOVWF 6D109D: MOVF 7A,W109E: MOVWF 6E109F: MOVF 5E,W10A0: BCF 03.510A1: BSF 03.610A2: MOVWF 1110A3: BSF 03.510A4: BCF 03.610A5: MOVF 5D,W10A6: BCF 03.510A7: BSF 03.610A8: MOVWF 1010A9: BCF 0A.410AA: BCF 03.610AB: CALL 7D810AC: BSF 0A.410AD: CLRF 2710AE: BTFSC 0B.710AF: BSF 27.710B0: BCF 0B.710B1: BSF 03.510B2: MOVF 6E,W10B3: BCF 03.510B4: BSF 03.610B5: MOVWF 5910B6: BSF 03.510B7: BCF 03.610B8: MOVF 6D,W10B9: BCF 03.510BA: BSF 03.610BB: MOVWF 5810BC: BSF 03.510BD: BCF 03.610BE: MOVF 6C,W10BF: BCF 03.510C0: BSF 03.610C1: MOVWF 5710C2: BSF 03.510C3: BCF 03.610C4: MOVF 6B,W10C5: BCF 03.510C6: BSF 03.610C7: MOVWF 5610C8: MOVF 7A,W10C9: MOVWF 5D10CA: MOVF 79,W10CB: MOVWF 5C10CC: MOVF 78,W10CD: MOVWF 5B10CE: MOVF 77,W10CF: MOVWF 5A10D0: BCF 0A.410D1: BCF 03.610D2: CALL 05710D3: BSF 0A.410D4: BTFSC 27.710D5: BSF 0B.710D6: MOVF 7A,W10D7: BSF 03.510D8: MOVWF 6610D9: MOVF 79,W10DA: MOVWF 6510DB: MOVF 78,W10DC: MOVWF 6410DD: MOVF 77,W10DE: MOVWF 63.................... b=atan(a);10DF: MOVF 66,W10E0: MOVWF 6E10E1: MOVF 65,W10E2: MOVWF 6D10E3: MOVF 64,W10E4: MOVWF 6C10E5: MOVF 63,W10E6: MOVWF 6B*1403: MOVF 7A,W1404: BSF 03.51405: BCF 03.61406: MOVWF 6A1407: MOVF 79,W1408: MOVWF 691409: MOVF 78,W140A: MOVWF 68140B: MOVF 77,W140C: MOVWF 67140D: BCF 03.5140E: CLRF 27140F: BTFSC 0B.71410: BSF 27.71411: BCF 0B.7.................... b = (b/3.14)*180;1412: BSF 03.51413: MOVF 6A,W1414: BCF 03.51415: BSF 03.61416: MOVWF 591417: BSF 03.51418: BCF 03.61419: MOVF 69,W141A: BCF 03.5141B: BSF 03.6141C: MOVWF 58141D: BSF 03.5141E: BCF 03.6141F: MOVF 68,W1420: BCF 03.51421: BSF 03.61422: MOVWF 571423: BSF 03.51424: BCF 03.61425: MOVF 67,W1426: BCF 03.51427: BSF 03.61428: MOVWF 561429: MOVLW C3142A: MOVWF 5D142B: MOVLW F5142C: MOVWF 5C142D: MOVLW 48142E: MOVWF 5B142F: MOVLW 801430: MOVWF 5A1431: BCF 0A.41432: BCF 03.61433: CALL 0571434: BSF 0A.41435: BTFSC 27.71436: BSF 0B.71437: MOVF 77,W1438: BSF 03.51439: MOVWF 6B143A: MOVF 78,W143B: MOVWF 6C143C: MOVF 79,W143D: MOVWF 6D143E: MOVF 7A,W143F: MOVWF 6E1440: BCF 03.51441: BSF 03.61442: MOVWF 241443: BSF 03.51444: BCF 03.61445: MOVF 6D,W1446: BCF 03.51447: BSF 03.61448: MOVWF 231449: BSF 03.5144A: BCF 03.6144B: MOVF 6C,W144C: BCF 03.5144D: BSF 03.6144E: MOVWF 22144F: BSF 03.51450: BCF 03.61451: MOVF 6B,W1452: BCF 03.51453: BSF 03.61454: MOVWF 211455: CLRF 281456: CLRF 271457: MOVLW 341458: MOVWF 261459: MOVLW 86145A: MOVWF 25145B: BCF 0A.4145C: BSF 0A.3145D: BCF 03.6145E: CALL 2AB145F: BSF 0A.41460: BCF 0A.31461: MOVF 7A,W1462: BSF 03.51463: MOVWF 6A1464: MOVF 79,W1465: MOVWF 691466: MOVF 78,W1467: MOVWF 681468: MOVF 77,W1469: MOVWF 67.................... b=abs(b);146A: MOVF 67,W146B: MOVWF 77146C: MOVF 68,W146D: MOVWF 78146E: MOVF 69,W146F: MOVWF 791470: MOVF 6A,W1471: MOVWF 7A1472: BCF 78.71473: MOVF 6A,W1474: MOVWF 6A1475: MOVF 69,W1476: MOVWF 691477: MOVF 78,W1478: MOVWF 681479: MOVF 67,W147A: MOVWF 67........................................ if(X==0) //osetreni proti deleni 0147B: MOVF 5D,F147C: BTFSS 03.2147D: GOTO 498147E: MOVF 5E,F147F: BTFSS 03.21480: GOTO 498.................... {.................... if(Y>0)1481: BTFSC 60.71482: GOTO 4911483: MOVF 60,F1484: BTFSS 03.21485: GOTO 48A1486: MOVF 5F,W1487: SUBLW 001488: BTFSC 03.01489: GOTO 491.................... {.................... b=90;148A: CLRF 6A148B: CLRF 69148C: MOVLW 34148D: MOVWF 68148E: MOVLW 85148F: MOVWF 67.................... }.................... else1490: GOTO 497.................... {.................... b=270;1491: CLRF 6A1492: CLRF 691493: MOVLW 071494: MOVWF 681495: MOVLW 871496: MOVWF 67.................... }.................... }.................... else1497: GOTO 532.................... {.................... if(X>0)1498: BTFSC 5E.71499: GOTO 501149A: MOVF 5E,F149B: BTFSS 03.2149C: GOTO 4A1149D: MOVF 5D,W149E: SUBLW 00149F: BTFSC 03.014A0: GOTO 501.................... {.................... if(Y>=0)14A1: BTFSC 60.714A2: GOTO 4D2.................... {.................... b=180+b;14A3: BCF 03.114A4: BCF 03.514A5: BSF 03.614A6: CLRF 2414A7: CLRF 2314A8: MOVLW 3414A9: MOVWF 2214AA: MOVLW 8614AB: MOVWF 2114AC: BSF 03.514AD: BCF 03.614AE: MOVF 6A,W14AF: BCF 03.514B0: BSF 03.614B1: MOVWF 2814B2: BSF 03.514B3: BCF 03.614B4: MOVF 69,W14B5: BCF 03.514B6: BSF 03.614B7: MOVWF 2714B8: BSF 03.514B9: BCF 03.614BA: MOVF 68,W14BB: BCF 03.514BC: BSF 03.614BD: MOVWF 2614BE: BSF 03.514BF: BCF 03.614C0: MOVF 67,W14C1: BCF 03.514C2: BSF 03.614C3: MOVWF 2514C4: BCF 0A.414C5: BCF 03.614C6: CALL 5DC14C7: BSF 0A.414C8: MOVF 7A,W14C9: BSF 03.514CA: MOVWF 6A14CB: MOVF 79,W14CC: MOVWF 6914CD: MOVF 78,W14CE: MOVWF 6814CF: MOVF 77,W14D0: MOVWF 67........................................ }.................... else14D1: GOTO 500.................... {.................... b=180-b;14D2: BSF 03.114D3: BCF 03.514D4: BSF 03.614D5: CLRF 2414D6: CLRF 2314D7: MOVLW 3414D8: MOVWF 2214D9: MOVLW 8614DA: MOVWF 2114DB: BSF 03.514DC: BCF 03.614DD: MOVF 6A,W14DE: BCF 03.514DF: BSF 03.614E0: MOVWF 2814E1: BSF 03.514E2: BCF 03.614E3: MOVF 69,W14E4: BCF 03.514E5: BSF 03.614E6: MOVWF 2714E7: BSF 03.514E8: BCF 03.614E9: MOVF 68,W14EA: BCF 03.514EB: BSF 03.614EC: MOVWF 2614ED: BSF 03.514EE: BCF 03.614EF: MOVF 67,W14F0: BCF 03.514F1: BSF 03.614F2: MOVWF 2514F3: BCF 0A.414F4: BCF 03.614F5: CALL 5DC14F6: BSF 0A.414F7: MOVF 7A,W14F8: BSF 03.514F9: MOVWF 6A14FA: MOVF 79,W14FB: MOVWF 6914FC: MOVF 78,W14FD: MOVWF 6814FE: MOVF 77,W14FF: MOVWF 67........................................ }.................... }.................... else1500: GOTO 532.................... {.................... if(Y>=0)1501: BTFSC 60.71502: GOTO 532.................... {.................... b=360-b;1503: BSF 03.11504: BCF 03.51505: BSF 03.61506: CLRF 241507: CLRF 231508: MOVLW 341509: MOVWF 22150A: MOVLW 87150B: MOVWF 21150C: BSF 03.5150D: BCF 03.6150E: MOVF 6A,W150F: BCF 03.51510: BSF 03.61511: MOVWF 281512: BSF 03.51513: BCF 03.61514: MOVF 69,W1515: BCF 03.51516: BSF 03.61517: MOVWF 271518: BSF 03.51519: BCF 03.6151A: MOVF 68,W151B: BCF 03.5151C: BSF 03.6151D: MOVWF 26151E: BSF 03.5151F: BCF 03.61520: MOVF 67,W1521: BCF 03.51522: BSF 03.61523: MOVWF 251524: BCF 0A.41525: BCF 03.61526: CALL 5DC1527: BSF 0A.41528: MOVF 7A,W1529: BSF 03.5152A: MOVWF 6A152B: MOVF 79,W152C: MOVWF 69152D: MOVF 78,W152E: MOVWF 68152F: MOVF 77,W1530: MOVWF 67........................................ }.................... else1531: GOTO 532.................... {.................... b=b;........................................ }.................... }........................................ }........................................ return b;1532: MOVF 67,W1533: MOVWF 771534: MOVF 68,W1535: MOVWF 781536: MOVF 69,W1537: MOVWF 791538: MOVF 6A,W1539: MOVWF 7A........................................ }153A: BCF 03.5153B: BCF 0A.3153C: BSF 0A.4153D: GOTO 629 (RETURN)............................................................................................................................................ void uvitani(void) // uvodni zprava.................... {.................... printf("\r\n\r\n# Meteorologicka stanice %s (C) 2013 www.mlab.cz \r\n",VERSION);.................... printf("\r\n# Autor: %s Posledni uprava: %s \r\n",AUTOR, DATE);// Welcome message.................... printf("# ver poradi ");.................... printf("altimet_t[°C] altimet_a[m] altimet_p[Pa] ");.................... printf("sht_t[°C] sht_h[%%] Anemo[m/s]check\r\n\r\n");.................... }........................................ void main().................... {153E: CLRF 04153F: BCF 03.71540: MOVLW 1F1541: ANDWF 03,F1542: MOVLW 711543: BSF 03.51544: MOVWF 0F1545: MOVF 0F,W1546: BCF 03.51547: BCF 28.71548: MOVF 28,W1549: BSF 03.5154A: MOVWF 07154B: BCF 03.5154C: BSF 07.7154D: CLRF 30154E: CLRF 2F154F: CLRF 2E1550: CLRF 2D1551: BSF 03.51552: BSF 03.61553: MOVF 09,W1554: ANDLW C01555: MOVWF 091556: BCF 03.61557: BCF 1F.41558: BCF 1F.51559: MOVLW 00155A: BSF 03.6155B: MOVWF 08155C: BCF 03.5155D: CLRF 07155E: CLRF 08155F: CLRF 09.................... setup_adc_ports(NO_ANALOGS|VSS_VDD);*1567: BSF 03.51568: BSF 03.61569: MOVF 09,W156A: ANDLW C0156B: MOVWF 09156C: BCF 03.6156D: BCF 1F.4156E: BCF 1F.5156F: MOVLW 001570: BSF 03.61571: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_2);1572: BCF 03.51573: BCF 03.61574: BCF 1F.61575: BCF 1F.71576: BSF 03.51577: BCF 1F.71578: BCF 03.51579: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);157A: BCF 14.5157B: BCF 28.5157C: MOVF 28,W157D: BSF 03.5157E: MOVWF 07157F: BCF 03.51580: BSF 28.41581: MOVF 28,W1582: BSF 03.51583: MOVWF 071584: BCF 03.51585: BCF 28.31586: MOVF 28,W1587: BSF 03.51588: MOVWF 071589: MOVLW 01158A: BCF 03.5158B: MOVWF 14158C: MOVLW 00158D: BSF 03.5158E: MOVWF 14.................... setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);158F: MOVF 01,W1590: ANDLW C71591: IORLW 281592: MOVWF 01.................... setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);1593: MOVLW 0F1594: BCF 03.51595: MOVWF 10.................... setup_timer_2(T2_DISABLED,0,1);1596: MOVLW 001597: MOVWF 781598: MOVWF 121599: MOVLW 00159A: BSF 03.5159B: MOVWF 12.................... setup_ccp1(CCP_OFF);159C: BCF 03.5159D: BSF 28.2159E: MOVF 28,W159F: BSF 03.515A0: MOVWF 0715A1: BCF 03.515A2: CLRF 1715A3: BSF 03.515A4: CLRF 1B15A5: CLRF 1C15A6: MOVLW 0115A7: MOVWF 1D.................... setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard15A8: BCF 03.515A9: BSF 03.615AA: CLRF 0715AB: CLRF 0815AC: 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 int8 sht_config;................................................................................ //nastaveni SHT25.................... SHT25_soft_reset();15AD: BCF 0A.415AE: BCF 03.615AF: GOTO 27A15B0: BSF 0A.4.................... sht_config = SHT25_RH12_T14 | SHT25_HEATER_OFF; //vypnuti topeni v SHT2515B1: CLRF 4B.................... SHT25_setup(sht_config);15B2: MOVF 4B,W15B3: BSF 03.515B4: MOVWF 5D15B5: BCF 0A.415B6: BCF 03.515B7: GOTO 31715B8: BSF 0A.4........................................ //nastavení pøeruení pro anemometr.................... enable_interrupts(INT_TIMER1);15B9: BSF 03.515BA: BSF 0C.0.................... enable_interrupts(INT_TIMER0);15BB: BCF 03.515BC: BSF 0B.5.................... enable_interrupts(GLOBAL);15BD: MOVLW C015BE: IORWF 0B,F............................................................ //uvitani();.................... set_mag(); //nastaveni magnetometru pro smer vetru15BF: BCF 0A.415C0: GOTO 3F715C1: BSF 0A.4........................................ // vynulovani promenych pro anemometr.................... set_timer0(0);15C2: CLRF 01.................... set_timer1(0);15C3: CLRF 0F15C4: CLRF 0E.................... timer0_overflow_count=0;15C5: CLRF 2C15C6: CLRF 2B.................... anemo=0;15C7: CLRF 3015C8: CLRF 2F15C9: CLRF 2E15CA: CLRF 2D................................................................................ while(TRUE).................... {........................................ char dataOUT[60];........................................ mpl3115_setP(); //nastaveni pro tlak a teplotu15CB: BCF 0A.415CC: GOTO 4BB15CD: BSF 0A.4.................... delay_ms (500);15CE: MOVLW 0215CF: MOVWF 4D15D0: MOVLW FA15D1: BSF 03.515D2: MOVWF 6215D3: BCF 0A.415D4: BCF 03.515D5: CALL 30315D6: BSF 0A.415D7: DECFSZ 4D,F15D8: GOTO 5D0.................... altimet_t=mpl3115_T();15D9: BCF 0A.415DA: GOTO 72215DB: BSF 0A.415DC: MOVF 7A,W15DD: MOVWF 3615DE: MOVF 79,W15DF: MOVWF 3515E0: MOVF 78,W15E1: MOVWF 3415E2: MOVF 77,W15E3: MOVWF 33.................... altimet_p=mpl3115_P();15E4: BCF 0A.415E5: BSF 0A.315E6: GOTO 00015E7: BSF 0A.415E8: BCF 0A.315E9: MOVF 7A,W15EA: MOVWF 3A15EB: MOVF 79,W15EC: MOVWF 3915ED: MOVF 78,W15EE: MOVWF 3815EF: MOVF 77,W15F0: MOVWF 37........................................ mpl3115_setA(); //nastaveni pro vysku a teplotu15F1: BCF 0A.415F2: BSF 0A.315F3: GOTO 10A15F4: BSF 0A.415F5: BCF 0A.3.................... delay_ms (500);15F6: MOVLW 0215F7: MOVWF 4D15F8: MOVLW FA15F9: BSF 03.515FA: MOVWF 6215FB: BCF 0A.415FC: BCF 03.515FD: CALL 30315FE: BSF 0A.415FF: DECFSZ 4D,F1600: GOTO 5F8.................... altimet_a=mpl3115_A();1601: BCF 0A.41602: BSF 0A.31603: GOTO 1D91604: BSF 0A.41605: BCF 0A.31606: MOVF 7A,W1607: MOVWF 3E1608: MOVF 79,W1609: MOVWF 3D160A: MOVF 78,W160B: MOVWF 3C160C: MOVF 77,W160D: MOVWF 3B........................................ sht25_t=SHT25_get_temp(); //mereni hodnot z SHT25160E: BCF 0A.4160F: BSF 0A.31610: GOTO 3221611: BSF 0A.41612: BCF 0A.31613: MOVF 7A,W1614: MOVWF 421615: MOVF 79,W1616: MOVWF 411617: MOVF 78,W1618: MOVWF 401619: MOVF 77,W161A: MOVWF 3F.................... sht25_h=SHT25_get_hum();161B: BCF 0A.4161C: BSF 0A.3161D: GOTO 43C161E: BSF 0A.4161F: BCF 0A.31620: MOVF 7A,W1621: MOVWF 461622: MOVF 79,W1623: MOVWF 451624: MOVF 78,W1625: MOVWF 441626: MOVF 77,W1627: MOVWF 43........................................ smer_v=azimut(); //vrati azimut aktualniho smeru vetru1628: GOTO 0001629: MOVF 7A,W162A: MOVWF 4A162B: MOVF 79,W162C: MOVWF 49162D: MOVF 78,W162E: MOVWF 48162F: MOVF 77,W1630: MOVWF 47........................................ sprintf(dataOUT, " %6.2f %7.2f %9.2f %6.2f %6.2f %5.2f %6.2f", altimet_t, altimet_a, altimet_p, sht25_t, sht25_h, smer_v, anemo);1631: CLRF 321632: MOVLW A01633: MOVWF 311634: MOVLW 201635: BSF 03.51636: MOVWF 6A1637: BCF 0A.41638: BSF 0A.31639: BCF 03.5163A: CALL 5EA163B: BSF 0A.4163C: BCF 0A.3163D: MOVLW 05163E: MOVWF 04163F: MOVF 36,W1640: BSF 03.51641: MOVWF 601642: BCF 03.51643: MOVF 35,W1644: BSF 03.51645: MOVWF 5F1646: BCF 03.51647: MOVF 34,W1648: BSF 03.51649: MOVWF 5E164A: BCF 03.5164B: MOVF 33,W164C: BSF 03.5164D: MOVWF 5D164E: MOVLW 02164F: MOVWF 611650: BCF 0A.41651: BSF 0A.31652: BCF 03.51653: CALL 6411654: BSF 0A.41655: BCF 0A.31656: MOVLW 201657: BSF 03.51658: MOVWF 6A1659: BCF 0A.4165A: BSF 0A.3165B: BCF 03.5165C: CALL 5EA165D: BSF 0A.4165E: BCF 0A.3165F: MOVLW 061660: MOVWF 041661: MOVF 3E,W1662: BSF 03.51663: MOVWF 601664: BCF 03.51665: MOVF 3D,W1666: BSF 03.51667: MOVWF 5F1668: BCF 03.51669: MOVF 3C,W166A: BSF 03.5166B: MOVWF 5E166C: BCF 03.5166D: MOVF 3B,W166E: BSF 03.5166F: MOVWF 5D1670: MOVLW 021671: MOVWF 611672: BCF 0A.41673: BSF 0A.31674: BCF 03.51675: CALL 6411676: BSF 0A.41677: BCF 0A.31678: MOVLW 201679: BSF 03.5167A: MOVWF 6A167B: BCF 0A.4167C: BSF 0A.3167D: BCF 03.5167E: CALL 5EA167F: BSF 0A.41680: BCF 0A.31681: MOVLW 081682: MOVWF 041683: MOVF 3A,W1684: BSF 03.51685: MOVWF 601686: BCF 03.51687: MOVF 39,W1688: BSF 03.51689: MOVWF 5F168A: BCF 03.5168B: MOVF 38,W168C: BSF 03.5168D: MOVWF 5E168E: BCF 03.5168F: MOVF 37,W1690: BSF 03.51691: MOVWF 5D1692: MOVLW 021693: MOVWF 611694: BCF 0A.41695: BSF 0A.31696: BCF 03.51697: CALL 6411698: BSF 0A.41699: BCF 0A.3169A: MOVLW 20169B: BSF 03.5169C: MOVWF 6A169D: BCF 0A.4169E: BSF 0A.3169F: BCF 03.516A0: CALL 5EA16A1: BSF 0A.416A2: BCF 0A.316A3: MOVLW 0516A4: MOVWF 0416A5: MOVF 42,W16A6: BSF 03.516A7: MOVWF 6016A8: BCF 03.516A9: MOVF 41,W16AA: BSF 03.516AB: MOVWF 5F16AC: BCF 03.516AD: MOVF 40,W16AE: BSF 03.516AF: MOVWF 5E16B0: BCF 03.516B1: MOVF 3F,W16B2: BSF 03.516B3: MOVWF 5D16B4: MOVLW 0216B5: MOVWF 6116B6: BCF 0A.416B7: BSF 0A.316B8: BCF 03.516B9: CALL 64116BA: BSF 0A.416BB: BCF 0A.316BC: MOVLW 2016BD: BSF 03.516BE: MOVWF 6A16BF: BCF 0A.416C0: BSF 0A.316C1: BCF 03.516C2: CALL 5EA16C3: BSF 0A.416C4: BCF 0A.316C5: MOVLW 0516C6: MOVWF 0416C7: MOVF 46,W16C8: BSF 03.516C9: MOVWF 6016CA: BCF 03.516CB: MOVF 45,W16CC: BSF 03.516CD: MOVWF 5F16CE: BCF 03.516CF: MOVF 44,W16D0: BSF 03.516D1: MOVWF 5E16D2: BCF 03.516D3: MOVF 43,W16D4: BSF 03.516D5: MOVWF 5D16D6: MOVLW 0216D7: MOVWF 6116D8: BCF 0A.416D9: BSF 0A.316DA: BCF 03.516DB: CALL 64116DC: BSF 0A.416DD: BCF 0A.316DE: MOVLW 2016DF: BSF 03.516E0: MOVWF 6A16E1: BCF 0A.416E2: BSF 0A.316E3: BCF 03.516E4: CALL 5EA16E5: BSF 0A.416E6: BCF 0A.316E7: MOVLW 0416E8: MOVWF 0416E9: MOVF 4A,W16EA: BSF 03.516EB: MOVWF 6016EC: BCF 03.516ED: MOVF 49,W16EE: BSF 03.516EF: MOVWF 5F16F0: BCF 03.516F1: MOVF 48,W16F2: BSF 03.516F3: MOVWF 5E16F4: BCF 03.516F5: MOVF 47,W16F6: BSF 03.516F7: MOVWF 5D16F8: MOVLW 0216F9: MOVWF 6116FA: BCF 0A.416FB: BSF 0A.316FC: BCF 03.516FD: CALL 64116FE: BSF 0A.416FF: BCF 0A.31700: MOVLW 201701: BSF 03.51702: MOVWF 6A1703: BCF 0A.41704: BSF 0A.31705: BCF 03.51706: CALL 5EA1707: BSF 0A.41708: BCF 0A.31709: MOVLW 05170A: MOVWF 04170B: MOVF 30,W170C: BSF 03.5170D: MOVWF 60170E: BCF 03.5170F: MOVF 2F,W1710: BSF 03.51711: MOVWF 5F1712: BCF 03.51713: MOVF 2E,W1714: BSF 03.51715: MOVWF 5E1716: BCF 03.51717: MOVF 2D,W1718: BSF 03.51719: MOVWF 5D171A: MOVLW 02171B: MOVWF 61171C: BCF 0A.4171D: BSF 0A.3171E: BCF 03.5171F: CALL 6411720: BSF 0A.41721: BCF 0A.3........................................ printf(dataOUT);1722: MOVLW A01723: MOVWF 041724: BCF 03.71725: BCF 0A.41726: BSF 0A.31727: GOTO 7561728: BSF 0A.41729: BCF 0A.3.................... int i=0;172A: CLRF 4C.................... for(i=0;i<40;i++)172B: CLRF 4C172C: MOVF 4C,W172D: SUBLW 27172E: BTFSS 03.0172F: GOTO 73D.................... {.................... delay_ms(1000);1730: MOVLW 041731: MOVWF 4D1732: MOVLW FA1733: BSF 03.51734: MOVWF 621735: BCF 0A.41736: BCF 03.51737: CALL 3031738: BSF 0A.41739: DECFSZ 4D,F173A: GOTO 732.................... }173B: INCF 4C,F173C: GOTO 72C.................... }173D: GOTO 5CB........................................ }....................173E: SLEEPConfiguration Fuses:Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40