CCS PCM C Compiler, Version 4.106, 47914 28-4-13 16:30Filename: c:\users\honza\documents\pic\azimut\main.lstROM used: 4748 words (58%)Largest free fragment is 2048RAM used: 19 (5%) at main() level82 (22%) worst caseStack: 4 locations*0000: MOVLW 110001: MOVWF 0A0002: GOTO 1DA0003: NOP.................... #include "C:\Users\Honza\Documents\pic\azimut\main.h".................... #include <16F887.h>.................... //////// Standard Header file for the PIC16F887 device ////////////////.................... #device PIC16F887.................... #list........................................ #device adc=8........................................ #FUSES NOWDT //No Watch Dog Timer.................... #FUSES INTRC //Internal RC Osc.................... #FUSES NOPUT //No Power Up Timer.................... #FUSES MCLR //Master Clear pin enabled.................... #FUSES NOPROTECT //Code not protected from reading.................... #FUSES NOCPD //No EE protection.................... #FUSES NOBROWNOUT //No brownout reset.................... #FUSES IESO //Internal External Switch Over mode enabled.................... #FUSES FCMEN //Fail-safe clock monitor enabled.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O.................... #FUSES NODEBUG //No Debug mode for ICD.................... #FUSES NOWRT //Program memory not write protected.................... #FUSES BORV40 //Brownout reset at 4.0V........................................ #use delay(clock=8000000)*01C8: MOVLW 4001C9: MOVWF 0401CA: BCF 03.701CB: MOVF 00,W01CC: BTFSC 03.201CD: GOTO 1DB01CE: MOVLW 0201CF: MOVWF 7801D0: CLRF 7701D1: DECFSZ 77,F01D2: GOTO 1D101D3: DECFSZ 78,F01D4: GOTO 1D001D5: MOVLW 9701D6: MOVWF 7701D7: DECFSZ 77,F01D8: GOTO 1D701D9: DECFSZ 00,F01DA: GOTO 1CE01DB: RETURN........................................................................................................................ #define PIN_SDA PIN_C4.................... #define PIN_SCL PIN_C3.................... #use i2c(master, sda=PIN_SDA, scl=PIN_SCL)*0143: MOVLW 080144: MOVWF 780145: NOP0146: BCF 07.30147: BCF 20.30148: MOVF 20,W0149: BSF 03.5014A: MOVWF 07014B: NOP014C: BCF 03.5014D: RLF 4E,F014E: BCF 07.4014F: BTFSS 03.00150: GOTO 1570151: BSF 20.40152: MOVF 20,W0153: BSF 03.50154: MOVWF 070155: GOTO 15B0156: BCF 03.50157: BCF 20.40158: MOVF 20,W0159: BSF 03.5015A: MOVWF 07015B: NOP015C: BCF 03.5015D: BSF 20.3015E: MOVF 20,W015F: BSF 03.50160: MOVWF 070161: BCF 03.50162: BTFSS 07.30163: GOTO 1620164: DECFSZ 78,F0165: GOTO 1450166: NOP0167: BCF 07.30168: BCF 20.30169: MOVF 20,W016A: BSF 03.5016B: MOVWF 07016C: NOP016D: BCF 03.5016E: BSF 20.4016F: MOVF 20,W0170: BSF 03.50171: MOVWF 070172: NOP0173: NOP0174: BCF 03.50175: BSF 20.30176: MOVF 20,W0177: BSF 03.50178: MOVWF 070179: BCF 03.5017A: BTFSS 07.3017B: GOTO 17A017C: CLRF 78017D: NOP017E: BTFSC 07.4017F: BSF 78.00180: BCF 07.30181: BCF 20.30182: MOVF 20,W0183: BSF 03.50184: MOVWF 070185: BCF 03.50186: BCF 07.40187: BCF 20.40188: MOVF 20,W0189: BSF 03.5018A: MOVWF 07018B: BCF 03.5018C: RETURN*028D: MOVLW 08028E: MOVWF 4F028F: MOVF 77,W0290: MOVWF 500291: BSF 20.40292: MOVF 20,W0293: BSF 03.50294: MOVWF 070295: NOP0296: BCF 03.50297: BSF 20.30298: MOVF 20,W0299: BSF 03.5029A: MOVWF 07029B: BCF 03.5029C: BTFSS 07.3029D: GOTO 29C029E: BTFSC 07.4029F: BSF 03.002A0: BTFSS 07.402A1: BCF 03.002A2: RLF 78,F02A3: NOP02A4: BCF 20.302A5: MOVF 20,W02A6: BSF 03.502A7: MOVWF 0702A8: BCF 03.502A9: BCF 07.302AA: DECFSZ 4F,F02AB: GOTO 29102AC: BSF 20.402AD: MOVF 20,W02AE: BSF 03.502AF: MOVWF 0702B0: NOP02B1: BCF 03.502B2: BCF 07.402B3: MOVF 50,W02B4: BTFSC 03.202B5: GOTO 2BB02B6: BCF 20.402B7: MOVF 20,W02B8: BSF 03.502B9: MOVWF 0702BA: BCF 03.502BB: NOP02BC: BSF 20.302BD: MOVF 20,W02BE: BSF 03.502BF: MOVWF 0702C0: BCF 03.502C1: BTFSS 07.302C2: GOTO 2C102C3: NOP02C4: BCF 07.302C5: BCF 20.302C6: MOVF 20,W02C7: BSF 03.502C8: MOVWF 0702C9: NOP02CA: BCF 03.502CB: BCF 07.402CC: BCF 20.402CD: MOVF 20,W02CE: BSF 03.502CF: MOVWF 0702D0: BCF 03.502D1: RETURN.................... #use rs232(baud=9600,parity=N,xmit=PIN_C7,rcv=PIN_C6,bits=8) //rcv TXD xmit RXD*00B6: BCF 20.700B7: MOVF 20,W00B8: BSF 03.500B9: MOVWF 0700BA: BCF 03.500BB: BCF 07.700BC: MOVLW 0800BD: MOVWF 7800BE: GOTO 0BF00BF: NOP00C0: BSF 78.700C1: GOTO 0D000C2: BCF 78.700C3: RRF 55,F00C4: BTFSC 03.000C5: BSF 07.700C6: BTFSS 03.000C7: BCF 07.700C8: BSF 78.600C9: GOTO 0D000CA: BCF 78.600CB: DECFSZ 78,F00CC: GOTO 0C300CD: GOTO 0CE00CE: NOP00CF: BSF 07.700D0: MOVLW 3F00D1: MOVWF 0400D2: DECFSZ 04,F00D3: GOTO 0D200D4: NOP00D5: BTFSC 78.700D6: GOTO 0C200D7: BTFSC 78.600D8: GOTO 0CA00D9: RETURN.................... #include <math.h>.................... ////////////////////////////////////////////////////////////////////////////.................... //// (C) Copyright 1996,2008 Custom Computer Services ////.................... //// This source code may only be used by licensed users of the CCS C ////.................... //// compiler. This source code may only be distributed to other ////.................... //// licensed users of the CCS C compiler. No other use, reproduction ////.................... //// or distribution is permitted without written permission. ////.................... //// Derivative programs created using this software in object code ////.................... //// form are not restricted in any way. ////.................... ////////////////////////////////////////////////////////////////////////////.................... //// ////.................... //// History: ////.................... //// * 9/20/2001 : Improvments are made to sin/cos code. ////.................... //// The code now is small, much faster, ////.................... //// and more accurate. ////.................... //// * 2/21/2007 : Compiler handles & operator differently and does.................... //// not return generic (int8 *) so type cast is done ////.................... //// ////.................... ////////////////////////////////////////////////////////////////////////////........................................ #ifndef MATH_H.................... #define MATH_H........................................ #ifdef PI.................... #undef PI.................... #endif.................... #define PI 3.1415926535897932............................................................ #define SQRT2 1.4142135623730950........................................ //float const ps[4] = {5.9304945, 21.125224, 8.9403076, 0.29730279};.................... //float const qs[4] = {1.0000000, 15.035723, 17.764134, 2.4934718};........................................ ///////////////////////////// Round Functions //////////////////////////////........................................ float32 CEIL_FLOOR(float32 x, unsigned int8 n).................... {.................... float32 y, res;.................... unsigned int16 l;.................... int1 s;........................................ s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y <= 32768.0).................... res = (float32)(unsigned int16)y;........................................ else if (y < 10000000.0).................... {.................... l = (unsigned int16)(y/32768.0);.................... y = 32768.0*(y/32768.0 - (float32)l);.................... res = 32768.0*(float32)l;.................... res += (float32)(unsigned int16)y;.................... }........................................ else.................... res = y;........................................ y = y - (float32)(unsigned int16)y;........................................ if (s).................... res = -res;........................................ if (y != 0).................... {.................... if (s == 1 && n == 0).................... res -= 1.0;........................................ if (s == 0 && n == 1).................... res += 1.0;.................... }.................... if (x == 0).................... res = 0;........................................ return (res);.................... }........................................ // Overloaded Functions to take care for new Data types in PCD.................... // Overloaded function CEIL_FLOOR() for data type - Float48.................... #if defined(__PCD__).................... float48 CEIL_FLOOR(float48 x, unsigned int8 n).................... {.................... float48 y, res;.................... unsigned int16 l;.................... int1 s;........................................ s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y <= 32768.0).................... res = (float48)(unsigned int16)y;........................................ else if (y < 10000000.0).................... {.................... l = (unsigned int16)(y/32768.0);.................... y = 32768.0*(y/32768.0 - (float48)l);.................... res = 32768.0*(float32)l;.................... res += (float48)(unsigned int16)y;.................... }........................................ else.................... res = y;........................................ y = y - (float48)(unsigned int16)y;........................................ if (s).................... res = -res;........................................ if (y != 0).................... {.................... if (s == 1 && n == 0).................... res -= 1.0;........................................ if (s == 0 && n == 1).................... res += 1.0;.................... }.................... if (x == 0).................... res = 0;........................................ return (res);.................... }............................................................ // Overloaded function CEIL_FLOOR() for data type - Float64.................... float64 CEIL_FLOOR(float64 x, unsigned int8 n).................... {.................... float64 y, res;.................... unsigned int16 l;.................... int1 s;........................................ s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y <= 32768.0).................... res = (float64)(unsigned int16)y;........................................ else if (y < 10000000.0).................... {.................... l = (unsigned int16)(y/32768.0);.................... y = 32768.0*(y/32768.0 - (float64)l);.................... res = 32768.0*(float64)l;.................... res += (float64)(unsigned int16)y;.................... }........................................ else.................... res = y;........................................ y = y - (float64)(unsigned int16)y;........................................ if (s).................... res = -res;........................................ if (y != 0).................... {.................... if (s == 1 && n == 0).................... res -= 1.0;........................................ if (s == 0 && n == 1).................... res += 1.0;.................... }.................... if (x == 0).................... res = 0;........................................ return (res);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float floor(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : rounds down the number x..................... // Date : N/A.................... //.................... float32 floor(float32 x).................... {.................... return CEIL_FLOOR(x, 0);.................... }.................... // Following 2 functions are overloaded functions of floor() for PCD.................... // Overloaded function floor() for data type - Float48.................... #if defined(__PCD__).................... float48 floor(float48 x).................... {.................... return CEIL_FLOOR(x, 0);.................... }........................................ // Overloaded function floor() for data type - Float64.................... float64 floor(float64 x).................... {.................... return CEIL_FLOOR(x, 0);.................... }.................... #endif............................................................ ////////////////////////////////////////////////////////////////////////////.................... // float ceil(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : rounds up the number x..................... // Date : N/A.................... //.................... float32 ceil(float32 x).................... {.................... return CEIL_FLOOR(x, 1);.................... }.................... // Following 2 functions are overloaded functions of ceil() for PCD.................... // Overloaded function ceil() for data type - Float48.................... #if defined(__PCD__).................... float48 ceil(float48 x).................... {.................... return CEIL_FLOOR(x, 1);.................... }........................................ // Overloaded function ceil() for data type - Float64.................... float64 ceil(float64 x).................... {.................... return CEIL_FLOOR(x, 1);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float fabs(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the absolute value of floating point number x.................... // Returns : returns the absolute value of x.................... // Date : N/A.................... //.................... #define fabs abs........................................ ////////////////////////////////////////////////////////////////////////////.................... // float fmod(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the floating point remainder of x/y.................... // Returns : returns the value of x= i*y, for some integer i such that, if y.................... // is non zero, the result has the same isgn of x na dmagnitude less than the.................... // magnitude of y. If y is zero then a domain error occurs..................... // Date : N/A.................... //........................................ float fmod(float32 x,float32 y).................... {.................... float32 i;.................... if (y!=0.0).................... {.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y);.................... return(x-(i*y));.................... }.................... else.................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... }.................... //Overloaded function for fmod() for PCD.................... // Overloaded function fmod() for data type - Float48.................... #if defined(__PCD__).................... float48 fmod(float48 x,float48 y).................... {.................... float48 i;.................... if (y!=0.0).................... {.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y);.................... return(x-(i*y));.................... }.................... else.................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... }.................... // Overloaded function fmod() for data type - Float64.................... float64 fmod(float64 x,float64 y).................... {.................... float64 i;.................... if (y!=0.0).................... {.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y);.................... return(x-(i*y));.................... }.................... else.................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... }.................... #endif.................... //////////////////// Exponential and logarithmic functions ////////////////////.................... ////////////////////////////////////////////////////////////////////////////.................... // float exp(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the value (e^x).................... // Date : N/A.................... //.................... #define LN2 0.6931471805599453........................................ float const pe[6] = {0.000207455774, 0.00127100575, 0.00965065093,.................... 0.0554965651, 0.240227138, 0.693147172};............................................................ float32 exp(float32 x).................... {.................... float32 y, res, r;.................... #if defined(__PCD__).................... int8 data1;.................... #endif.................... signed int8 n;.................... int1 s;.................... #ifdef _ERRNO.................... if(x > 88.722838).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... n = (signed int16)(x/LN2);.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... n = -n;.................... y = -y;.................... }........................................ res = 0.0;.................... #if !defined(__PCD__).................... *((unsigned int8 *)(&res)) = n + 0x7F;.................... #endif........................................ #if defined(__PCD__) // Takes care of IEEE format for PCD.................... data1 = n+0x7F;.................... if(bit_test(data1,0)).................... bit_set(*(((unsigned int8 *)(&res)+2)),7);.................... rotate_right(&data1,1);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&res)+3)) = data1;.................... #endif........................................ y = y/LN2 - (float32)n;........................................ r = pe[0]*y + pe[1];.................... r = r*y + pe[2];.................... r = r*y + pe[3];.................... r = r*y + pe[4];.................... r = r*y + pe[5];........................................ res = res*(1.0 + y*r);........................................ if (s).................... res = 1.0/res;.................... return(res);.................... }............................................................ //Overloaded function for exp() for PCD.................... // Overloaded function exp() for data type - Float48.................... #if defined(__PCD__).................... float48 exp(float48 x).................... {.................... float48 y, res, r;.................... int8 data1;.................... signed int8 n;.................... int1 s;.................... #ifdef _ERRNO.................... if(x > 88.722838).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... n = (signed int16)(x/LN2);.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... n = -n;.................... y = -y;.................... }........................................ res = 0.0;........................................ data1 = n+0x7F;.................... if(bit_test(data1,0)).................... bit_set(*(((unsigned int8 *)(&res)+4)),7);.................... rotate_right(&data1,1);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&res)+5)) = data1;........................................ y = y/LN2 - (float48)n;........................................ r = pe[0]*y + pe[1];.................... r = r*y + pe[2];.................... r = r*y + pe[3];.................... r = r*y + pe[4];.................... r = r*y + pe[5];........................................ res = res*(1.0 + y*r);........................................ if (s).................... res = 1.0/res;.................... return(res);.................... }........................................ // Overloaded function exp() for data type - Float64.................... float64 exp(float64 x).................... {.................... float64 y, res, r;.................... unsigned int16 data1, data2;.................... unsigned int16 *p;.................... signed int16 n;.................... int1 s;.................... #ifdef _ERRNO.................... if(x > 709.7827128).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... n = (signed int16)(x/LN2);.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... n = -n;.................... y = -y;.................... }........................................ res = 0.0;........................................ #if !defined(__PCD__).................... *((unsigned int16 *)(&res)) = n + 0x7F;.................... #endif.................... p= (((unsigned int16 *)(&res))+3);.................... data1 = *p;.................... data2 = *p;.................... data1 = n + 0x3FF;.................... data1 = data1 <<4;.................... if(bit_test(data2,15)).................... bit_set(data1,15);.................... data2 = data2 & 0x000F;.................... data1 ^= data2;........................................ *(((unsigned int16 *)(&res)+3)) = data1;............................................................ y = y/LN2 - (float64)n;........................................ r = pe[0]*y + pe[1];.................... r = r*y + pe[2];.................... r = r*y + pe[3];.................... r = r*y + pe[4];.................... r = r*y + pe[5];........................................ res = res*(1.0 + y*r);........................................ if (s).................... res = 1.0/res;.................... return(res);.................... }........................................ #ENDIF............................................................ /************************************************************/........................................ float32 const pl[4] = {0.45145214, -9.0558803, 26.940971, -19.860189};.................... float32 const ql[4] = {1.0000000, -8.1354259, 16.780517, -9.9300943};........................................ ////////////////////////////////////////////////////////////////////////////.................... // float log(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the the natural log of x.................... // Date : N/A.................... //.................... float32 log(float32 x).................... {.................... float32 y, res, r, y2;.................... #if defined(__PCD__).................... unsigned int8 data1,data2;.................... #endif.................... signed int8 n;.................... #ifdef _ERRNO.................... if(x <0).................... {.................... errno=EDOM;.................... }.................... if(x ==0).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... y = x;........................................ if (y != 1.0).................... {.................... #if !defined(__PCD__).................... *((unsigned int8 *)(&y)) = 0x7E;.................... #endif........................................ #if defined(__PCD__) // Takes care of IEEE format.................... data2 = *(((unsigned int8 *)(&y))+3);.................... *(((unsigned int8 *)(&y))+3) = 0x3F;.................... data1 = *(((unsigned int8 *)(&y))+2);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&y))+2) = data1;.................... if(bit_test(data2,7)).................... bit_set(*(((unsigned int8 *)(&y))+3),7);.................... #endif........................................ y = (y - 1.0)/(y + 1.0);........................................ y2=y*y;........................................ res = pl[0]*y2 + pl[1];.................... res = res*y2 + pl[2];.................... res = res*y2 + pl[3];........................................ r = ql[0]*y2 + ql[1];.................... r = r*y2 + ql[2];.................... r = r*y2 + ql[3];........................................ res = y*res/r;.................... #if !defined(__PCD__).................... n = *((unsigned int8 *)(&x)) - 0x7E;.................... #endif.................... #if defined(__PCD__).................... data1 = *(((unsigned int8 *)(&x)+3));.................... rotate_left(&data1,1);.................... data2 = *(((unsigned int8 *)(&x)+2));.................... if(bit_test (data2,7)).................... bit_set(data1,0);.................... n = data1 - 0x7E;.................... #endif........................................ if (n<0).................... r = -(float32)-n;.................... else.................... r = (float32)n;........................................ res += r*LN2;.................... }........................................ else.................... res = 0.0;........................................ return(res);.................... }........................................ //Overloaded function for log() for PCD.................... // Overloaded function log() for data type - Float48.................... #if defined(__PCD__).................... float48 log(float48 x).................... {.................... float48 y, res, r, y2;.................... unsigned int8 data1,data2;.................... signed int8 n;.................... #ifdef _ERRNO.................... if(x <0).................... {.................... errno=EDOM;.................... }.................... if(x ==0).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... y = x;........................................ if (y != 1.0).................... {........................................ #if !defined(__PCD__).................... *((unsigned int8 *)(&y)) = 0x7E;.................... #endif.................... data2 = *(((unsigned int8 *)(&y))+5);.................... *(((unsigned int8 *)(&y))+5) = 0x3F;.................... data1 = *(((unsigned int8 *)(&y))+4);.................... bit_clear(data1,7);.................... *(((unsigned int8 *)(&y))+4) = data1;........................................ if(bit_test(data2,7)).................... bit_set(*(((unsigned int8 *)(&y))+4),7);.................... y = (y - 1.0)/(y + 1.0);........................................ y2=y*y;........................................ res = pl[0]*y2 + pl[1];.................... res = res*y2 + pl[2];.................... res = res*y2 + pl[3];........................................ r = ql[0]*y2 + ql[1];.................... r = r*y2 + ql[2];.................... r = r*y2 + ql[3];........................................ res = y*res/r;........................................ data1 = *(((unsigned int8 *)(&x)+5));.................... rotate_left(&data1,1);.................... data2 = *(((unsigned int8 *)(&x)+4));.................... if(bit_test (data2,7)).................... bit_set(data1,0);........................................ n = data1 - 0x7E;........................................ if (n<0).................... r = -(float48)-n;.................... else.................... r = (float48)n;........................................ res += r*LN2;.................... }........................................ else.................... res = 0.0;........................................ return(res);.................... }........................................ // Overloaded function log() for data type - Float48.................... #if defined(__PCD__).................... float32 const pl_64[4] = {0.45145214, -9.0558803, 26.940971, -19.860189};.................... float32 const ql_64[4] = {1.0000000, -8.1354259, 16.780517, -9.9300943};.................... #endif.................... float64 log(float64 x).................... {.................... float64 y, res, r, y2;.................... unsigned int16 data1,data2;.................... unsigned int16 *p;.................... signed int16 n;.................... #ifdef _ERRNO.................... if(x <0).................... {.................... errno=EDOM;.................... }.................... if(x ==0).................... {.................... errno=ERANGE;.................... return(0);.................... }.................... #endif.................... y = x;........................................ if (y != 1.0).................... {.................... #if !defined(__PCD__).................... *((unsigned int8 *)(&y)) = 0x7E;.................... #endif.................... p= (((unsigned int16 *)(&y))+3);.................... data1 = *p;.................... data2 = *p;.................... data1 = 0x3FE;.................... data1 = data1 <<4;.................... if(bit_test (data2,15)).................... bit_set(data1,15);.................... data2 = data2 & 0x000F;.................... data1 ^=data2;........................................ *p = data1;........................................ y = (y - 1.0)/(y + 1.0);........................................ y2=y*y;........................................ res = pl_64[0]*y2 + pl_64[1];.................... res = res*y2 + pl_64[2];.................... res = res*y2 + pl_64[3];........................................ r = ql_64[0]*y2 + ql_64[1];.................... r = r*y2 + ql_64[2];.................... r = r*y2 + ql_64[3];........................................ res = y*res/r;........................................ p= (((unsigned int16 *)(&x))+3);.................... data1 = *p;.................... bit_clear(data1,15);.................... data1 = data1 >>4;.................... n = data1 - 0x3FE;............................................................ if (n<0).................... r = -(float64)-n;.................... else.................... r = (float64)n;........................................ res += r*LN2;.................... }........................................ else.................... res = 0.0;........................................ return(res);.................... }.................... #endif............................................................ #define LN10 2.3025850929940456........................................ ////////////////////////////////////////////////////////////////////////////.................... // float log10(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the the log base 10 of x.................... // Date : N/A.................... //.................... float32 log10(float32 x).................... {.................... float32 r;........................................ r = log(x);.................... r = r/LN10;.................... return(r);.................... }........................................ //Overloaded functions for log10() for PCD.................... // Overloaded function log10() for data type - Float48.................... #if defined(__PCD__).................... float48 log10(float48 x).................... {.................... float48 r;........................................ r = log(x);.................... r = r/LN10;.................... return(r);.................... }........................................ // Overloaded function log10() for data type - Float64.................... float64 log10(float64 x).................... {.................... float64 r;........................................ r = log(x);.................... r = r/LN10;.................... return(r);.................... }.................... #endif.................... ////////////////////////////////////////////////////////////////////////////.................... // float modf(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description :breaks the argument value int integral and fractional parts,.................... // ach of which have the same sign as the argument. It stores the integral part.................... // as a float in the object pointed to by the iptr.................... // Returns : returns the signed fractional part of value..................... // Date : N/A.................... //........................................ float32 modf(float32 value,float32 *iptr).................... {.................... *iptr=(value < 0.0)? ceil(value): floor(value);.................... return(value - *iptr);.................... }.................... //Overloaded functions for modf() for PCD.................... // Overloaded function modf() for data type - Float48.................... #if defined(__PCD__).................... float48 modf(float48 value,float48 *iptr).................... {.................... *iptr=(value < 0.0)? ceil(value): floor(value);.................... return(value - *iptr);.................... }.................... // Overloaded function modf() for data type - Float64.................... float64 modf(float64 value,float64 *iptr).................... {.................... *iptr=(value < 0.0)? ceil(value): floor(value);.................... return(value - *iptr);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float pwr(float x,float y).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the value (x^y).................... // Date : N/A.................... // Note : 0 is returned when the function will generate an imaginary number.................... //.................... float32 pwr(float32 x,float32 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... //Overloaded functions for pwr() for PCD.................... // Overloaded function pwr() for data type - Float48.................... #if defined(__PCD__).................... float48 pwr(float48 x,float48 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... // Overloaded function pwr() for data type - Float64.................... float64 pwr(float64 x,float64 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... #endif........................................ //////////////////// Power functions ////////////////////........................................ ////////////////////////////////////////////////////////////////////////////.................... // float pow(float x,float y).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the value (x^y).................... // Date : N/A.................... // Note : 0 is returned when the function will generate an imaginary number.................... //.................... float32 pow(float32 x,float32 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... //Overloaded functions for pow() for PCD.................... // Overloaded function for pow() data type - Float48.................... #if defined(__PCD__).................... float48 pow(float48 x,float48 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }........................................ // Overloaded function pow() for data type - Float64.................... float64 pow(float64 x,float64 y).................... {.................... if(0 > x && fmod(y, 1) == 0) {.................... if(fmod(y, 2) == 0) {.................... return (exp(log(-x) * y));.................... } else {.................... return (-exp(log(-x) * y));.................... }.................... } else if(0 > x && fmod(y, 1) != 0) {.................... return 0;.................... } else {.................... if(x != 0 || 0 >= y) {.................... return (exp(log(x) * y));.................... }.................... }.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float sqrt(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the square root of x.................... // Date : N/A.................... //.................... float32 sqrt(float32 x).................... {.................... float32 y, res;.................... #if defined(__PCD__).................... unsigned int16 data1,data2;.................... #endif.................... BYTE *p;........................................ #ifdef _ERRNO.................... if(x < 0).................... {.................... errno=EDOM;.................... }.................... #endif........................................ if( x<=0.0).................... return(0.0);........................................ y=x;........................................ #if !defined(__PCD__).................... p=&y;.................... (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1);.................... #endif........................................ #if defined(__PCD__).................... p = (((unsigned int8 *)(&y))+3);.................... data1 = *(((unsigned int8 *)(&y))+3);.................... data2 = *(((unsigned int8 *)(&y))+2);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1 = ((data1+127) >>1);.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+3) = data1;.................... *(((unsigned int8 *)(&y))+2) = data2;........................................ #endif........................................ do {.................... res=y;.................... y+=(x/y);........................................ #if !defined(__PCD__).................... (*p)--;.................... #endif........................................ #if defined(__PCD__).................... data1 = *(((unsigned int8 *)(&y))+3);.................... data2 = *(((unsigned int8 *)(&y))+2);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1--;.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+3) = data1;.................... *(((unsigned int8 *)(&y))+2) = data2;........................................ #endif.................... } while(res != y);........................................ return(res);.................... }.................... //Overloaded functions for sqrt() for PCD.................... // Overloaded function sqrt() for data type - Float48.................... #if defined(__PCD__).................... float48 sqrt(float48 x).................... {.................... float48 y, res;.................... unsigned int16 data1,data2;.................... BYTE *p;........................................ #ifdef _ERRNO.................... if(x < 0).................... {.................... errno=EDOM;.................... }.................... #endif........................................ if( x<=0.0).................... return(0.0);........................................ y=x;........................................ #if !defined(__PCD__).................... p=&y;.................... (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1);.................... #endif........................................ #if defined(__PCD__).................... p = (((unsigned int8 *)(&y))+5);.................... data1 = *(((unsigned int8 *)(&y))+5);.................... data2 = *(((unsigned int8 *)(&y))+4);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1 = ((data1+127) >>1);.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+5) = data1;.................... *(((unsigned int8 *)(&y))+4) = data2;........................................ #endif........................................ do {.................... res=y;.................... y+=(x/y);........................................ #if !defined(__PCD__).................... (*p)--;.................... #endif........................................ data1 = *(((unsigned int8 *)(&y))+5);.................... data2 = *(((unsigned int8 *)(&y))+4);.................... rotate_left(&data1,1);.................... if(bit_test(data2,7)).................... bit_set(data1,0);.................... data1--;.................... bit_clear(data2,7);.................... if(bit_test(data1,0)).................... bit_set(data2,7);.................... data1 = data1 >>1;.................... *(((unsigned int8 *)(&y))+5) = data1;.................... *(((unsigned int8 *)(&y))+4) = data2;........................................ } while(res != y);........................................ return(res);.................... }........................................ // Overloaded function sqrt() for data type - Float64.................... float64 sqrt(float64 x).................... {.................... float64 y, res;.................... unsigned int16 *p;.................... unsigned int16 temp1,temp2;........................................ #ifdef _ERRNO.................... if(x < 0).................... {.................... errno=EDOM;.................... }.................... #endif........................................ if( x<=0.0).................... return(0.0);........................................ y=x;.................... p= (((unsigned int16 *)(&y))+3);.................... temp1 = *p;.................... temp2 = *p;.................... bit_clear(temp1,15);.................... temp1 = (temp1>>4)+1023;.................... temp1 = temp1 >> 1;.................... temp1 = (temp1<<4) & 0xFFF0;.................... if(bit_test(temp2,15)).................... bit_set(temp1,15);.................... temp2 = temp2 & 0x000F;.................... temp1 ^= temp2;........................................ (*p) = temp1;........................................ do {.................... res=y;.................... y+=(x/y);.................... temp1 = *p;.................... temp2 = *p;.................... bit_clear(temp1,15);.................... temp1 = (temp1>>4);.................... temp1--;.................... temp1 = (temp1<<4) & 0xFFF0;.................... if(bit_test(temp2,15)).................... bit_set(temp1,15);.................... temp2 = temp2 & 0x000F;.................... temp1 ^= temp2;.................... (*p) = temp1;........................................ } while(res != y);........................................ return(res);.................... }.................... #endif........................................ ////////////////////////////// Trig Functions //////////////////////////////.................... #ifdef PI_DIV_BY_TWO.................... #undef PI_DIV_BY_TWO.................... #endif.................... #define PI_DIV_BY_TWO 1.5707963267948966.................... #ifdef TWOBYPI.................... #undef TWOBYPI.................... #define TWOBYPI 0.6366197723675813.................... #endif.................... ////////////////////////////////////////////////////////////////////////////.................... // float cos(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the cosine value of the angle x, which is in radian.................... // Date : 9/20/2001.................... //.................... float32 cos(float32 x).................... {.................... float32 y, t, t2 = 1.0;.................... unsigned int8 quad, i;.................... float32 frac;.................... float32 p[6] = { //by the series definition for cosine.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ).................... 0.04166666666667,.................... -0.00138888888889,.................... 0.00002480158730,.................... -0.00000027557319,.................... 0.00000000208767,.................... //-0.00000000001147,.................... // 0.00000000000005.................... };........................................ if (x < 0) x = -x; // absolute value of input........................................ quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input.................... quad = quad % 4; // quadrant (0 to 3)........................................ if (quad == 0 || quad == 2).................... t = frac * PI_DIV_BY_TWO;.................... else if (quad == 1).................... t = (1-frac) * PI_DIV_BY_TWO;.................... else // should be 3.................... t = (frac-1) * PI_DIV_BY_TWO;........................................ y = 1.0;.................... t = t * t;.................... for (i = 0; i <= 5; i++).................... {.................... t2 = t2 * t;.................... y = y + p[i] * t2;.................... }........................................ if (quad == 2 || quad == 1).................... y = -y; // correct sign........................................ return (y);.................... }............................................................ //Overloaded functions for cos() for PCD.................... // Overloaded function cos() for data type - Float48.................... #if defined(__PCD__).................... float48 cos(float48 x).................... {.................... float48 y, t, t2 = 1.0;.................... unsigned int8 quad, i;.................... float48 frac;.................... float48 p[6] = { //by the series definition for cosine.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ).................... 0.04166666666667,.................... -0.00138888888889,.................... 0.00002480158730,.................... -0.00000027557319,.................... 0.00000000208767,.................... //-0.00000000001147,.................... // 0.00000000000005.................... };........................................ if (x < 0) x = -x; // absolute value of input........................................ quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input.................... quad = quad % 4; // quadrant (0 to 3)........................................ if (quad == 0 || quad == 2).................... t = frac * PI_DIV_BY_TWO;.................... else if (quad == 1).................... t = (1-frac) * PI_DIV_BY_TWO;.................... else // should be 3.................... t = (frac-1) * PI_DIV_BY_TWO;........................................ y = 0.999999999781;.................... t = t * t;.................... for (i = 0; i <= 5; i++).................... {.................... t2 = t2 * t;.................... y = y + p[i] * t2;.................... }........................................ if (quad == 2 || quad == 1).................... y = -y; // correct sign........................................ return (y);.................... }........................................ // Overloaded function cos() for data type - Float48.................... float64 cos(float64 x).................... {.................... float64 y, t, t2 = 1.0;.................... unsigned int8 quad, i;.................... float64 frac;.................... float64 p[6] = { //by the series definition for cosine.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ).................... 0.04166666666667,.................... -0.00138888888889,.................... 0.00002480158730,.................... -0.00000027557319,.................... 0.00000000208767,.................... //-0.00000000001147,.................... // 0.00000000000005.................... };........................................ if (x < 0) x = -x; // absolute value of input........................................ quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input.................... quad = quad % 4; // quadrant (0 to 3)........................................ if (quad == 0 || quad == 2).................... t = frac * PI_DIV_BY_TWO;.................... else if (quad == 1).................... t = (1-frac) * PI_DIV_BY_TWO;.................... else // should be 3.................... t = (frac-1) * PI_DIV_BY_TWO;........................................ y = 0.999999999781;.................... t = t * t;.................... for (i = 0; i <= 5; i++).................... {.................... t2 = t2 * t;.................... y = y + p[i] * t2;.................... }........................................ if (quad == 2 || quad == 1).................... y = -y; // correct sign........................................ return (y);.................... }........................................ #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float sin(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the sine value of the angle x, which is in radian.................... // Date : 9/20/2001.................... //.................... float32 sin(float32 x).................... {.................... return cos(x - PI_DIV_BY_TWO);.................... }........................................ //Overloaded functions for sin() for PCD.................... // Overloaded function sin() for data type - Float48.................... #if defined(__PCD__).................... float48 sin(float48 x).................... {.................... return cos(x - PI_DIV_BY_TWO);.................... }........................................ // Overloaded function sin() for data type - Float48.................... float64 sin(float64 x).................... {.................... return cos(x - PI_DIV_BY_TWO);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float tan(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the tangent value of the angle x, which is in radian.................... // Date : 9/20/2001.................... //.................... float32 tan(float32 x).................... {.................... float32 c, s;........................................ c = cos(x);.................... if (c == 0.0).................... return (1.0e+36);........................................ s = sin(x);.................... return(s/c);.................... }.................... //Overloaded functions for tan() for PCD.................... // Overloaded function tan() for data type - Float48.................... #if defined(__PCD__).................... float48 tan(float48 x).................... {.................... float48 c, s;........................................ c = cos(x);.................... if (c == 0.0).................... return (1.0e+36);........................................ s = sin(x);.................... return(s/c);.................... }........................................ // Overloaded function tan() for data type - Float48.................... float64 tan(float64 x).................... {.................... float64 c, s;........................................ c = cos(x);.................... if (c == 0.0).................... return (1.0e+36);........................................ s = sin(x);.................... return(s/c);.................... }.................... #endif........................................ float32 const pas[3] = {0.49559947, -4.6145309, 5.6036290};.................... float32 const qas[3] = {1.0000000, -5.5484666, 5.6036290};........................................ float32 ASIN_COS(float32 x, unsigned int8 n).................... {.................... float32 y, res, r, y2;.................... int1 s;.................... #ifdef _ERRNO.................... if(x <-1 || x > 1).................... {.................... errno=EDOM;.................... }.................... #endif.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 0.5).................... {.................... y = sqrt((1.0 - y)/2.0);.................... n += 2;.................... }........................................ y2=y*y;........................................ res = pas[0]*y2 + pas[1];.................... res = res*y2 + pas[2];........................................ r = qas[0]*y2 + qas[1];.................... r = r*y2 + qas[2];........................................ res = y*res/r;........................................ if (n & 2) // |x| > 0.5.................... res = PI_DIV_BY_TWO - 2.0*res;.................... if (s).................... res = -res;.................... if (n & 1) // take arccos.................... res = PI_DIV_BY_TWO - res;........................................ return(res);.................... }........................................ //Overloaded functions for ASIN_COS() for PCD.................... // Overloaded function ASIN_COS() for data type - Float48.................... #if defined(__PCD__).................... float48 ASIN_COS(float48 x, unsigned int8 n).................... {.................... float48 y, res, r, y2;.................... int1 s;.................... #ifdef _ERRNO.................... if(x <-1 || x > 1).................... {.................... errno=EDOM;.................... }.................... #endif.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 0.5).................... {.................... y = sqrt((1.0 - y)/2.0);.................... n += 2;.................... }........................................ y2=y*y;........................................ res = pas[0]*y2 + pas[1];.................... res = res*y2 + pas[2];........................................ r = qas[0]*y2 + qas[1];.................... r = r*y2 + qas[2];........................................ res = y*res/r;........................................ if (n & 2) // |x| > 0.5.................... res = PI_DIV_BY_TWO - 2.0*res;.................... if (s).................... res = -res;.................... if (n & 1) // take arccos.................... res = PI_DIV_BY_TWO - res;........................................ return(res);.................... }........................................ // Overloaded function ASIN_COS() for data type - Float64.................... float64 ASIN_COS(float64 x, unsigned int8 n).................... {.................... float64 y, res, r, y2;.................... int1 s;.................... #ifdef _ERRNO.................... if(x <-1 || x > 1).................... {.................... errno=EDOM;.................... }.................... #endif.................... s = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 0.5).................... {.................... y = sqrt((1.0 - y)/2.0);.................... n += 2;.................... }........................................ y2=y*y;........................................ res = pas[0]*y2 + pas[1];.................... res = res*y2 + pas[2];........................................ r = qas[0]*y2 + qas[1];.................... r = r*y2 + qas[2];........................................ res = y*res/r;........................................ if (n & 2) // |x| > 0.5.................... res = PI_DIV_BY_TWO - 2.0*res;.................... if (s).................... res = -res;.................... if (n & 1) // take arccos.................... res = PI_DIV_BY_TWO - res;........................................ return(res);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float asin(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the arcsine value of the value x..................... // Date : N/A.................... //.................... float32 asin(float32 x).................... {.................... float32 r;........................................ r = ASIN_COS(x, 0);.................... return(r);.................... }.................... //Overloaded functions for asin() for PCD.................... // Overloaded function asin() for data type - Float48.................... #if defined(__PCD__).................... float48 asin(float48 x).................... {.................... float48 r;........................................ r = ASIN_COS(x, 0);.................... return(r);.................... }........................................ // Overloaded function asin() for data type - Float64.................... float64 asin(float64 x).................... {.................... float64 r;........................................ r = ASIN_COS(x, 0);.................... return(r);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float acos(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the arccosine value of the value x..................... // Date : N/A.................... //.................... float32 acos(float32 x).................... {.................... float32 r;........................................ r = ASIN_COS(x, 1);.................... return(r);.................... }.................... //Overloaded functions for acos() for PCD.................... // Overloaded function acos() for data type - Float48.................... #if defined(__PCD__).................... float48 acos(float48 x).................... {.................... float48 r;........................................ r = ASIN_COS(x, 1);.................... return(r);.................... }........................................ // Overloaded function acos() for data type - Float64.................... float64 acos(float64 x).................... {.................... float64 r;........................................ r = ASIN_COS(x, 1);.................... return(r);.................... }.................... #endif........................................ float32 const pat[4] = {0.17630401, 5.6710795, 22.376096, 19.818457};.................... float32 const qat[4] = {1.0000000, 11.368190, 28.982246, 19.818457};........................................ ////////////////////////////////////////////////////////////////////////////.................... // float atan(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : returns the arctangent value of the value x..................... // Date : N/A.................... //.................... float32 atan(float32 x).................... {.................... float32 y, res, r;.................... int1 s, flag;........................................ s = 0;*0800: BCF 58.0.................... flag = 0;0801: BCF 58.1.................... y = x;0802: MOVF 4B,W0803: MOVWF 4F0804: MOVF 4A,W0805: MOVWF 4E0806: MOVF 49,W0807: MOVWF 4D0808: MOVF 48,W0809: MOVWF 4C........................................ if (x < 0)080A: MOVF 4B,W080B: MOVWF 5C080C: MOVF 4A,W080D: MOVWF 5B080E: MOVF 49,W080F: MOVWF 5A0810: MOVF 48,W0811: MOVWF 590812: CLRF 600813: CLRF 5F0814: CLRF 5E0815: CLRF 5D0816: BCF 0A.30817: CALL 4CE0818: BSF 0A.30819: BTFSS 03.0081A: GOTO 01F.................... {.................... s = 1;081B: BSF 58.0.................... y = -y;081C: MOVF 4D,W081D: XORLW 80081E: MOVWF 4D.................... }........................................ if (y > 1.0)081F: CLRF 5C0820: CLRF 5B0821: CLRF 5A0822: MOVLW 7F0823: MOVWF 590824: MOVF 4F,W0825: MOVWF 600826: MOVF 4E,W0827: MOVWF 5F0828: MOVF 4D,W0829: MOVWF 5E082A: MOVF 4C,W082B: MOVWF 5D082C: BCF 0A.3082D: CALL 4CE082E: BSF 0A.3082F: BTFSS 03.00830: GOTO 04A.................... {.................... y = 1.0/y;0831: CLRF 600832: CLRF 5F0833: CLRF 5E0834: MOVLW 7F0835: MOVWF 5D0836: MOVF 4F,W0837: MOVWF 640838: MOVF 4E,W0839: MOVWF 63083A: MOVF 4D,W083B: MOVWF 62083C: MOVF 4C,W083D: MOVWF 61083E: BCF 0A.3083F: CALL 4040840: BSF 0A.30841: MOVF 7A,W0842: MOVWF 4F0843: MOVF 79,W0844: MOVWF 4E0845: MOVF 78,W0846: MOVWF 4D0847: MOVF 77,W0848: MOVWF 4C.................... flag = 1;0849: BSF 58.1.................... }........................................ res = pat[0]*y*y + pat[1];084A: MOVLW 0A084B: MOVWF 60084C: MOVLW 89084D: MOVWF 5F084E: MOVLW 34084F: MOVWF 5E0850: MOVLW 7C0851: MOVWF 5D0852: MOVF 4F,W0853: MOVWF 640854: MOVF 4E,W0855: MOVWF 630856: MOVF 4D,W0857: MOVWF 620858: MOVF 4C,W0859: MOVWF 61085A: BCF 0A.3085B: CALL 50D085C: BSF 0A.3085D: MOVF 77,W085E: MOVWF 59085F: MOVF 78,W0860: MOVWF 5A0861: MOVF 79,W0862: MOVWF 5B0863: MOVF 7A,W0864: MOVWF 5C0865: MOVWF 600866: MOVF 5B,W0867: MOVWF 5F0868: MOVF 5A,W0869: MOVWF 5E086A: MOVF 59,W086B: MOVWF 5D086C: MOVF 4F,W086D: MOVWF 64086E: MOVF 4E,W086F: MOVWF 630870: MOVF 4D,W0871: MOVWF 620872: MOVF 4C,W0873: MOVWF 610874: BCF 0A.30875: CALL 50D0876: BSF 0A.30877: MOVF 77,W0878: MOVWF 590879: MOVF 78,W087A: MOVWF 5A087B: MOVF 79,W087C: MOVWF 5B087D: MOVF 7A,W087E: MOVWF 5C087F: BCF 03.10880: MOVF 5C,W0881: MOVWF 600882: MOVF 5B,W0883: MOVWF 5F0884: MOVF 5A,W0885: MOVWF 5E0886: MOVF 59,W0887: MOVWF 5D0888: MOVLW 7C0889: MOVWF 64088A: MOVLW 79088B: MOVWF 63088C: MOVLW 35088D: MOVWF 62088E: MOVLW 81088F: MOVWF 610890: BCF 0A.30891: CALL 5820892: BSF 0A.30893: MOVF 7A,W0894: MOVWF 530895: MOVF 79,W0896: MOVWF 520897: MOVF 78,W0898: MOVWF 510899: MOVF 77,W089A: MOVWF 50.................... res = res*y*y + pat[2];089B: MOVF 53,W089C: MOVWF 60089D: MOVF 52,W089E: MOVWF 5F089F: MOVF 51,W08A0: MOVWF 5E08A1: MOVF 50,W08A2: MOVWF 5D08A3: MOVF 4F,W08A4: MOVWF 6408A5: MOVF 4E,W08A6: MOVWF 6308A7: MOVF 4D,W08A8: MOVWF 6208A9: MOVF 4C,W08AA: MOVWF 6108AB: BCF 0A.308AC: CALL 50D08AD: BSF 0A.308AE: MOVF 77,W08AF: MOVWF 5908B0: MOVF 78,W08B1: MOVWF 5A08B2: MOVF 79,W08B3: MOVWF 5B08B4: MOVF 7A,W08B5: MOVWF 5C08B6: MOVWF 6008B7: MOVF 5B,W08B8: MOVWF 5F08B9: MOVF 5A,W08BA: MOVWF 5E08BB: MOVF 59,W08BC: MOVWF 5D08BD: MOVF 4F,W08BE: MOVWF 6408BF: MOVF 4E,W08C0: MOVWF 6308C1: MOVF 4D,W08C2: MOVWF 6208C3: MOVF 4C,W08C4: MOVWF 6108C5: BCF 0A.308C6: CALL 50D08C7: BSF 0A.308C8: MOVF 77,W08C9: MOVWF 5908CA: MOVF 78,W08CB: MOVWF 5A08CC: MOVF 79,W08CD: MOVWF 5B08CE: MOVF 7A,W08CF: MOVWF 5C08D0: BCF 03.108D1: MOVF 5C,W08D2: MOVWF 6008D3: MOVF 5B,W08D4: MOVWF 5F08D5: MOVF 5A,W08D6: MOVWF 5E08D7: MOVF 59,W08D8: MOVWF 5D08D9: MOVLW 3F08DA: MOVWF 6408DB: MOVLW 0208DC: MOVWF 6308DD: MOVLW 3308DE: MOVWF 6208DF: MOVLW 8308E0: MOVWF 6108E1: BCF 0A.308E2: CALL 58208E3: BSF 0A.308E4: MOVF 7A,W08E5: MOVWF 5308E6: MOVF 79,W08E7: MOVWF 5208E8: MOVF 78,W08E9: MOVWF 5108EA: MOVF 77,W08EB: MOVWF 50.................... res = res*y*y + pat[3];08EC: MOVF 53,W08ED: MOVWF 6008EE: MOVF 52,W08EF: MOVWF 5F08F0: MOVF 51,W08F1: MOVWF 5E08F2: MOVF 50,W08F3: MOVWF 5D08F4: MOVF 4F,W08F5: MOVWF 6408F6: MOVF 4E,W08F7: MOVWF 6308F8: MOVF 4D,W08F9: MOVWF 6208FA: MOVF 4C,W08FB: MOVWF 6108FC: BCF 0A.308FD: CALL 50D08FE: BSF 0A.308FF: MOVF 77,W0900: MOVWF 590901: MOVF 78,W0902: MOVWF 5A0903: MOVF 79,W0904: MOVWF 5B0905: MOVF 7A,W0906: MOVWF 5C0907: MOVWF 600908: MOVF 5B,W0909: MOVWF 5F090A: MOVF 5A,W090B: MOVWF 5E090C: MOVF 59,W090D: MOVWF 5D090E: MOVF 4F,W090F: MOVWF 640910: MOVF 4E,W0911: MOVWF 630912: MOVF 4D,W0913: MOVWF 620914: MOVF 4C,W0915: MOVWF 610916: BCF 0A.30917: CALL 50D0918: BSF 0A.30919: MOVF 77,W091A: MOVWF 59091B: MOVF 78,W091C: MOVWF 5A091D: MOVF 79,W091E: MOVWF 5B091F: MOVF 7A,W0920: MOVWF 5C0921: BCF 03.10922: MOVF 5C,W0923: MOVWF 600924: MOVF 5B,W0925: MOVWF 5F0926: MOVF 5A,W0927: MOVWF 5E0928: MOVF 59,W0929: MOVWF 5D092A: MOVLW 33092B: MOVWF 64092C: MOVLW 8C092D: MOVWF 63092E: MOVLW 1E092F: MOVWF 620930: MOVLW 830931: MOVWF 610932: BCF 0A.30933: CALL 5820934: BSF 0A.30935: MOVF 7A,W0936: MOVWF 530937: MOVF 79,W0938: MOVWF 520939: MOVF 78,W093A: MOVWF 51093B: MOVF 77,W093C: MOVWF 50........................................ r = qat[0]*y*y + qat[1];093D: CLRF 60093E: CLRF 5F093F: CLRF 5E0940: MOVLW 7F0941: MOVWF 5D0942: MOVF 4F,W0943: MOVWF 640944: MOVF 4E,W0945: MOVWF 630946: MOVF 4D,W0947: MOVWF 620948: MOVF 4C,W0949: MOVWF 61094A: BCF 0A.3094B: CALL 50D094C: BSF 0A.3094D: MOVF 77,W094E: MOVWF 59094F: MOVF 78,W0950: MOVWF 5A0951: MOVF 79,W0952: MOVWF 5B0953: MOVF 7A,W0954: MOVWF 5C0955: MOVWF 600956: MOVF 5B,W0957: MOVWF 5F0958: MOVF 5A,W0959: MOVWF 5E095A: MOVF 59,W095B: MOVWF 5D095C: MOVF 4F,W095D: MOVWF 64095E: MOVF 4E,W095F: MOVWF 630960: MOVF 4D,W0961: MOVWF 620962: MOVF 4C,W0963: MOVWF 610964: BCF 0A.30965: CALL 50D0966: BSF 0A.30967: MOVF 77,W0968: MOVWF 590969: MOVF 78,W096A: MOVWF 5A096B: MOVF 79,W096C: MOVWF 5B096D: MOVF 7A,W096E: MOVWF 5C096F: BCF 03.10970: MOVF 5C,W0971: MOVWF 600972: MOVF 5B,W0973: MOVWF 5F0974: MOVF 5A,W0975: MOVWF 5E0976: MOVF 59,W0977: MOVWF 5D0978: MOVLW 1B0979: MOVWF 64097A: MOVLW E4097B: MOVWF 63097C: MOVLW 35097D: MOVWF 62097E: MOVLW 82097F: MOVWF 610980: BCF 0A.30981: CALL 5820982: BSF 0A.30983: MOVF 7A,W0984: MOVWF 570985: MOVF 79,W0986: MOVWF 560987: MOVF 78,W0988: MOVWF 550989: MOVF 77,W098A: MOVWF 54.................... r = r*y*y + qat[2];098B: MOVF 57,W098C: MOVWF 60098D: MOVF 56,W098E: MOVWF 5F098F: MOVF 55,W0990: MOVWF 5E0991: MOVF 54,W0992: MOVWF 5D0993: MOVF 4F,W0994: MOVWF 640995: MOVF 4E,W0996: MOVWF 630997: MOVF 4D,W0998: MOVWF 620999: MOVF 4C,W099A: MOVWF 61099B: BCF 0A.3099C: CALL 50D099D: BSF 0A.3099E: MOVF 77,W099F: MOVWF 5909A0: MOVF 78,W09A1: MOVWF 5A09A2: MOVF 79,W09A3: MOVWF 5B09A4: MOVF 7A,W09A5: MOVWF 5C09A6: MOVWF 6009A7: MOVF 5B,W09A8: MOVWF 5F09A9: MOVF 5A,W09AA: MOVWF 5E09AB: MOVF 59,W09AC: MOVWF 5D09AD: MOVF 4F,W09AE: MOVWF 6409AF: MOVF 4E,W09B0: MOVWF 6309B1: MOVF 4D,W09B2: MOVWF 6209B3: MOVF 4C,W09B4: MOVWF 6109B5: BCF 0A.309B6: CALL 50D09B7: BSF 0A.309B8: MOVF 77,W09B9: MOVWF 5909BA: MOVF 78,W09BB: MOVWF 5A09BC: MOVF 79,W09BD: MOVWF 5B09BE: MOVF 7A,W09BF: MOVWF 5C09C0: BCF 03.109C1: MOVF 5C,W09C2: MOVWF 6009C3: MOVF 5B,W09C4: MOVWF 5F09C5: MOVF 5A,W09C6: MOVWF 5E09C7: MOVF 59,W09C8: MOVWF 5D09C9: MOVLW A409CA: MOVWF 6409CB: MOVLW DB09CC: MOVWF 6309CD: MOVLW 6709CE: MOVWF 6209CF: MOVLW 8309D0: MOVWF 6109D1: BCF 0A.309D2: CALL 58209D3: BSF 0A.309D4: MOVF 7A,W09D5: MOVWF 5709D6: MOVF 79,W09D7: MOVWF 5609D8: MOVF 78,W09D9: MOVWF 5509DA: MOVF 77,W09DB: MOVWF 54.................... r = r*y*y + qat[3];09DC: MOVF 57,W09DD: MOVWF 6009DE: MOVF 56,W09DF: MOVWF 5F09E0: MOVF 55,W09E1: MOVWF 5E09E2: MOVF 54,W09E3: MOVWF 5D09E4: MOVF 4F,W09E5: MOVWF 6409E6: MOVF 4E,W09E7: MOVWF 6309E8: MOVF 4D,W09E9: MOVWF 6209EA: MOVF 4C,W09EB: MOVWF 6109EC: BCF 0A.309ED: CALL 50D09EE: BSF 0A.309EF: MOVF 77,W09F0: MOVWF 5909F1: MOVF 78,W09F2: MOVWF 5A09F3: MOVF 79,W09F4: MOVWF 5B09F5: MOVF 7A,W09F6: MOVWF 5C09F7: MOVWF 6009F8: MOVF 5B,W09F9: MOVWF 5F09FA: MOVF 5A,W09FB: MOVWF 5E09FC: MOVF 59,W09FD: MOVWF 5D09FE: MOVF 4F,W09FF: MOVWF 640A00: MOVF 4E,W0A01: MOVWF 630A02: MOVF 4D,W0A03: MOVWF 620A04: MOVF 4C,W0A05: MOVWF 610A06: BCF 0A.30A07: CALL 50D0A08: BSF 0A.30A09: MOVF 77,W0A0A: MOVWF 590A0B: MOVF 78,W0A0C: MOVWF 5A0A0D: MOVF 79,W0A0E: MOVWF 5B0A0F: MOVF 7A,W0A10: MOVWF 5C0A11: BCF 03.10A12: MOVF 5C,W0A13: MOVWF 600A14: MOVF 5B,W0A15: MOVWF 5F0A16: MOVF 5A,W0A17: MOVWF 5E0A18: MOVF 59,W0A19: MOVWF 5D0A1A: MOVLW 330A1B: MOVWF 640A1C: MOVLW 8C0A1D: MOVWF 630A1E: MOVLW 1E0A1F: MOVWF 620A20: MOVLW 830A21: MOVWF 610A22: BCF 0A.30A23: CALL 5820A24: BSF 0A.30A25: MOVF 7A,W0A26: MOVWF 570A27: MOVF 79,W0A28: MOVWF 560A29: MOVF 78,W0A2A: MOVWF 550A2B: MOVF 77,W0A2C: MOVWF 54........................................ res = y*res/r;0A2D: MOVF 4F,W0A2E: MOVWF 600A2F: MOVF 4E,W0A30: MOVWF 5F0A31: MOVF 4D,W0A32: MOVWF 5E0A33: MOVF 4C,W0A34: MOVWF 5D0A35: MOVF 53,W0A36: MOVWF 640A37: MOVF 52,W0A38: MOVWF 630A39: MOVF 51,W0A3A: MOVWF 620A3B: MOVF 50,W0A3C: MOVWF 610A3D: BCF 0A.30A3E: CALL 50D0A3F: BSF 0A.30A40: MOVF 77,W0A41: MOVWF 590A42: MOVF 78,W0A43: MOVWF 5A0A44: MOVF 79,W0A45: MOVWF 5B0A46: MOVF 7A,W0A47: MOVWF 5C0A48: MOVWF 600A49: MOVF 5B,W0A4A: MOVWF 5F0A4B: MOVF 5A,W0A4C: MOVWF 5E0A4D: MOVF 59,W0A4E: MOVWF 5D0A4F: MOVF 57,W0A50: MOVWF 640A51: MOVF 56,W0A52: MOVWF 630A53: MOVF 55,W0A54: MOVWF 620A55: MOVF 54,W0A56: MOVWF 610A57: BCF 0A.30A58: CALL 4040A59: BSF 0A.30A5A: MOVF 7A,W0A5B: MOVWF 530A5C: MOVF 79,W0A5D: MOVWF 520A5E: MOVF 78,W0A5F: MOVWF 510A60: MOVF 77,W0A61: MOVWF 50............................................................ if (flag) // for |x| > 10A62: BTFSS 58.10A63: GOTO 280.................... res = PI_DIV_BY_TWO - res;0A64: BSF 03.10A65: MOVLW DB0A66: MOVWF 600A67: MOVLW 0F0A68: MOVWF 5F0A69: MOVLW 490A6A: MOVWF 5E0A6B: MOVLW 7F0A6C: MOVWF 5D0A6D: MOVF 53,W0A6E: MOVWF 640A6F: MOVF 52,W0A70: MOVWF 630A71: MOVF 51,W0A72: MOVWF 620A73: MOVF 50,W0A74: MOVWF 610A75: BCF 0A.30A76: CALL 5820A77: BSF 0A.30A78: MOVF 7A,W0A79: MOVWF 530A7A: MOVF 79,W0A7B: MOVWF 520A7C: MOVF 78,W0A7D: MOVWF 510A7E: MOVF 77,W0A7F: MOVWF 50.................... if (s)0A80: BTFSS 58.00A81: GOTO 285.................... res = -res;0A82: MOVF 51,W0A83: XORLW 800A84: MOVWF 51........................................ return(res);0A85: MOVF 50,W0A86: MOVWF 770A87: MOVF 51,W0A88: MOVWF 780A89: MOVF 52,W0A8A: MOVWF 790A8B: MOVF 53,W0A8C: MOVWF 7A.................... }0A8D: RETURN.................... //Overloaded functions for atan() for PCD.................... // Overloaded function atan() for data type - Float48.................... #if defined(__PCD__).................... float48 atan(float48 x).................... {.................... float48 y, res, r;.................... int1 s, flag;........................................ s = 0;.................... flag = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 1.0).................... {.................... y = 1.0/y;.................... flag = 1;.................... }........................................ res = pat[0]*y*y + pat[1];.................... res = res*y*y + pat[2];.................... res = res*y*y + pat[3];........................................ r = qat[0]*y*y + qat[1];.................... r = r*y*y + qat[2];.................... r = r*y*y + qat[3];........................................ res = y*res/r;............................................................ if (flag) // for |x| > 1.................... res = PI_DIV_BY_TWO - res;.................... if (s).................... res = -res;........................................ return(res);.................... }........................................ // Overloaded function atan() for data type - Float64.................... float64 atan(float64 x).................... {.................... float64 y, res, r;.................... int1 s, flag;........................................ s = 0;.................... flag = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 1.0).................... {.................... y = 1.0/y;.................... flag = 1;.................... }........................................ res = pat[0]*y*y + pat[1];.................... res = res*y*y + pat[2];.................... res = res*y*y + pat[3];........................................ r = qat[0]*y*y + qat[1];.................... r = r*y*y + qat[2];.................... r = r*y*y + qat[3];........................................ res = y*res/r;............................................................ if (flag) // for |x| > 1.................... res = PI_DIV_BY_TWO - res;.................... if (s).................... res = -res;........................................ return(res);.................... }.................... #endif........................................ /////////////////////////////////////////////////////////////////////////////.................... // float atan2(float y, float x).................... /////////////////////////////////////////////////////////////////////////////.................... // Description :computes the principal value of arc tangent of y/x, using the.................... // signs of both the arguments to determine the quadrant of the return value.................... // Returns : returns the arc tangent of y/x..................... // Date : N/A.................... //........................................ float32 atan2(float32 y,float32 x).................... {.................... float32 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }........................................ //Overloaded functions for atan2() for PCD.................... // Overloaded function atan2() for data type - Float48.................... #if defined(__PCD__).................... float48 atan2(float48 y,float48 x).................... {.................... float48 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }........................................ // Overloaded function atan2() for data type - Float64.................... float64 atan2(float64 y,float64 x).................... {.................... float64 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }.................... #endif........................................ //////////////////// Hyperbolic functions ////////////////////........................................ ////////////////////////////////////////////////////////////////////////////.................... // float cosh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic cosine value of x.................... // Returns : returns the hyperbolic cosine value of x.................... // Date : N/A.................... //........................................ float32 cosh(float32 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }.................... //Overloaded functions for cosh() for PCD.................... // Overloaded function cosh() for data type - Float48.................... #if defined(__PCD__).................... float48 cosh(float48 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }........................................ // Overloaded function cosh() for data type - Float64.................... float64 cosh(float64 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float sinh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic sine value of x.................... // Returns : returns the hyperbolic sine value of x.................... // Date : N/A.................... //........................................ float32 sinh(float32 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }.................... //Overloaded functions for sinh() for PCD.................... // Overloaded function sinh() for data type - Float48.................... #if defined(__PCD__).................... float48 sinh(float48 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }........................................ // Overloaded function sinh() for data type - Float48.................... float64 sinh(float64 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float tanh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic tangent value of x.................... // Returns : returns the hyperbolic tangent value of x.................... // Date : N/A.................... //........................................ float32 tanh(float32 x).................... {.................... return(sinh(x)/cosh(x));.................... }.................... //Overloaded functions for tanh() for PCD.................... // Overloaded function tanh() for data type - Float48.................... #if defined(__PCD__).................... float48 tanh(float48 x).................... {.................... return(sinh(x)/cosh(x));.................... }........................................ // Overloaded function tanh() for data type - Float64.................... float64 tanh(float64 x).................... {.................... return(sinh(x)/cosh(x));.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float frexp(float x, signed int *exp).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : breaks a floating point number into a normalized fraction and an integral.................... // power of 2. It stores the integer in the signed int object pointed to by exp..................... // Returns : returns the value x, such that x is a double with magnitude in the interval.................... // [1/2,1) or zero, and value equals x times 2 raised to the power *exp.If value is zero,.................... // both parts of the result are zero..................... // Date : N/A.................... //........................................ #define LOG2 .30102999566398119521.................... float32 frexp(float32 x, signed int8 *exp).................... {.................... float32 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }........................................ //Overloaded functions for frexp() for PCD.................... // Overloaded function frexp() for data type - Float48.................... #if defined(__PCD__).................... float48 frexp(float48 x, signed int8 *exp).................... {.................... float48 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }........................................ // Overloaded function frexp() for data type - Float64.................... float64 frexp(float64 x, signed int8 *exp).................... {.................... float64 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }.................... #endif........................................ //////////////////////////////////////////////////////////////////////////////.................... // float ldexp(float x, signed int *exp).................... //////////////////////////////////////////////////////////////////////////////.................... // Description : multiplies a floating point number by an integral power of 2..................... // Returns : returns the value of x times 2 raised to the power exp..................... // Date : N/A.................... //........................................ float32 ldexp(float32 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... //Overloaded functions for ldexp() for PCD.................... // Overloaded function ldexp() for data type - Float48........................................ #if defined(__PCD__).................... float48 ldexp(float48 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... // Overloaded function ldexp() for data type - Float64.................... float64 ldexp(float64 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... #endif........................................ #endif............................................................ //Akcelerometr.................... #define AK_W 0x38 //adresa akcelerometru zápis.................... #define AK_R 0x39 //adresa akcelerometru ètení.................... #define AK_XH 0x01 //osa X LSB.................... #define AK_XL 0x02 //osa X MSB.................... #define AK_YH 0x03 //osa Y LSB.................... #define AK_YL 0x04 //osa Y MSB.................... #define AK_ZH 0x05 //osa Z LSB.................... #define AK_ZL 0x06 //osa Z MSB........................................ //Magnetometr.................... #define MAG_W 0x3C //adresa akcelerometru zápis.................... #define MAG_R 0x3D //adresa akcelerometru ètení.................... #define MAG_XH 0x03 //osa X LSB.................... #define MAG_XL 0x04 //osa X MSB.................... #define MAG_ZH 0x05 //osa Y LSB.................... #define MAG_ZL 0x06 //osa Y MSB.................... #define MAG_YH 0x07 //osa Z LSB.................... #define MAG_YL 0x08 //osa Z MSB........................................................................................................................ //pøipojení motorù.................... //AIN1 - pro vysku slunce.................... #define AIN1 PIN_D0.................... #define AIN2 PIN_D1.................... //motor A -cerveny vodic na AOUT1.................... //motor A -modry vodic na Aout2........................................ //AIN2 - pro azimut.................... #define BIN1 PIN_D2.................... #define BIN2 PIN_D3.................... //motor B - èerveny vodic na BOUT2.................... //motor B - modrý vodic na BOUT1........................................ signed int16 X, Y, Z,AX, AY, AZ;........................................ void setAK (void) //nastaveni akcelerometru.................... {.................... i2c_start();*018D: BSF 20.4018E: MOVF 20,W018F: BSF 03.50190: MOVWF 070191: NOP0192: BCF 03.50193: BSF 20.30194: MOVF 20,W0195: BSF 03.50196: MOVWF 070197: NOP0198: BCF 03.50199: BCF 07.4019A: BCF 20.4019B: MOVF 20,W019C: BSF 03.5019D: MOVWF 07019E: NOP019F: BCF 03.501A0: BCF 07.301A1: BCF 20.301A2: MOVF 20,W01A3: BSF 03.501A4: MOVWF 07.................... I2C_Write(AK_W);01A5: MOVLW 3801A6: BCF 03.501A7: MOVWF 4E01A8: CALL 143.................... I2C_write(0x2A);01A9: MOVLW 2A01AA: MOVWF 4E01AB: CALL 143.................... I2C_write(0x01); //nastaví aktivní stav01AC: MOVLW 0101AD: MOVWF 4E01AE: CALL 143........................................ i2c_stop();01AF: BCF 20.401B0: MOVF 20,W01B1: BSF 03.501B2: MOVWF 0701B3: NOP01B4: BCF 03.501B5: BSF 20.301B6: MOVF 20,W01B7: BSF 03.501B8: MOVWF 0701B9: BCF 03.501BA: BTFSS 07.301BB: GOTO 1BA01BC: NOP01BD: GOTO 1BE01BE: NOP01BF: BSF 20.401C0: MOVF 20,W01C1: BSF 03.501C2: MOVWF 0701C3: NOP.................... }01C4: BCF 03.501C5: BCF 0A.301C6: BSF 0A.401C7: GOTO 266 (RETURN)........................................ void setmag (void).................... {.................... i2c_start();*01DC: BSF 20.401DD: MOVF 20,W01DE: BSF 03.501DF: MOVWF 0701E0: NOP01E1: BCF 03.501E2: BSF 20.301E3: MOVF 20,W01E4: BSF 03.501E5: MOVWF 0701E6: NOP01E7: BCF 03.501E8: BCF 07.401E9: BCF 20.401EA: MOVF 20,W01EB: BSF 03.501EC: MOVWF 0701ED: NOP01EE: BCF 03.501EF: BCF 07.301F0: BCF 20.301F1: MOVF 20,W01F2: BSF 03.501F3: MOVWF 07.................... I2C_Write(MAG_W); // W01F4: MOVLW 3C01F5: BCF 03.501F6: MOVWF 4E01F7: CALL 143.................... I2C_Write(0x00);01F8: CLRF 4E01F9: CALL 143.................... I2C_Write(0x78);01FA: MOVLW 7801FB: MOVWF 4E01FC: CALL 143.................... i2c_stop();01FD: BCF 20.401FE: MOVF 20,W01FF: BSF 03.50200: MOVWF 070201: NOP0202: BCF 03.50203: BSF 20.30204: MOVF 20,W0205: BSF 03.50206: MOVWF 070207: BCF 03.50208: BTFSS 07.30209: GOTO 208020A: NOP020B: GOTO 20C020C: NOP020D: BSF 20.4020E: MOVF 20,W020F: BSF 03.50210: MOVWF 070211: NOP.................... Delay_ms(6);0212: MOVLW 060213: BCF 03.50214: MOVWF 400215: CALL 1C8........................................ i2c_start();0216: BSF 20.40217: MOVF 20,W0218: BSF 03.50219: MOVWF 07021A: NOP021B: BCF 03.5021C: BSF 20.3021D: MOVF 20,W021E: BSF 03.5021F: MOVWF 070220: NOP0221: BCF 03.50222: BCF 07.40223: BCF 20.40224: MOVF 20,W0225: BSF 03.50226: MOVWF 070227: NOP0228: BCF 03.50229: BCF 07.3022A: BCF 20.3022B: MOVF 20,W022C: BSF 03.5022D: MOVWF 07.................... I2C_Write(MAG_W); // W022E: MOVLW 3C022F: BCF 03.50230: MOVWF 4E0231: CALL 143.................... I2C_Write(0x01);0232: MOVLW 010233: MOVWF 4E0234: CALL 143.................... I2C_Write(0x00);0235: CLRF 4E0236: CALL 143.................... i2c_stop();0237: BCF 20.40238: MOVF 20,W0239: BSF 03.5023A: MOVWF 07023B: NOP023C: BCF 03.5023D: BSF 20.3023E: MOVF 20,W023F: BSF 03.50240: MOVWF 070241: BCF 03.50242: BTFSS 07.30243: GOTO 2420244: NOP0245: GOTO 2460246: NOP0247: BSF 20.40248: MOVF 20,W0249: BSF 03.5024A: MOVWF 07024B: NOP........................................ Delay_ms(6);024C: MOVLW 06024D: BCF 03.5024E: MOVWF 40024F: CALL 1C8........................................ i2c_start();0250: BSF 20.40251: MOVF 20,W0252: BSF 03.50253: MOVWF 070254: NOP0255: BCF 03.50256: BSF 20.30257: MOVF 20,W0258: BSF 03.50259: MOVWF 07025A: NOP025B: BCF 03.5025C: BCF 07.4025D: BCF 20.4025E: MOVF 20,W025F: BSF 03.50260: MOVWF 070261: NOP0262: BCF 03.50263: BCF 07.30264: BCF 20.30265: MOVF 20,W0266: BSF 03.50267: MOVWF 07.................... I2C_Write(MAG_W); // W0268: MOVLW 3C0269: BCF 03.5026A: MOVWF 4E026B: CALL 143.................... I2C_Write(0x02);026C: MOVLW 02026D: MOVWF 4E026E: CALL 143.................... I2C_Write(0x00);026F: CLRF 4E0270: CALL 143.................... i2c_stop();0271: BCF 20.40272: MOVF 20,W0273: BSF 03.50274: MOVWF 070275: NOP0276: BCF 03.50277: BSF 20.30278: MOVF 20,W0279: BSF 03.5027A: MOVWF 07027B: BCF 03.5027C: BTFSS 07.3027D: GOTO 27C027E: NOP027F: GOTO 2800280: NOP0281: BSF 20.40282: MOVF 20,W0283: BSF 03.50284: MOVWF 070285: NOP.................... Delay_ms(6);0286: MOVLW 060287: BCF 03.50288: MOVWF 400289: CALL 1C8.................... }028A: BCF 0A.3028B: BSF 0A.4028C: GOTO 269 (RETURN)........................................ int16 akR (int8 H, int8 L) //vycitani hodnot z akcelerometru.................... {*02D2: CLRF 4A02D3: CLRF 4B.................... unsigned int8 XL=0,XH=0;.................... signed int16 x;........................................ i2c_start();02D4: BSF 20.402D5: MOVF 20,W02D6: BSF 03.502D7: MOVWF 0702D8: NOP02D9: BCF 03.502DA: BSF 20.302DB: MOVF 20,W02DC: BSF 03.502DD: MOVWF 0702DE: NOP02DF: BCF 03.502E0: BCF 07.402E1: BCF 20.402E2: MOVF 20,W02E3: BSF 03.502E4: MOVWF 0702E5: NOP02E6: BCF 03.502E7: BCF 07.302E8: BCF 20.302E9: MOVF 20,W02EA: BSF 03.502EB: MOVWF 07.................... I2C_Write(AK_W);02EC: MOVLW 3802ED: BCF 03.502EE: MOVWF 4E02EF: CALL 143.................... I2C_write(H);02F0: MOVF 48,W02F1: MOVWF 4E02F2: CALL 143.................... i2c_start();02F3: BSF 20.402F4: MOVF 20,W02F5: BSF 03.502F6: MOVWF 0702F7: NOP02F8: BCF 03.502F9: BSF 20.302FA: MOVF 20,W02FB: BSF 03.502FC: MOVWF 0702FD: NOP02FE: BCF 03.502FF: BTFSS 07.30300: GOTO 2FF0301: BCF 07.40302: BCF 20.40303: MOVF 20,W0304: BSF 03.50305: MOVWF 070306: NOP0307: BCF 03.50308: BCF 07.30309: BCF 20.3030A: MOVF 20,W030B: BSF 03.5030C: MOVWF 07.................... I2C_Write(AK_R);030D: MOVLW 39030E: BCF 03.5030F: MOVWF 4E0310: CALL 143.................... XH=i2c_read(0);0311: CLRF 770312: CALL 28D0313: MOVF 78,W0314: MOVWF 4B.................... i2c_stop();0315: BCF 20.40316: MOVF 20,W0317: BSF 03.50318: MOVWF 070319: NOP031A: BCF 03.5031B: BSF 20.3031C: MOVF 20,W031D: BSF 03.5031E: MOVWF 07031F: BCF 03.50320: BTFSS 07.30321: GOTO 3200322: NOP0323: GOTO 3240324: NOP0325: BSF 20.40326: MOVF 20,W0327: BSF 03.50328: MOVWF 070329: NOP........................................ i2c_start();032A: BCF 03.5032B: BSF 20.4032C: MOVF 20,W032D: BSF 03.5032E: MOVWF 07032F: NOP0330: BCF 03.50331: BSF 20.30332: MOVF 20,W0333: BSF 03.50334: MOVWF 070335: NOP0336: BCF 03.50337: BCF 07.40338: BCF 20.40339: MOVF 20,W033A: BSF 03.5033B: MOVWF 07033C: NOP033D: BCF 03.5033E: BCF 07.3033F: BCF 20.30340: MOVF 20,W0341: BSF 03.50342: MOVWF 07.................... I2C_Write(AK_W);0343: MOVLW 380344: BCF 03.50345: MOVWF 4E0346: CALL 143.................... I2C_write(L);0347: MOVF 49,W0348: MOVWF 4E0349: CALL 143.................... i2c_start();034A: BSF 20.4034B: MOVF 20,W034C: BSF 03.5034D: MOVWF 07034E: NOP034F: BCF 03.50350: BSF 20.30351: MOVF 20,W0352: BSF 03.50353: MOVWF 070354: NOP0355: BCF 03.50356: BTFSS 07.30357: GOTO 3560358: BCF 07.40359: BCF 20.4035A: MOVF 20,W035B: BSF 03.5035C: MOVWF 07035D: NOP035E: BCF 03.5035F: BCF 07.30360: BCF 20.30361: MOVF 20,W0362: BSF 03.50363: MOVWF 07.................... I2C_Write(AK_R);0364: MOVLW 390365: BCF 03.50366: MOVWF 4E0367: CALL 143.................... XL=i2c_read(0);0368: CLRF 770369: CALL 28D036A: MOVF 78,W036B: MOVWF 4A.................... i2c_stop();036C: BCF 20.4036D: MOVF 20,W036E: BSF 03.5036F: MOVWF 070370: NOP0371: BCF 03.50372: BSF 20.30373: MOVF 20,W0374: BSF 03.50375: MOVWF 070376: BCF 03.50377: BTFSS 07.30378: GOTO 3770379: NOP037A: GOTO 37B037B: NOP037C: BSF 20.4037D: MOVF 20,W037E: BSF 03.5037F: MOVWF 070380: NOP........................................ x = (((unsigned int16) XH << 8) + XL ); //prevod na 16bit hodnotu0381: BCF 03.50382: CLRF 4F0383: MOVF 4B,W0384: MOVWF 4E0385: MOVWF 4F0386: CLRF 4E0387: MOVF 4A,W0388: ADDWF 4E,W0389: MOVWF 78038A: MOVF 4F,W038B: MOVWF 7A038C: BTFSC 03.0038D: INCF 7A,F038E: MOVF 78,W038F: MOVWF 4C0390: MOVF 7A,W0391: MOVWF 4D.................... x=x/4;0392: MOVF 4D,W0393: MOVWF 4F0394: MOVF 4C,W0395: MOVWF 4E0396: CLRF 510397: MOVLW 040398: MOVWF 50*03D6: MOVF 79,W03D7: MOVWF 4D03D8: MOVF 78,W03D9: MOVWF 4C........................................ return x;03DA: MOVF 4C,W03DB: MOVWF 7803DC: MOVF 4D,W03DD: MOVWF 79.................... }03DE: RETURN........................................ int16 magR (int8 H, int8 L) //vycitani hodnot z akcelerometru.................... {*0E44: CLRF 4A0E45: CLRF 4B.................... unsigned int8 XL=0,XH=0;.................... signed int16 x;........................................ i2c_start();0E46: BSF 20.40E47: MOVF 20,W0E48: BSF 03.50E49: MOVWF 070E4A: NOP0E4B: BCF 03.50E4C: BSF 20.30E4D: MOVF 20,W0E4E: BSF 03.50E4F: MOVWF 070E50: NOP0E51: BCF 03.50E52: BCF 07.40E53: BCF 20.40E54: MOVF 20,W0E55: BSF 03.50E56: MOVWF 070E57: NOP0E58: BCF 03.50E59: BCF 07.30E5A: BCF 20.30E5B: MOVF 20,W0E5C: BSF 03.50E5D: MOVWF 07.................... I2C_Write(MAG_W);0E5E: MOVLW 3C0E5F: BCF 03.50E60: MOVWF 4E0E61: BCF 0A.30E62: CALL 1430E63: BSF 0A.3.................... I2C_write(H);0E64: MOVF 48,W0E65: MOVWF 4E0E66: BCF 0A.30E67: CALL 1430E68: BSF 0A.3.................... i2c_start();0E69: BSF 20.40E6A: MOVF 20,W0E6B: BSF 03.50E6C: MOVWF 070E6D: NOP0E6E: BCF 03.50E6F: BSF 20.30E70: MOVF 20,W0E71: BSF 03.50E72: MOVWF 070E73: NOP0E74: BCF 03.50E75: BTFSS 07.30E76: GOTO 6750E77: BCF 07.40E78: BCF 20.40E79: MOVF 20,W0E7A: BSF 03.50E7B: MOVWF 070E7C: NOP0E7D: BCF 03.50E7E: BCF 07.30E7F: BCF 20.30E80: MOVF 20,W0E81: BSF 03.50E82: MOVWF 07.................... I2C_Write(MAG_R);0E83: MOVLW 3D0E84: BCF 03.50E85: MOVWF 4E0E86: BCF 0A.30E87: CALL 1430E88: BSF 0A.3.................... XH=i2c_read(0);0E89: CLRF 770E8A: BCF 0A.30E8B: CALL 28D0E8C: BSF 0A.30E8D: MOVF 78,W0E8E: MOVWF 4B.................... i2c_stop();0E8F: BCF 20.40E90: MOVF 20,W0E91: BSF 03.50E92: MOVWF 070E93: NOP0E94: BCF 03.50E95: BSF 20.30E96: MOVF 20,W0E97: BSF 03.50E98: MOVWF 070E99: BCF 03.50E9A: BTFSS 07.30E9B: GOTO 69A0E9C: NOP0E9D: GOTO 69E0E9E: NOP0E9F: BSF 20.40EA0: MOVF 20,W0EA1: BSF 03.50EA2: MOVWF 070EA3: NOP........................................ i2c_start();0EA4: BCF 03.50EA5: BSF 20.40EA6: MOVF 20,W0EA7: BSF 03.50EA8: MOVWF 070EA9: NOP0EAA: BCF 03.50EAB: BSF 20.30EAC: MOVF 20,W0EAD: BSF 03.50EAE: MOVWF 070EAF: NOP0EB0: BCF 03.50EB1: BCF 07.40EB2: BCF 20.40EB3: MOVF 20,W0EB4: BSF 03.50EB5: MOVWF 070EB6: NOP0EB7: BCF 03.50EB8: BCF 07.30EB9: BCF 20.30EBA: MOVF 20,W0EBB: BSF 03.50EBC: MOVWF 07.................... I2C_Write(MAG_W);0EBD: MOVLW 3C0EBE: BCF 03.50EBF: MOVWF 4E0EC0: BCF 0A.30EC1: CALL 1430EC2: BSF 0A.3.................... I2C_write(L);0EC3: MOVF 49,W0EC4: MOVWF 4E0EC5: BCF 0A.30EC6: CALL 1430EC7: BSF 0A.3.................... i2c_start();0EC8: BSF 20.40EC9: MOVF 20,W0ECA: BSF 03.50ECB: MOVWF 070ECC: NOP0ECD: BCF 03.50ECE: BSF 20.30ECF: MOVF 20,W0ED0: BSF 03.50ED1: MOVWF 070ED2: NOP0ED3: BCF 03.50ED4: BTFSS 07.30ED5: GOTO 6D40ED6: BCF 07.40ED7: BCF 20.40ED8: MOVF 20,W0ED9: BSF 03.50EDA: MOVWF 070EDB: NOP0EDC: BCF 03.50EDD: BCF 07.30EDE: BCF 20.30EDF: MOVF 20,W0EE0: BSF 03.50EE1: MOVWF 07.................... I2C_Write(MAG_R);0EE2: MOVLW 3D0EE3: BCF 03.50EE4: MOVWF 4E0EE5: BCF 0A.30EE6: CALL 1430EE7: BSF 0A.3.................... XL=i2c_read(0);0EE8: CLRF 770EE9: BCF 0A.30EEA: CALL 28D0EEB: BSF 0A.30EEC: MOVF 78,W0EED: MOVWF 4A.................... i2c_stop();0EEE: BCF 20.40EEF: MOVF 20,W0EF0: BSF 03.50EF1: MOVWF 070EF2: NOP0EF3: BCF 03.50EF4: BSF 20.30EF5: MOVF 20,W0EF6: BSF 03.50EF7: MOVWF 070EF8: BCF 03.50EF9: BTFSS 07.30EFA: GOTO 6F90EFB: NOP0EFC: GOTO 6FD0EFD: NOP0EFE: BSF 20.40EFF: MOVF 20,W0F00: BSF 03.50F01: MOVWF 070F02: NOP........................................ x = (((unsigned int16) XH << 8) + XL );0F03: BCF 03.50F04: CLRF 4F0F05: MOVF 4B,W0F06: MOVWF 4E0F07: MOVWF 4F0F08: CLRF 4E0F09: MOVF 4A,W0F0A: ADDWF 4E,W0F0B: MOVWF 780F0C: MOVF 4F,W0F0D: MOVWF 7A0F0E: BTFSC 03.00F0F: INCF 7A,F0F10: MOVF 78,W0F11: MOVWF 4C0F12: MOVF 7A,W0F13: MOVWF 4D............................................................ return x;0F14: MOVF 4C,W0F15: MOVWF 780F16: MOVF 4D,W0F17: MOVWF 79.................... }0F18: RETURN........................................ float vyska (void) //vypocet aktualni vysky panelu.................... {.................... printf("Akcelerometr5: \r\n",);*0B85: MOVLW 040B86: BSF 03.60B87: MOVWF 0D0B88: MOVLW 000B89: MOVWF 0F0B8A: BCF 0A.30B8B: BCF 03.60B8C: CALL 0DA0B8D: BSF 0A.3........................................ X= akR (AK_XH, AK_XL);0B8E: MOVLW 010B8F: MOVWF 480B90: MOVLW 020B91: MOVWF 490B92: BCF 0A.30B93: CALL 2D20B94: BSF 0A.30B95: MOVF 79,W0B96: MOVWF 220B97: MOVF 78,W0B98: MOVWF 21.................... Y= akR (AK_YH, AK_YL);0B99: MOVLW 030B9A: MOVWF 480B9B: MOVLW 040B9C: MOVWF 490B9D: BCF 0A.30B9E: CALL 2D20B9F: BSF 0A.30BA0: MOVF 79,W0BA1: MOVWF 240BA2: MOVF 78,W0BA3: MOVWF 23.................... Z= akR (AK_ZH, AK_ZL);0BA4: MOVLW 050BA5: MOVWF 480BA6: MOVLW 060BA7: MOVWF 490BA8: BCF 0A.30BA9: CALL 2D20BAA: BSF 0A.30BAB: MOVF 79,W0BAC: MOVWF 260BAD: MOVF 78,W0BAE: MOVWF 25........................................ AX=abs(X);0BAF: MOVF 22,W0BB0: MOVWF 7A0BB1: MOVF 21,W0BB2: BTFSS 22.70BB3: GOTO 3BD0BB4: MOVF 21,W0BB5: SUBLW 000BB6: MOVWF 770BB7: CLRF 7A0BB8: MOVF 22,W0BB9: BTFSS 03.00BBA: INCFSZ 22,W0BBB: SUBWF 7A,F0BBC: MOVF 77,W0BBD: MOVWF 270BBE: MOVF 7A,W0BBF: MOVWF 28.................... AY=abs(Y)+250;0BC0: MOVF 24,W0BC1: MOVWF 7A0BC2: MOVF 23,W0BC3: BTFSS 24.70BC4: GOTO 3CE0BC5: MOVF 23,W0BC6: SUBLW 000BC7: MOVWF 770BC8: CLRF 7A0BC9: MOVF 24,W0BCA: BTFSS 03.00BCB: INCFSZ 24,W0BCC: SUBWF 7A,F0BCD: MOVF 77,W0BCE: MOVWF 480BCF: MOVLW FA0BD0: ADDWF 48,W0BD1: MOVWF 290BD2: MOVF 7A,W0BD3: MOVWF 2A0BD4: BTFSC 03.00BD5: INCF 2A,F.................... AZ=abs(Z)+250;0BD6: MOVF 26,W0BD7: MOVWF 7A0BD8: MOVF 25,W0BD9: BTFSS 26.70BDA: GOTO 3E40BDB: MOVF 25,W0BDC: SUBLW 000BDD: MOVWF 770BDE: CLRF 7A0BDF: MOVF 26,W0BE0: BTFSS 03.00BE1: INCFSZ 26,W0BE2: SUBWF 7A,F0BE3: MOVF 77,W0BE4: MOVWF 480BE5: MOVLW FA0BE6: ADDWF 48,W0BE7: MOVWF 2B0BE8: MOVF 7A,W0BE9: MOVWF 2C0BEA: BTFSC 03.00BEB: INCF 2C,F........................................ float a, b;.................... a=(float)Y/Z;0BEC: MOVF 24,W0BED: MOVWF 4D0BEE: MOVF 23,W0BEF: MOVWF 4C0BF0: BCF 0A.30BF1: CALL 3DF0BF2: BSF 0A.30BF3: MOVF 77,W0BF4: MOVWF 480BF5: MOVF 78,W0BF6: MOVWF 490BF7: MOVF 79,W0BF8: MOVWF 4A0BF9: MOVF 7A,W0BFA: MOVWF 4B0BFB: MOVF 26,W0BFC: MOVWF 4D0BFD: MOVF 25,W0BFE: MOVWF 4C0BFF: BCF 0A.30C00: CALL 3DF0C01: BSF 0A.30C02: MOVF 4B,W0C03: MOVWF 600C04: MOVF 4A,W0C05: MOVWF 5F0C06: MOVF 49,W0C07: MOVWF 5E0C08: MOVF 48,W0C09: MOVWF 5D0C0A: MOVF 7A,W0C0B: MOVWF 640C0C: MOVF 79,W0C0D: MOVWF 630C0E: MOVF 78,W0C0F: MOVWF 620C10: MOVF 77,W0C11: MOVWF 610C12: BCF 0A.30C13: CALL 4040C14: BSF 0A.30C15: MOVF 7A,W0C16: MOVWF 430C17: MOVF 79,W0C18: MOVWF 420C19: MOVF 78,W0C1A: MOVWF 410C1B: MOVF 77,W0C1C: MOVWF 40.................... b=atan(a);0C1D: MOVF 43,W0C1E: MOVWF 4B0C1F: MOVF 42,W0C20: MOVWF 4A0C21: MOVF 41,W0C22: MOVWF 490C23: MOVF 40,W0C24: MOVWF 480C25: CALL 0000C26: MOVF 7A,W0C27: MOVWF 470C28: MOVF 79,W0C29: MOVWF 460C2A: MOVF 78,W0C2B: MOVWF 450C2C: MOVF 77,W0C2D: MOVWF 44.................... b = (b/3.14)*180;0C2E: MOVF 47,W0C2F: MOVWF 600C30: MOVF 46,W0C31: MOVWF 5F0C32: MOVF 45,W0C33: MOVWF 5E0C34: MOVF 44,W0C35: MOVWF 5D0C36: MOVLW C30C37: MOVWF 640C38: MOVLW F50C39: MOVWF 630C3A: MOVLW 480C3B: MOVWF 620C3C: MOVLW 800C3D: MOVWF 610C3E: BCF 0A.30C3F: CALL 4040C40: BSF 0A.30C41: MOVF 77,W0C42: MOVWF 480C43: MOVF 78,W0C44: MOVWF 490C45: MOVF 79,W0C46: MOVWF 4A0C47: MOVF 7A,W0C48: MOVWF 4B0C49: MOVWF 600C4A: MOVF 79,W0C4B: MOVWF 5F0C4C: MOVF 78,W0C4D: MOVWF 5E0C4E: MOVF 77,W0C4F: MOVWF 5D0C50: CLRF 640C51: CLRF 630C52: MOVLW 340C53: MOVWF 620C54: MOVLW 860C55: MOVWF 610C56: BCF 0A.30C57: CALL 50D0C58: BSF 0A.30C59: MOVF 7A,W0C5A: MOVWF 470C5B: MOVF 79,W0C5C: MOVWF 460C5D: MOVF 78,W0C5E: MOVWF 450C5F: MOVF 77,W0C60: MOVWF 44.................... b=abs(b);0C61: MOVF 44,W0C62: MOVWF 770C63: MOVF 45,W0C64: MOVWF 780C65: MOVF 46,W0C66: MOVWF 790C67: MOVF 47,W0C68: MOVWF 7A0C69: BCF 78.70C6A: MOVF 47,W0C6B: MOVWF 470C6C: MOVF 46,W0C6D: MOVWF 460C6E: MOVF 78,W0C6F: MOVWF 450C70: MOVF 44,W0C71: MOVWF 44........................................ if(((AX>AY) || (AX>AZ))) //indikace prevraceni panelu0C72: BTFSS 2A.70C73: GOTO 4770C74: BTFSS 28.70C75: GOTO 4940C76: GOTO 4790C77: BTFSC 28.70C78: GOTO 4830C79: MOVF 2A,W0C7A: SUBWF 28,W0C7B: BTFSS 03.00C7C: GOTO 4830C7D: BTFSS 03.20C7E: GOTO 4940C7F: MOVF 27,W0C80: SUBWF 29,W0C81: BTFSS 03.00C82: GOTO 4940C83: BTFSS 2C.70C84: GOTO 4880C85: BTFSS 28.70C86: GOTO 4940C87: GOTO 48A0C88: BTFSC 28.70C89: GOTO 4BD0C8A: MOVF 2C,W0C8B: SUBWF 28,W0C8C: BTFSS 03.00C8D: GOTO 4BD0C8E: BTFSS 03.20C8F: GOTO 4940C90: MOVF 27,W0C91: SUBWF 2B,W0C92: BTFSC 03.00C93: GOTO 4BD.................... {.................... printf("Prevracený panel)\r\n", );0C94: MOVLW 0E0C95: BSF 03.60C96: MOVWF 0D0C97: MOVLW 000C98: MOVWF 0F.................... }.................... else*0CBB: GOTO 5510CBC: BCF 03.6.................... {.................... if(Z==0) //osetreni proti deleni 00CBD: MOVF 25,F0CBE: BTFSS 03.20CBF: GOTO 4D80CC0: MOVF 26,F0CC1: BTFSS 03.20CC2: GOTO 4D8.................... {.................... if(Y>0)0CC3: BTFSC 24.70CC4: GOTO 4D30CC5: MOVF 24,F0CC6: BTFSS 03.20CC7: GOTO 4CC0CC8: MOVF 23,W0CC9: SUBLW 000CCA: BTFSC 03.00CCB: GOTO 4D3.................... {.................... b=180;0CCC: CLRF 470CCD: CLRF 460CCE: MOVLW 340CCF: MOVWF 450CD0: MOVLW 860CD1: MOVWF 44.................... }.................... else0CD2: GOTO 4D7.................... {.................... b=0;0CD3: CLRF 470CD4: CLRF 460CD5: CLRF 450CD6: CLRF 44.................... }.................... }.................... else0CD7: GOTO 550.................... {.................... if(Z>0)0CD8: BTFSC 26.70CD9: GOTO 5190CDA: MOVF 26,F0CDB: BTFSS 03.20CDC: GOTO 4E10CDD: MOVF 25,W0CDE: SUBLW 000CDF: BTFSC 03.00CE0: GOTO 519.................... {.................... if(Y>=0)0CE1: BTFSC 24.70CE2: GOTO 4FE.................... {.................... b=90+b;0CE3: BCF 03.10CE4: CLRF 600CE5: CLRF 5F0CE6: MOVLW 340CE7: MOVWF 5E0CE8: MOVLW 850CE9: MOVWF 5D0CEA: MOVF 47,W0CEB: MOVWF 640CEC: MOVF 46,W0CED: MOVWF 630CEE: MOVF 45,W0CEF: MOVWF 620CF0: MOVF 44,W0CF1: MOVWF 610CF2: BCF 0A.30CF3: CALL 5820CF4: BSF 0A.30CF5: MOVF 7A,W0CF6: MOVWF 470CF7: MOVF 79,W0CF8: MOVWF 460CF9: MOVF 78,W0CFA: MOVWF 450CFB: MOVF 77,W0CFC: MOVWF 44.................... }.................... else0CFD: GOTO 518.................... {.................... b=90-b;0CFE: BSF 03.10CFF: CLRF 600D00: CLRF 5F0D01: MOVLW 340D02: MOVWF 5E0D03: MOVLW 850D04: MOVWF 5D0D05: MOVF 47,W0D06: MOVWF 640D07: MOVF 46,W0D08: MOVWF 630D09: MOVF 45,W0D0A: MOVWF 620D0B: MOVF 44,W0D0C: MOVWF 610D0D: BCF 0A.30D0E: CALL 5820D0F: BSF 0A.30D10: MOVF 7A,W0D11: MOVWF 470D12: MOVF 79,W0D13: MOVWF 460D14: MOVF 78,W0D15: MOVWF 450D16: MOVF 77,W0D17: MOVWF 44.................... }.................... }.................... else0D18: GOTO 550.................... {.................... if(Y>=0)0D19: BTFSC 24.70D1A: GOTO 536.................... {.................... b=180-b;0D1B: BSF 03.10D1C: CLRF 600D1D: CLRF 5F0D1E: MOVLW 340D1F: MOVWF 5E0D20: MOVLW 860D21: MOVWF 5D0D22: MOVF 47,W0D23: MOVWF 640D24: MOVF 46,W0D25: MOVWF 630D26: MOVF 45,W0D27: MOVWF 620D28: MOVF 44,W0D29: MOVWF 610D2A: BCF 0A.30D2B: CALL 5820D2C: BSF 0A.30D2D: MOVF 7A,W0D2E: MOVWF 470D2F: MOVF 79,W0D30: MOVWF 460D31: MOVF 78,W0D32: MOVWF 450D33: MOVF 77,W0D34: MOVWF 44.................... }.................... else0D35: GOTO 550.................... {.................... b=270+b;0D36: BCF 03.10D37: CLRF 600D38: CLRF 5F0D39: MOVLW 070D3A: MOVWF 5E0D3B: MOVLW 870D3C: MOVWF 5D0D3D: MOVF 47,W0D3E: MOVWF 640D3F: MOVF 46,W0D40: MOVWF 630D41: MOVF 45,W0D42: MOVWF 620D43: MOVF 44,W0D44: MOVWF 610D45: BCF 0A.30D46: CALL 5820D47: BSF 0A.30D48: MOVF 7A,W0D49: MOVWF 470D4A: MOVF 79,W0D4B: MOVWF 460D4C: MOVF 78,W0D4D: MOVWF 450D4E: MOVF 77,W0D4F: MOVWF 440D50: BSF 03.6.................... }.................... }........................................ }................................................................................ }.................... printf("uhel namìreny %10.2f \r\n", b);0D51: MOVLW 220D52: MOVWF 0D0D53: MOVLW 000D54: MOVWF 0F0D55: MOVLW 0E0D56: BCF 03.60D57: MOVWF 480D58: BCF 0A.30D59: CALL 6C30D5A: BSF 0A.30D5B: MOVLW 090D5C: MOVWF 040D5D: MOVF 47,W0D5E: MOVWF 4B0D5F: MOVF 46,W0D60: MOVWF 4A0D61: MOVF 45,W0D62: MOVWF 490D63: MOVF 44,W0D64: MOVWF 480D65: MOVLW 020D66: MOVWF 4C0D67: GOTO 28E0D68: MOVLW 200D69: MOVWF 550D6A: BCF 0A.30D6B: CALL 0B60D6C: BSF 0A.30D6D: MOVLW 0D0D6E: MOVWF 550D6F: BCF 0A.30D70: CALL 0B60D71: BSF 0A.30D72: MOVLW 0A0D73: MOVWF 550D74: BCF 0A.30D75: CALL 0B60D76: BSF 0A.3.................... return b;0D77: MOVF 44,W0D78: MOVWF 770D79: MOVF 45,W0D7A: MOVWF 780D7B: MOVF 46,W0D7C: MOVWF 790D7D: MOVF 47,W0D7E: MOVWF 7A........................................ }0D7F: RETURN........................................ float azimut (void) //vypocet aktualni vysky panelu.................... {.................... X= magR (MAG_XH, MAG_XL);*1000: MOVLW 031001: MOVWF 481002: MOVLW 041003: MOVWF 491004: BCF 0A.41005: BSF 0A.31006: CALL 6441007: BSF 0A.41008: BCF 0A.31009: MOVF 79,W100A: MOVWF 22100B: MOVF 78,W100C: MOVWF 21.................... Y= magR (MAG_YH, MAG_YL);100D: MOVLW 07100E: MOVWF 48100F: MOVLW 081010: MOVWF 491011: BCF 0A.41012: BSF 0A.31013: CALL 6441014: BSF 0A.41015: BCF 0A.31016: MOVF 79,W1017: MOVWF 241018: MOVF 78,W1019: MOVWF 23.................... Z= magR (MAG_ZH, MAG_ZL);101A: MOVLW 05101B: MOVWF 48101C: MOVLW 06101D: MOVWF 49101E: BCF 0A.4101F: BSF 0A.31020: CALL 6441021: BSF 0A.41022: BCF 0A.31023: MOVF 79,W1024: MOVWF 261025: MOVF 78,W1026: MOVWF 25.................................................................................................... AX=abs(X);1027: MOVF 22,W1028: MOVWF 7A1029: MOVF 21,W102A: BTFSS 22.7102B: GOTO 035102C: MOVF 21,W102D: SUBLW 00102E: MOVWF 77102F: CLRF 7A1030: MOVF 22,W1031: BTFSS 03.01032: INCFSZ 22,W1033: SUBWF 7A,F1034: MOVF 77,W1035: MOVWF 271036: MOVF 7A,W1037: MOVWF 28.................... AY=abs(Y);1038: MOVF 24,W1039: MOVWF 7A103A: MOVF 23,W103B: BTFSS 24.7103C: GOTO 046103D: MOVF 23,W103E: SUBLW 00103F: MOVWF 771040: CLRF 7A1041: MOVF 24,W1042: BTFSS 03.01043: INCFSZ 24,W1044: SUBWF 7A,F1045: MOVF 77,W1046: MOVWF 291047: MOVF 7A,W1048: MOVWF 2A.................... AZ=abs(Z);1049: MOVF 26,W104A: MOVWF 7A104B: MOVF 25,W104C: BTFSS 26.7104D: GOTO 057104E: MOVF 25,W104F: SUBLW 001050: MOVWF 771051: CLRF 7A1052: MOVF 26,W1053: BTFSS 03.01054: INCFSZ 26,W1055: SUBWF 7A,F1056: MOVF 77,W1057: MOVWF 2B1058: MOVF 7A,W1059: MOVWF 2C........................................ float a, b;.................... a=(float)Y/X;105A: MOVF 24,W105B: MOVWF 4D105C: MOVF 23,W105D: MOVWF 4C105E: BCF 0A.4105F: CALL 3DF1060: BSF 0A.41061: MOVF 77,W1062: MOVWF 481063: MOVF 78,W1064: MOVWF 491065: MOVF 79,W1066: MOVWF 4A1067: MOVF 7A,W1068: MOVWF 4B1069: MOVF 22,W106A: MOVWF 4D106B: MOVF 21,W106C: MOVWF 4C106D: BCF 0A.4106E: CALL 3DF106F: BSF 0A.41070: MOVF 4B,W1071: MOVWF 601072: MOVF 4A,W1073: MOVWF 5F1074: MOVF 49,W1075: MOVWF 5E1076: MOVF 48,W1077: MOVWF 5D1078: MOVF 7A,W1079: MOVWF 64107A: MOVF 79,W107B: MOVWF 63107C: MOVF 78,W107D: MOVWF 62107E: MOVF 77,W107F: MOVWF 611080: BCF 0A.41081: CALL 4041082: BSF 0A.41083: MOVF 7A,W1084: MOVWF 431085: MOVF 79,W1086: MOVWF 421087: MOVF 78,W1088: MOVWF 411089: MOVF 77,W108A: MOVWF 40.................... b=atan(a);108B: MOVF 43,W108C: MOVWF 4B108D: MOVF 42,W108E: MOVWF 4A108F: MOVF 41,W1090: MOVWF 491091: MOVF 40,W1092: MOVWF 481093: BCF 0A.41094: BSF 0A.31095: CALL 0001096: BSF 0A.41097: BCF 0A.31098: MOVF 7A,W1099: MOVWF 47109A: MOVF 79,W109B: MOVWF 46109C: MOVF 78,W109D: MOVWF 45109E: MOVF 77,W109F: MOVWF 44.................... b = (b/3.14)*180;10A0: MOVF 47,W10A1: MOVWF 6010A2: MOVF 46,W10A3: MOVWF 5F10A4: MOVF 45,W10A5: MOVWF 5E10A6: MOVF 44,W10A7: MOVWF 5D10A8: MOVLW C310A9: MOVWF 6410AA: MOVLW F510AB: MOVWF 6310AC: MOVLW 4810AD: MOVWF 6210AE: MOVLW 8010AF: MOVWF 6110B0: BCF 0A.410B1: CALL 40410B2: BSF 0A.410B3: MOVF 77,W10B4: MOVWF 4810B5: MOVF 78,W10B6: MOVWF 4910B7: MOVF 79,W10B8: MOVWF 4A10B9: MOVF 7A,W10BA: MOVWF 4B10BB: MOVWF 6010BC: MOVF 4A,W10BD: MOVWF 5F10BE: MOVF 49,W10BF: MOVWF 5E10C0: MOVF 48,W10C1: MOVWF 5D10C2: CLRF 6410C3: CLRF 6310C4: MOVLW 3410C5: MOVWF 6210C6: MOVLW 8610C7: MOVWF 6110C8: BCF 0A.410C9: CALL 50D10CA: BSF 0A.410CB: MOVF 7A,W10CC: MOVWF 4710CD: MOVF 79,W10CE: MOVWF 4610CF: MOVF 78,W10D0: MOVWF 4510D1: MOVF 77,W10D2: MOVWF 44.................... b=abs(b);10D3: MOVF 44,W10D4: MOVWF 7710D5: MOVF 45,W10D6: MOVWF 7810D7: MOVF 46,W10D8: MOVWF 7910D9: MOVF 47,W10DA: MOVWF 7A10DB: BCF 78.710DC: MOVF 47,W10DD: MOVWF 4710DE: MOVF 46,W10DF: MOVWF 4610E0: MOVF 78,W10E1: MOVWF 4510E2: MOVF 44,W10E3: MOVWF 44.................................................................................................... if(X==0) //osetreni proti deleni 010E4: MOVF 21,F10E5: BTFSS 03.210E6: GOTO 10110E7: MOVF 22,F10E8: BTFSS 03.210E9: GOTO 101.................... {.................... if(Y>0)10EA: BTFSC 24.710EB: GOTO 0FA10EC: MOVF 24,F10ED: BTFSS 03.210EE: GOTO 0F310EF: MOVF 23,W10F0: SUBLW 0010F1: BTFSC 03.010F2: GOTO 0FA.................... {.................... b=90;10F3: CLRF 4710F4: CLRF 4610F5: MOVLW 3410F6: MOVWF 4510F7: MOVLW 8510F8: MOVWF 44.................... }.................... else10F9: GOTO 100.................... {.................... b=270;10FA: CLRF 4710FB: CLRF 4610FC: MOVLW 0710FD: MOVWF 4510FE: MOVLW 8710FF: MOVWF 44.................... }.................... }.................... else1100: GOTO 15E.................... {.................... if(X>0)1101: BTFSC 22.71102: GOTO 1271103: MOVF 22,F1104: BTFSS 03.21105: GOTO 10A1106: MOVF 21,W1107: SUBLW 001108: BTFSC 03.01109: GOTO 127.................... {.................... if(Y>=0)110A: BTFSS 24.7.................... {.................... b=b;.................... }.................... else110B: GOTO 126.................... {.................... b=360-b;110C: BSF 03.1110D: CLRF 60110E: CLRF 5F110F: MOVLW 341110: MOVWF 5E1111: MOVLW 871112: MOVWF 5D1113: MOVF 47,W1114: MOVWF 641115: MOVF 46,W1116: MOVWF 631117: MOVF 45,W1118: MOVWF 621119: MOVF 44,W111A: MOVWF 61111B: BCF 0A.4111C: CALL 582111D: BSF 0A.4111E: MOVF 7A,W111F: MOVWF 471120: MOVF 79,W1121: MOVWF 461122: MOVF 78,W1123: MOVWF 451124: MOVF 77,W1125: MOVWF 44.................... }.................... }.................... else1126: GOTO 15E.................... {.................... if(Y>=0)1127: BTFSC 24.71128: GOTO 144.................... {.................... b=180-b;1129: BSF 03.1112A: CLRF 60112B: CLRF 5F112C: MOVLW 34112D: MOVWF 5E112E: MOVLW 86112F: MOVWF 5D1130: MOVF 47,W1131: MOVWF 641132: MOVF 46,W1133: MOVWF 631134: MOVF 45,W1135: MOVWF 621136: MOVF 44,W1137: MOVWF 611138: BCF 0A.41139: CALL 582113A: BSF 0A.4113B: MOVF 7A,W113C: MOVWF 47113D: MOVF 79,W113E: MOVWF 46113F: MOVF 78,W1140: MOVWF 451141: MOVF 77,W1142: MOVWF 44.................... }.................... else1143: GOTO 15E.................... {.................... b=180+b;1144: BCF 03.11145: CLRF 601146: CLRF 5F1147: MOVLW 341148: MOVWF 5E1149: MOVLW 86114A: MOVWF 5D114B: MOVF 47,W114C: MOVWF 64114D: MOVF 46,W114E: MOVWF 63114F: MOVF 45,W1150: MOVWF 621151: MOVF 44,W1152: MOVWF 611153: BCF 0A.41154: CALL 5821155: BSF 0A.41156: MOVF 7A,W1157: MOVWF 471158: MOVF 79,W1159: MOVWF 46115A: MOVF 78,W115B: MOVWF 45115C: MOVF 77,W115D: MOVWF 44.................... }.................... }........................................ }........................................ return b;115E: MOVF 44,W115F: MOVWF 771160: MOVF 45,W1161: MOVWF 781162: MOVF 46,W1163: MOVWF 791164: MOVF 47,W1165: MOVWF 7A........................................ }1166: RETURN........................................ void motorA (int8 H) //pro ovladani prvniho motoru nastaveni vysky.................... {.................... switch(H){*0120: MOVF 40,W0121: XORLW 010122: BTFSC 03.20123: GOTO 1280124: XORLW 030125: BTFSC 03.20126: GOTO 1310127: GOTO 13A.................... case 1: //reverzní chod.................... output_low (AIN2);0128: BSF 03.50129: BCF 08.1012A: BCF 03.5012B: BCF 08.1.................... output_high (AIN1);012C: BSF 03.5012D: BCF 08.0012E: BCF 03.5012F: BSF 08.0.................... break;0130: GOTO 142........................................ case 2: //dopøedu.................... output_low (AIN1);0131: BSF 03.50132: BCF 08.00133: BCF 03.50134: BCF 08.0.................... output_high (AIN2);0135: BSF 03.50136: BCF 08.10137: BCF 03.50138: BSF 08.1.................... break;0139: GOTO 142........................................ default:.................... output_low (AIN2);013A: BSF 03.5013B: BCF 08.1013C: BCF 03.5013D: BCF 08.1.................... output_low (AIN1);013E: BSF 03.5013F: BCF 08.00140: BCF 03.50141: BCF 08.0.................... }.................... }0142: RETURN........................................ void motorB (int8 H) //pro ovladani prvniho motoru nastaveni vysky.................... {.................... switch(H){*07C5: MOVF 40,W07C6: XORLW 0107C7: BTFSC 03.207C8: GOTO 7CD07C9: XORLW 0307CA: BTFSC 03.207CB: GOTO 7D607CC: GOTO 7DF.................... case 1: //reverzní chod.................... output_low (BIN2);07CD: BSF 03.507CE: BCF 08.307CF: BCF 03.507D0: BCF 08.3.................... output_high (BIN1);07D1: BSF 03.507D2: BCF 08.207D3: BCF 03.507D4: BSF 08.2.................... break;07D5: GOTO 7E7........................................ case 2: //dopøedu.................... output_low (BIN1);07D6: BSF 03.507D7: BCF 08.207D8: BCF 03.507D9: BCF 08.2.................... output_high (BIN2);07DA: BSF 03.507DB: BCF 08.307DC: BCF 03.507DD: BSF 08.3.................... break;07DE: GOTO 7E7........................................ default:.................... output_low (BIN2);07DF: BSF 03.507E0: BCF 08.307E1: BCF 03.507E2: BCF 08.3.................... output_low (BIN1);07E3: BSF 03.507E4: BCF 08.207E5: BCF 03.507E6: BCF 08.2.................... }.................... }07E7: RETURN........................................ void vyska_set (int8 H) //slouzi pro nastaveni nove vysky panelu.................... {.................... printf("Akcelerometr4: \r\n",);*0D80: MOVLW 3A0D81: BSF 03.60D82: MOVWF 0D0D83: MOVLW 000D84: MOVWF 0F0D85: BCF 0A.30D86: BCF 03.60D87: CALL 0DA0D88: BSF 0A.3.................... float a;.................... int16 b,c;........................................ a=vyska();0D89: CALL 3850D8A: MOVF 7A,W0D8B: MOVWF 3B0D8C: MOVF 79,W0D8D: MOVWF 3A0D8E: MOVF 78,W0D8F: MOVWF 390D90: MOVF 77,W0D91: MOVWF 38.................... b= (int16) a;0D92: MOVF 3B,W0D93: MOVWF 430D94: MOVF 3A,W0D95: MOVWF 420D96: MOVF 39,W0D97: MOVWF 410D98: MOVF 38,W0D99: MOVWF 400D9A: BCF 0A.30D9B: CALL 7260D9C: BSF 0A.30D9D: MOVF 79,W0D9E: MOVWF 3D0D9F: MOVF 78,W0DA0: MOVWF 3C........................................ if(b>350)0DA1: MOVF 3D,W0DA2: SUBLW 000DA3: BTFSC 03.00DA4: GOTO 5AF0DA5: XORLW FF0DA6: BTFSS 03.20DA7: GOTO 5AC0DA8: MOVF 3C,W0DA9: SUBLW 5E0DAA: BTFSC 03.00DAB: GOTO 5AF.................... {.................... b=0;0DAC: CLRF 3D0DAD: CLRF 3C.................... }.................... else0DAE: GOTO 5AF.................... {........................................ }.................... c=abs(H-b);0DAF: MOVF 3C,W0DB0: SUBWF 37,W0DB1: MOVWF 400DB2: CLRF 410DB3: MOVF 3D,W0DB4: BTFSS 03.00DB5: INCFSZ 3D,W0DB6: SUBWF 41,F0DB7: MOVF 41,W0DB8: MOVWF 3F0DB9: MOVF 40,W0DBA: MOVWF 3E........................................ while(c>2) //maximalni odchylka uhlu, aby nebylo potreba panelem hybat.................... {0DBB: MOVF 3F,F0DBC: BTFSS 03.20DBD: GOTO 5C20DBE: MOVF 3E,W0DBF: SUBLW 020DC0: BTFSC 03.00DC1: GOTO 61E.................... while(H!=b) //probiha dokud se uhel panelu nerovna zadanemu na cele stupne.................... {0DC2: MOVF 3C,W0DC3: SUBWF 37,W0DC4: BTFSS 03.20DC5: GOTO 5C90DC6: MOVF 3D,F0DC7: BTFSC 03.20DC8: GOTO 61D........................................ if(H>b)0DC9: MOVF 3D,F0DCA: BTFSS 03.20DCB: GOTO 5D60DCC: MOVF 37,W0DCD: SUBWF 3C,W0DCE: BTFSC 03.00DCF: GOTO 5D6.................... {.................... motorA(2);0DD0: MOVLW 020DD1: MOVWF 400DD2: BCF 0A.30DD3: CALL 1200DD4: BSF 0A.3........................................ }.................... else0DD5: GOTO 5DB.................... {.................... motorA(1);0DD6: MOVLW 010DD7: MOVWF 400DD8: BCF 0A.30DD9: CALL 1200DDA: BSF 0A.3.................... }........................................ delay_ms (50); //cas sepnuti motoru0DDB: MOVLW 320DDC: MOVWF 400DDD: BCF 0A.30DDE: CALL 1C80DDF: BSF 0A.3........................................ motorA(3); //vypne motor0DE0: MOVLW 030DE1: MOVWF 400DE2: BCF 0A.30DE3: CALL 1200DE4: BSF 0A.3.................... delay_ms (50); //doma na ustaleni panelu pred merenim0DE5: MOVLW 320DE6: MOVWF 400DE7: BCF 0A.30DE8: CALL 1C80DE9: BSF 0A.3.................... a=vyska();0DEA: CALL 3850DEB: MOVF 7A,W0DEC: MOVWF 3B0DED: MOVF 79,W0DEE: MOVWF 3A0DEF: MOVF 78,W0DF0: MOVWF 390DF1: MOVF 77,W0DF2: MOVWF 38.................... b= (int16) a;0DF3: MOVF 3B,W0DF4: MOVWF 430DF5: MOVF 3A,W0DF6: MOVWF 420DF7: MOVF 39,W0DF8: MOVWF 410DF9: MOVF 38,W0DFA: MOVWF 400DFB: BCF 0A.30DFC: CALL 7260DFD: BSF 0A.30DFE: MOVF 79,W0DFF: MOVWF 3D0E00: MOVF 78,W0E01: MOVWF 3C........................................ if(b>350) //osetreni pro uhel 0. Zabezpeci ze neprejde stav z 0 na 359 kdy by se solar zacal tocit na druhou stranu0E02: MOVF 3D,W0E03: SUBLW 000E04: BTFSC 03.00E05: GOTO 6100E06: XORLW FF0E07: BTFSS 03.20E08: GOTO 60D0E09: MOVF 3C,W0E0A: SUBLW 5E0E0B: BTFSC 03.00E0C: GOTO 610.................... {.................... b=0;0E0D: CLRF 3D0E0E: CLRF 3C.................... }.................... else0E0F: GOTO 610.................... {.................... b=b;.................... }.................... c=abs(H-b);0E10: MOVF 3C,W0E11: SUBWF 37,W0E12: MOVWF 400E13: CLRF 410E14: MOVF 3D,W0E15: BTFSS 03.00E16: INCFSZ 3D,W0E17: SUBWF 41,F0E18: MOVF 41,W0E19: MOVWF 3F0E1A: MOVF 40,W0E1B: MOVWF 3E.................... }0E1C: GOTO 5C2.................... }0E1D: GOTO 5BB.................... motorA(3); //vypne motor0E1E: MOVLW 030E1F: MOVWF 400E20: BCF 0A.30E21: CALL 1200E22: BSF 0A.3.................... printf("Podaøené nastavení výka: %Ld\r\n", b);0E23: MOVLW 440E24: BSF 03.60E25: MOVWF 0D0E26: MOVLW 000E27: MOVWF 0F0E28: MOVLW 1A0E29: BCF 03.60E2A: MOVWF 480E2B: BCF 0A.30E2C: CALL 6C30E2D: BSF 0A.30E2E: MOVLW 100E2F: MOVWF 040E30: MOVF 3D,W0E31: MOVWF 410E32: MOVF 3C,W0E33: MOVWF 400E34: BCF 0A.30E35: CALL 7450E36: BSF 0A.30E37: MOVLW 0D0E38: MOVWF 550E39: BCF 0A.30E3A: CALL 0B60E3B: BSF 0A.30E3C: MOVLW 0A0E3D: MOVWF 550E3E: BCF 0A.30E3F: CALL 0B60E40: BSF 0A.3.................... }0E41: BCF 0A.30E42: BSF 0A.40E43: GOTO 281 (RETURN)........................................ void azimut_set (int8 H) //slouzi pro nastaveni nove vysky panelu.................... {.................... float a;.................... int16 b,c;........................................ a=azimut();*0F19: BSF 0A.40F1A: BCF 0A.30F1B: CALL 0000F1C: BCF 0A.40F1D: BSF 0A.30F1E: MOVF 7A,W0F1F: MOVWF 3B0F20: MOVF 79,W0F21: MOVWF 3A0F22: MOVF 78,W0F23: MOVWF 390F24: MOVF 77,W0F25: MOVWF 38.................... b= (int16) a;0F26: MOVF 3B,W0F27: MOVWF 430F28: MOVF 3A,W0F29: MOVWF 420F2A: MOVF 39,W0F2B: MOVWF 410F2C: MOVF 38,W0F2D: MOVWF 400F2E: BCF 0A.30F2F: CALL 7260F30: BSF 0A.30F31: MOVF 79,W0F32: MOVWF 3D0F33: MOVF 78,W0F34: MOVWF 3C.................... //printf("auhel pro mereni: %Ld(procenta)\r\n", b);.................... if(b>350)0F35: MOVF 3D,W0F36: SUBLW 000F37: BTFSC 03.00F38: GOTO 7430F39: XORLW FF0F3A: BTFSS 03.20F3B: GOTO 7400F3C: MOVF 3C,W0F3D: SUBLW 5E0F3E: BTFSC 03.00F3F: GOTO 743.................... {.................... b=0;0F40: CLRF 3D0F41: CLRF 3C.................... }.................... else0F42: GOTO 743.................... {........................................ }.................... c=abs(H-b);0F43: MOVF 3C,W0F44: SUBWF 37,W0F45: MOVWF 400F46: CLRF 410F47: MOVF 3D,W0F48: BTFSS 03.00F49: INCFSZ 3D,W0F4A: SUBWF 41,F0F4B: MOVF 41,W0F4C: MOVWF 3F0F4D: MOVF 40,W0F4E: MOVWF 3E........................................ while(c>3) //maximalni odchylka uhlu, aby nebylo potreba panelem hybat.................... {0F4F: MOVF 3F,F0F50: BTFSS 03.20F51: GOTO 7560F52: MOVF 3E,W0F53: SUBLW 030F54: BTFSC 03.00F55: GOTO 7B6.................... while(H!=b) //probiha dokud se uhel panelu nerovna zadanemu na cele stupne.................... {0F56: MOVF 3C,W0F57: SUBWF 37,W0F58: BTFSS 03.20F59: GOTO 75D0F5A: MOVF 3D,F0F5B: BTFSC 03.20F5C: GOTO 7B5........................................ if(H>b)0F5D: MOVF 3D,F0F5E: BTFSS 03.20F5F: GOTO 76A0F60: MOVF 37,W0F61: SUBWF 3C,W0F62: BTFSC 03.00F63: GOTO 76A.................... {.................... motorB(2);0F64: MOVLW 020F65: MOVWF 400F66: BCF 0A.30F67: CALL 7C50F68: BSF 0A.3........................................ }.................... else0F69: GOTO 76F.................... {.................... motorB(1);0F6A: MOVLW 010F6B: MOVWF 400F6C: BCF 0A.30F6D: CALL 7C50F6E: BSF 0A.3.................... }........................................ delay_ms (50); //cas sepnuti motoru0F6F: MOVLW 320F70: MOVWF 400F71: BCF 0A.30F72: CALL 1C80F73: BSF 0A.3........................................ motorB(3); //vypne motor0F74: MOVLW 030F75: MOVWF 400F76: BCF 0A.30F77: CALL 7C50F78: BSF 0A.3.................... delay_ms (50); //doma na ustaleni panelu pred merenim0F79: MOVLW 320F7A: MOVWF 400F7B: BCF 0A.30F7C: CALL 1C80F7D: BSF 0A.3.................... a=azimut();0F7E: BSF 0A.40F7F: BCF 0A.30F80: CALL 0000F81: BCF 0A.40F82: BSF 0A.30F83: MOVF 7A,W0F84: MOVWF 3B0F85: MOVF 79,W0F86: MOVWF 3A0F87: MOVF 78,W0F88: MOVWF 390F89: MOVF 77,W0F8A: MOVWF 38.................... b= (int16) a;0F8B: MOVF 3B,W0F8C: MOVWF 430F8D: MOVF 3A,W0F8E: MOVWF 420F8F: MOVF 39,W0F90: MOVWF 410F91: MOVF 38,W0F92: MOVWF 400F93: BCF 0A.30F94: CALL 7260F95: BSF 0A.30F96: MOVF 79,W0F97: MOVWF 3D0F98: MOVF 78,W0F99: MOVWF 3C........................................ if(b>350) //osetreni pro uhel 0. Zabezpeci ze neprejde stav z 0 na 359 kdy by se solar zacal tocit na druhou stranu0F9A: MOVF 3D,W0F9B: SUBLW 000F9C: BTFSC 03.00F9D: GOTO 7A80F9E: XORLW FF0F9F: BTFSS 03.20FA0: GOTO 7A50FA1: MOVF 3C,W0FA2: SUBLW 5E0FA3: BTFSC 03.00FA4: GOTO 7A8.................... {.................... b=0;0FA5: CLRF 3D0FA6: CLRF 3C.................... }.................... else0FA7: GOTO 7A8.................... {.................... b=b;.................... }.................... c=abs(H-b);0FA8: MOVF 3C,W0FA9: SUBWF 37,W0FAA: MOVWF 400FAB: CLRF 410FAC: MOVF 3D,W0FAD: BTFSS 03.00FAE: INCFSZ 3D,W0FAF: SUBWF 41,F0FB0: MOVF 41,W0FB1: MOVWF 3F0FB2: MOVF 40,W0FB3: MOVWF 3E.................... }0FB4: GOTO 756.................... }0FB5: GOTO 74F.................... motorA(3); //vypne motor0FB6: MOVLW 030FB7: MOVWF 400FB8: BCF 0A.30FB9: CALL 1200FBA: BSF 0A.3.................... printf("Podaøené nastavení azimut: %Ld\r\n", b);0FBB: MOVLW 640FBC: BSF 03.60FBD: MOVWF 0D0FBE: MOVLW 000FBF: MOVWF 0F0FC0: MOVLW 1B0FC1: BCF 03.60FC2: MOVWF 480FC3: BCF 0A.30FC4: CALL 6C30FC5: BSF 0A.30FC6: MOVLW 100FC7: MOVWF 040FC8: MOVF 3D,W0FC9: MOVWF 410FCA: MOVF 3C,W0FCB: MOVWF 400FCC: BCF 0A.30FCD: CALL 7450FCE: BSF 0A.30FCF: MOVLW 0D0FD0: MOVWF 550FD1: BCF 0A.30FD2: CALL 0B60FD3: BSF 0A.30FD4: MOVLW 0A0FD5: MOVWF 550FD6: BCF 0A.30FD7: CALL 0B60FD8: BSF 0A.3.................... }0FD9: BCF 0A.30FDA: BSF 0A.40FDB: GOTO 287 (RETURN)............................................................ void main().................... {*11DA: CLRF 0411DB: BCF 03.711DC: MOVLW 1F11DD: ANDWF 03,F11DE: MOVLW 7111DF: BSF 03.511E0: MOVWF 0F11E1: MOVF 0F,W11E2: BCF 03.511E3: BCF 20.711E4: MOVF 20,W11E5: BSF 03.511E6: MOVWF 0711E7: BCF 03.511E8: BSF 07.711E9: BSF 03.511EA: BSF 03.611EB: MOVF 09,W11EC: ANDLW C011ED: MOVWF 0911EE: BCF 03.611EF: BCF 1F.411F0: BCF 1F.511F1: MOVLW 0011F2: BSF 03.611F3: MOVWF 0811F4: BCF 03.511F5: CLRF 0711F6: CLRF 0811F7: CLRF 09........................................ setup_adc_ports(NO_ANALOGS|VSS_VDD);*11FB: BSF 03.511FC: BSF 03.611FD: MOVF 09,W11FE: ANDLW C011FF: MOVWF 091200: BCF 03.61201: BCF 1F.41202: BCF 1F.51203: MOVLW 001204: BSF 03.61205: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_2);1206: BCF 03.51207: BCF 03.61208: BCF 1F.61209: BCF 1F.7120A: BSF 03.5120B: BCF 1F.7120C: BCF 03.5120D: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);120E: BCF 14.5120F: BCF 20.51210: MOVF 20,W1211: BSF 03.51212: MOVWF 071213: BCF 03.51214: BSF 20.41215: MOVF 20,W1216: BSF 03.51217: MOVWF 071218: BCF 03.51219: BCF 20.3121A: MOVF 20,W121B: BSF 03.5121C: MOVWF 07121D: MOVLW 01121E: BCF 03.5121F: MOVWF 141220: MOVLW 001221: BSF 03.51222: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);1223: MOVF 01,W1224: ANDLW C71225: IORLW 081226: MOVWF 01.................... setup_timer_1(T1_DISABLED);1227: BCF 03.51228: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);1229: MOVLW 00122A: MOVWF 78122B: MOVWF 12122C: MOVLW 00122D: BSF 03.5122E: MOVWF 12.................... setup_ccp1(CCP_OFF);122F: BCF 03.51230: BSF 20.21231: MOVF 20,W1232: BSF 03.51233: MOVWF 071234: BCF 03.51235: CLRF 171236: BSF 03.51237: CLRF 1B1238: CLRF 1C1239: MOVLW 01123A: MOVWF 1D.................... setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard123B: BCF 03.5123C: BSF 03.6123D: CLRF 07123E: CLRF 08123F: CLRF 09........................................ setup_adc_ports(PIN_A0); //piny pro A/D RA01240: BSF 03.51241: MOVF 09,W1242: ANDLW C01243: MOVWF 091244: BCF 03.61245: BCF 1F.41246: BCF 1F.51247: MOVLW 281248: BSF 03.61249: MOVWF 08.................... setup_adc_ports(PIN_A1); //piny pro A/D RA1124A: MOVF 09,W124B: ANDLW C0124C: MOVWF 09124D: BCF 03.6124E: BCF 1F.4124F: BCF 1F.51250: MOVLW 291251: BSF 03.61252: MOVWF 08........................................ printf("Akcelerometr: \r\n",);1253: MOVLW 851254: BCF 03.51255: MOVWF 0D1256: MOVLW 001257: MOVWF 0F1258: BCF 0A.41259: BCF 03.6125A: CALL 0DA125B: BSF 0A.4........................................ motorA(3);125C: MOVLW 03125D: MOVWF 40125E: BCF 0A.4125F: CALL 1201260: BSF 0A.4........................................ float a, b;.................... unsigned int value1=10,value2=10;1261: MOVLW 0A1262: MOVWF 351263: MOVWF 36............................................................ setAK(); //nastaveni akcelerometru1264: BCF 0A.41265: GOTO 18D1266: BSF 0A.4.................... setmag();1267: BCF 0A.41268: GOTO 1DC1269: BSF 0A.4.................... printf("Akcelerometr1: \r\n",);126A: MOVLW 8E126B: BSF 03.6126C: MOVWF 0D126D: MOVLW 00126E: MOVWF 0F126F: BCF 0A.41270: BCF 03.61271: CALL 0DA1272: BSF 0A.4.................... while(TRUE).................... {........................................ printf("Akcelerometr2: \r\n",);1273: MOVLW 981274: BSF 03.61275: MOVWF 0D1276: MOVLW 001277: MOVWF 0F1278: BCF 0A.41279: BCF 03.6127A: CALL 0DA127B: BSF 0A.4........................................................................................................................ /// set_adc_channel(0); //nastavi AD na kanál 0 (RA0).................... /// read_adc(ADC_START_ONLY); // Spustime A/D prevod.................... // Delay_ms(1);.................... // while(!adc_done()); // Cekame na dokonceni prevodu.................... // value1=read_adc(); // Precteme hodnotu z prevodniku.................... vyska_set (90);127C: MOVLW 5A127D: MOVWF 37127E: BCF 0A.4127F: BSF 0A.31280: GOTO 5801281: BSF 0A.41282: BCF 0A.3.................... azimut_set(0);1283: CLRF 371284: BCF 0A.41285: BSF 0A.31286: GOTO 7191287: BSF 0A.41288: BCF 0A.3.................... printf("zadaný azimut %d \r\n", value1);1289: MOVLW A2128A: BSF 03.6128B: MOVWF 0D128C: MOVLW 00128D: MOVWF 0F128E: MOVLW 0E128F: BCF 03.61290: MOVWF 481291: BCF 0A.41292: CALL 6C31293: BSF 0A.41294: MOVF 35,W1295: MOVWF 371296: MOVLW 1F1297: MOVWF 381298: GOTO 1671299: MOVLW 20129A: MOVWF 55129B: BCF 0A.4129C: CALL 0B6129D: BSF 0A.4129E: MOVLW 0D129F: MOVWF 5512A0: BCF 0A.412A1: CALL 0B612A2: BSF 0A.412A3: MOVLW 0A12A4: MOVWF 5512A5: BCF 0A.412A6: CALL 0B612A7: BSF 0A.4........................................ // set_adc_channel(1); //nastavi AD na kanál 1 (RA1).................... // read_adc(ADC_START_ONLY); // Spustime A/D prevod.................... // Delay_ms(1);.................... // while(!adc_done()); // Cekame na dokonceni prevodu.................... // value2=read_adc();.................... //vyska_set (90);............................................................ delay_ms (2000);12A8: MOVLW 0812A9: MOVWF 3712AA: MOVLW FA12AB: MOVWF 4012AC: BCF 0A.412AD: CALL 1C812AE: BSF 0A.412AF: DECFSZ 37,F12B0: GOTO 2AA............................................................ }12B1: GOTO 273.................... }12B2: SLEEPConfiguration Fuses:Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40