CCS PCM C Compiler, Version 4.106, 47914 14-4-13 14:02Filename: C:\Users\Honza\Documents\pic\uhel_sl\main.lstROM used: 3375 words (41%)Largest free fragment is 2048RAM used: 19 (5%) at main() level81 (22%) worst caseStack: 4 locations*0000: MOVLW 0C0001: MOVWF 0A0002: GOTO 45D0003: NOP.................... #include "C:\Users\Honza\Documents\pic\uhel_sl\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)*0330: MOVLW 3F0331: MOVWF 040332: BCF 03.70333: MOVF 00,W0334: BTFSC 03.20335: GOTO 3430336: MOVLW 020337: MOVWF 780338: CLRF 770339: DECFSZ 77,F033A: GOTO 339033B: DECFSZ 78,F033C: GOTO 338033D: MOVLW 97033E: MOVWF 77033F: DECFSZ 77,F0340: GOTO 33F0341: DECFSZ 00,F0342: GOTO 3360343: RETURN........................................................................................................................ #define PIN_SDA PIN_B0.................... #define PIN_SCL PIN_B1.................... #use i2c(master, sda=PIN_SDA, scl=PIN_SCL)*00FE: MOVLW 0800FF: MOVWF 780100: NOP0101: BCF 06.10102: BSF 03.50103: BCF 06.10104: NOP0105: BCF 03.50106: RLF 4D,F0107: BCF 06.00108: BTFSS 03.00109: GOTO 10D010A: BSF 03.5010B: BSF 06.0010C: BCF 03.5010D: BTFSC 03.0010E: GOTO 112010F: BSF 03.50110: BCF 06.00111: BCF 03.50112: BSF 03.50113: BSF 06.10114: BCF 03.50115: BTFSS 06.10116: GOTO 1150117: DECFSZ 78,F0118: GOTO 1000119: NOP011A: BCF 06.1011B: BSF 03.5011C: BCF 06.1011D: NOP011E: BSF 06.0011F: NOP0120: NOP0121: BSF 06.10122: BCF 03.50123: BTFSS 06.10124: GOTO 1230125: CLRF 780126: NOP0127: BTFSC 06.00128: BSF 78.00129: BCF 06.1012A: BSF 03.5012B: BCF 06.1012C: BCF 03.5012D: BCF 06.0012E: BSF 03.5012F: BCF 06.00130: BCF 03.50131: RETURN*015B: MOVLW 08015C: MOVWF 4E015D: MOVF 77,W015E: MOVWF 4F015F: BSF 03.50160: BSF 06.00161: NOP0162: BSF 06.10163: BCF 03.50164: BTFSS 06.10165: GOTO 1640166: BTFSC 06.00167: BSF 03.00168: BTFSS 06.00169: BCF 03.0016A: RLF 78,F016B: NOP016C: BSF 03.5016D: BCF 06.1016E: BCF 03.5016F: BCF 06.10170: DECFSZ 4E,F0171: GOTO 15F0172: BSF 03.50173: BSF 06.00174: NOP0175: BCF 03.50176: BCF 06.00177: MOVF 4F,W0178: BTFSC 03.20179: GOTO 17D017A: BSF 03.5017B: BCF 06.0017C: BCF 03.5017D: NOP017E: BSF 03.5017F: BSF 06.10180: BCF 03.50181: BTFSS 06.10182: GOTO 1810183: NOP0184: BCF 06.10185: BSF 03.50186: BCF 06.10187: NOP0188: BCF 03.50189: BCF 06.0018A: BSF 03.5018B: BCF 06.0018C: BCF 03.5018D: RETURN.................... #use rs232(baud=9600,parity=N,xmit=PIN_B3,rcv=PIN_B2,bits=8) //rcv TXD xmit RXD*0071: BSF 03.50072: BCF 06.30073: BCF 03.50074: BCF 06.30075: MOVLW 080076: MOVWF 780077: GOTO 0780078: NOP0079: BSF 78.7007A: GOTO 089007B: BCF 78.7007C: RRF 49,F007D: BTFSC 03.0007E: BSF 06.3007F: BTFSS 03.00080: BCF 06.30081: BSF 78.60082: GOTO 0890083: BCF 78.60084: DECFSZ 78,F0085: GOTO 07C0086: GOTO 0870087: NOP0088: BSF 06.30089: MOVLW 3F008A: MOVWF 04008B: DECFSZ 04,F008C: GOTO 08B008D: NOP008E: BTFSC 78.7008F: GOTO 07B0090: BTFSC 78.60091: GOTO 0830092: 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;*089B: BCF 57.0.................... flag = 0;089C: BCF 57.1.................... y = x;089D: MOVF 4A,W089E: MOVWF 4E089F: MOVF 49,W08A0: MOVWF 4D08A1: MOVF 48,W08A2: MOVWF 4C08A3: MOVF 47,W08A4: MOVWF 4B........................................ if (x < 0)08A5: MOVF 4A,W08A6: MOVWF 5B08A7: MOVF 49,W08A8: MOVWF 5A08A9: MOVF 48,W08AA: MOVWF 5908AB: MOVF 47,W08AC: MOVWF 5808AD: CLRF 5F08AE: CLRF 5E08AF: CLRF 5D08B0: CLRF 5C08B1: BCF 0A.308B2: CALL 43308B3: BSF 0A.308B4: BTFSS 03.008B5: GOTO 0BA.................... {.................... s = 1;08B6: BSF 57.0.................... y = -y;08B7: MOVF 4C,W08B8: XORLW 8008B9: MOVWF 4C.................... }........................................ if (y > 1.0)08BA: CLRF 5B08BB: CLRF 5A08BC: CLRF 5908BD: MOVLW 7F08BE: MOVWF 5808BF: MOVF 4E,W08C0: MOVWF 5F08C1: MOVF 4D,W08C2: MOVWF 5E08C3: MOVF 4C,W08C4: MOVWF 5D08C5: MOVF 4B,W08C6: MOVWF 5C08C7: BCF 0A.308C8: CALL 43308C9: BSF 0A.308CA: BTFSS 03.008CB: GOTO 0E5.................... {.................... y = 1.0/y;08CC: CLRF 5F08CD: CLRF 5E08CE: CLRF 5D08CF: MOVLW 7F08D0: MOVWF 5C08D1: MOVF 4E,W08D2: MOVWF 6308D3: MOVF 4D,W08D4: MOVWF 6208D5: MOVF 4C,W08D6: MOVWF 6108D7: MOVF 4B,W08D8: MOVWF 6008D9: BCF 0A.308DA: CALL 36908DB: BSF 0A.308DC: MOVF 7A,W08DD: MOVWF 4E08DE: MOVF 79,W08DF: MOVWF 4D08E0: MOVF 78,W08E1: MOVWF 4C08E2: MOVF 77,W08E3: MOVWF 4B.................... flag = 1;08E4: BSF 57.1.................... }........................................ res = pat[0]*y*y + pat[1];08E5: MOVLW 0A08E6: MOVWF 5F08E7: MOVLW 8908E8: MOVWF 5E08E9: MOVLW 3408EA: MOVWF 5D08EB: MOVLW 7C08EC: MOVWF 5C08ED: MOVF 4E,W08EE: MOVWF 6308EF: MOVF 4D,W08F0: MOVWF 6208F1: MOVF 4C,W08F2: MOVWF 6108F3: MOVF 4B,W08F4: MOVWF 6008F5: BCF 0A.308F6: CALL 47208F7: BSF 0A.308F8: MOVF 77,W08F9: MOVWF 5808FA: MOVF 78,W08FB: MOVWF 5908FC: MOVF 79,W08FD: MOVWF 5A08FE: MOVF 7A,W08FF: MOVWF 5B0900: MOVWF 5F0901: MOVF 79,W0902: MOVWF 5E0903: MOVF 78,W0904: MOVWF 5D0905: MOVF 77,W0906: MOVWF 5C0907: MOVF 4E,W0908: MOVWF 630909: MOVF 4D,W090A: MOVWF 62090B: MOVF 4C,W090C: MOVWF 61090D: MOVF 4B,W090E: MOVWF 60090F: BCF 0A.30910: CALL 4720911: BSF 0A.30912: MOVF 77,W0913: MOVWF 580914: MOVF 78,W0915: MOVWF 590916: MOVF 79,W0917: MOVWF 5A0918: MOVF 7A,W0919: MOVWF 5B091A: BCF 03.1091B: MOVF 7A,W091C: MOVWF 5F091D: MOVF 79,W091E: MOVWF 5E091F: MOVF 78,W0920: MOVWF 5D0921: MOVF 77,W0922: MOVWF 5C0923: MOVLW 7C0924: MOVWF 630925: MOVLW 790926: MOVWF 620927: MOVLW 350928: MOVWF 610929: MOVLW 81092A: MOVWF 60092B: BCF 0A.3092C: CALL 4E7092D: BSF 0A.3092E: MOVF 7A,W092F: MOVWF 520930: MOVF 79,W0931: MOVWF 510932: MOVF 78,W0933: MOVWF 500934: MOVF 77,W0935: MOVWF 4F.................... res = res*y*y + pat[2];0936: MOVF 52,W0937: MOVWF 5F0938: MOVF 51,W0939: MOVWF 5E093A: MOVF 50,W093B: MOVWF 5D093C: MOVF 4F,W093D: MOVWF 5C093E: MOVF 4E,W093F: MOVWF 630940: MOVF 4D,W0941: MOVWF 620942: MOVF 4C,W0943: MOVWF 610944: MOVF 4B,W0945: MOVWF 600946: BCF 0A.30947: CALL 4720948: BSF 0A.30949: MOVF 77,W094A: MOVWF 58094B: MOVF 78,W094C: MOVWF 59094D: MOVF 79,W094E: MOVWF 5A094F: MOVF 7A,W0950: MOVWF 5B0951: MOVWF 5F0952: MOVF 79,W0953: MOVWF 5E0954: MOVF 78,W0955: MOVWF 5D0956: MOVF 77,W0957: MOVWF 5C0958: MOVF 4E,W0959: MOVWF 63095A: MOVF 4D,W095B: MOVWF 62095C: MOVF 4C,W095D: MOVWF 61095E: MOVF 4B,W095F: MOVWF 600960: BCF 0A.30961: CALL 4720962: BSF 0A.30963: MOVF 77,W0964: MOVWF 580965: MOVF 78,W0966: MOVWF 590967: MOVF 79,W0968: MOVWF 5A0969: MOVF 7A,W096A: MOVWF 5B096B: BCF 03.1096C: MOVF 7A,W096D: MOVWF 5F096E: MOVF 79,W096F: MOVWF 5E0970: MOVF 78,W0971: MOVWF 5D0972: MOVF 77,W0973: MOVWF 5C0974: MOVLW 3F0975: MOVWF 630976: MOVLW 020977: MOVWF 620978: MOVLW 330979: MOVWF 61097A: MOVLW 83097B: MOVWF 60097C: BCF 0A.3097D: CALL 4E7097E: BSF 0A.3097F: MOVF 7A,W0980: MOVWF 520981: MOVF 79,W0982: MOVWF 510983: MOVF 78,W0984: MOVWF 500985: MOVF 77,W0986: MOVWF 4F.................... res = res*y*y + pat[3];0987: MOVF 52,W0988: MOVWF 5F0989: MOVF 51,W098A: MOVWF 5E098B: MOVF 50,W098C: MOVWF 5D098D: MOVF 4F,W098E: MOVWF 5C098F: MOVF 4E,W0990: MOVWF 630991: MOVF 4D,W0992: MOVWF 620993: MOVF 4C,W0994: MOVWF 610995: MOVF 4B,W0996: MOVWF 600997: BCF 0A.30998: CALL 4720999: BSF 0A.3099A: MOVF 77,W099B: MOVWF 58099C: MOVF 78,W099D: MOVWF 59099E: MOVF 79,W099F: MOVWF 5A09A0: MOVF 7A,W09A1: MOVWF 5B09A2: MOVWF 5F09A3: MOVF 79,W09A4: MOVWF 5E09A5: MOVF 78,W09A6: MOVWF 5D09A7: MOVF 77,W09A8: MOVWF 5C09A9: MOVF 4E,W09AA: MOVWF 6309AB: MOVF 4D,W09AC: MOVWF 6209AD: MOVF 4C,W09AE: MOVWF 6109AF: MOVF 4B,W09B0: MOVWF 6009B1: BCF 0A.309B2: CALL 47209B3: BSF 0A.309B4: MOVF 77,W09B5: MOVWF 5809B6: MOVF 78,W09B7: MOVWF 5909B8: MOVF 79,W09B9: MOVWF 5A09BA: MOVF 7A,W09BB: MOVWF 5B09BC: BCF 03.109BD: MOVF 7A,W09BE: MOVWF 5F09BF: MOVF 79,W09C0: MOVWF 5E09C1: MOVF 78,W09C2: MOVWF 5D09C3: MOVF 77,W09C4: MOVWF 5C09C5: MOVLW 3309C6: MOVWF 6309C7: MOVLW 8C09C8: MOVWF 6209C9: MOVLW 1E09CA: MOVWF 6109CB: MOVLW 8309CC: MOVWF 6009CD: BCF 0A.309CE: CALL 4E709CF: BSF 0A.309D0: MOVF 7A,W09D1: MOVWF 5209D2: MOVF 79,W09D3: MOVWF 5109D4: MOVF 78,W09D5: MOVWF 5009D6: MOVF 77,W09D7: MOVWF 4F........................................ r = qat[0]*y*y + qat[1];09D8: CLRF 5F09D9: CLRF 5E09DA: CLRF 5D09DB: MOVLW 7F09DC: MOVWF 5C09DD: MOVF 4E,W09DE: MOVWF 6309DF: MOVF 4D,W09E0: MOVWF 6209E1: MOVF 4C,W09E2: MOVWF 6109E3: MOVF 4B,W09E4: MOVWF 6009E5: BCF 0A.309E6: CALL 47209E7: BSF 0A.309E8: MOVF 77,W09E9: MOVWF 5809EA: MOVF 78,W09EB: MOVWF 5909EC: MOVF 79,W09ED: MOVWF 5A09EE: MOVF 7A,W09EF: MOVWF 5B09F0: MOVWF 5F09F1: MOVF 79,W09F2: MOVWF 5E09F3: MOVF 78,W09F4: MOVWF 5D09F5: MOVF 77,W09F6: MOVWF 5C09F7: MOVF 4E,W09F8: MOVWF 6309F9: MOVF 4D,W09FA: MOVWF 6209FB: MOVF 4C,W09FC: MOVWF 6109FD: MOVF 4B,W09FE: MOVWF 6009FF: BCF 0A.30A00: CALL 4720A01: BSF 0A.30A02: MOVF 77,W0A03: MOVWF 580A04: MOVF 78,W0A05: MOVWF 590A06: MOVF 79,W0A07: MOVWF 5A0A08: MOVF 7A,W0A09: MOVWF 5B0A0A: BCF 03.10A0B: MOVF 7A,W0A0C: MOVWF 5F0A0D: MOVF 79,W0A0E: MOVWF 5E0A0F: MOVF 78,W0A10: MOVWF 5D0A11: MOVF 77,W0A12: MOVWF 5C0A13: MOVLW 1B0A14: MOVWF 630A15: MOVLW E40A16: MOVWF 620A17: MOVLW 350A18: MOVWF 610A19: MOVLW 820A1A: MOVWF 600A1B: BCF 0A.30A1C: CALL 4E70A1D: BSF 0A.30A1E: MOVF 7A,W0A1F: MOVWF 560A20: MOVF 79,W0A21: MOVWF 550A22: MOVF 78,W0A23: MOVWF 540A24: MOVF 77,W0A25: MOVWF 53.................... r = r*y*y + qat[2];0A26: MOVF 56,W0A27: MOVWF 5F0A28: MOVF 55,W0A29: MOVWF 5E0A2A: MOVF 54,W0A2B: MOVWF 5D0A2C: MOVF 53,W0A2D: MOVWF 5C0A2E: MOVF 4E,W0A2F: MOVWF 630A30: MOVF 4D,W0A31: MOVWF 620A32: MOVF 4C,W0A33: MOVWF 610A34: MOVF 4B,W0A35: MOVWF 600A36: BCF 0A.30A37: CALL 4720A38: BSF 0A.30A39: MOVF 77,W0A3A: MOVWF 580A3B: MOVF 78,W0A3C: MOVWF 590A3D: MOVF 79,W0A3E: MOVWF 5A0A3F: MOVF 7A,W0A40: MOVWF 5B0A41: MOVWF 5F0A42: MOVF 79,W0A43: MOVWF 5E0A44: MOVF 78,W0A45: MOVWF 5D0A46: MOVF 77,W0A47: MOVWF 5C0A48: MOVF 4E,W0A49: MOVWF 630A4A: MOVF 4D,W0A4B: MOVWF 620A4C: MOVF 4C,W0A4D: MOVWF 610A4E: MOVF 4B,W0A4F: MOVWF 600A50: BCF 0A.30A51: CALL 4720A52: BSF 0A.30A53: MOVF 77,W0A54: MOVWF 580A55: MOVF 78,W0A56: MOVWF 590A57: MOVF 79,W0A58: MOVWF 5A0A59: MOVF 7A,W0A5A: MOVWF 5B0A5B: BCF 03.10A5C: MOVF 7A,W0A5D: MOVWF 5F0A5E: MOVF 79,W0A5F: MOVWF 5E0A60: MOVF 78,W0A61: MOVWF 5D0A62: MOVF 77,W0A63: MOVWF 5C0A64: MOVLW A40A65: MOVWF 630A66: MOVLW DB0A67: MOVWF 620A68: MOVLW 670A69: MOVWF 610A6A: MOVLW 830A6B: MOVWF 600A6C: BCF 0A.30A6D: CALL 4E70A6E: BSF 0A.30A6F: MOVF 7A,W0A70: MOVWF 560A71: MOVF 79,W0A72: MOVWF 550A73: MOVF 78,W0A74: MOVWF 540A75: MOVF 77,W0A76: MOVWF 53.................... r = r*y*y + qat[3];0A77: MOVF 56,W0A78: MOVWF 5F0A79: MOVF 55,W0A7A: MOVWF 5E0A7B: MOVF 54,W0A7C: MOVWF 5D0A7D: MOVF 53,W0A7E: MOVWF 5C0A7F: MOVF 4E,W0A80: MOVWF 630A81: MOVF 4D,W0A82: MOVWF 620A83: MOVF 4C,W0A84: MOVWF 610A85: MOVF 4B,W0A86: MOVWF 600A87: BCF 0A.30A88: CALL 4720A89: BSF 0A.30A8A: MOVF 77,W0A8B: MOVWF 580A8C: MOVF 78,W0A8D: MOVWF 590A8E: MOVF 79,W0A8F: MOVWF 5A0A90: MOVF 7A,W0A91: MOVWF 5B0A92: MOVWF 5F0A93: MOVF 79,W0A94: MOVWF 5E0A95: MOVF 78,W0A96: MOVWF 5D0A97: MOVF 77,W0A98: MOVWF 5C0A99: MOVF 4E,W0A9A: MOVWF 630A9B: MOVF 4D,W0A9C: MOVWF 620A9D: MOVF 4C,W0A9E: MOVWF 610A9F: MOVF 4B,W0AA0: MOVWF 600AA1: BCF 0A.30AA2: CALL 4720AA3: BSF 0A.30AA4: MOVF 77,W0AA5: MOVWF 580AA6: MOVF 78,W0AA7: MOVWF 590AA8: MOVF 79,W0AA9: MOVWF 5A0AAA: MOVF 7A,W0AAB: MOVWF 5B0AAC: BCF 03.10AAD: MOVF 7A,W0AAE: MOVWF 5F0AAF: MOVF 79,W0AB0: MOVWF 5E0AB1: MOVF 78,W0AB2: MOVWF 5D0AB3: MOVF 77,W0AB4: MOVWF 5C0AB5: MOVLW 330AB6: MOVWF 630AB7: MOVLW 8C0AB8: MOVWF 620AB9: MOVLW 1E0ABA: MOVWF 610ABB: MOVLW 830ABC: MOVWF 600ABD: BCF 0A.30ABE: CALL 4E70ABF: BSF 0A.30AC0: MOVF 7A,W0AC1: MOVWF 560AC2: MOVF 79,W0AC3: MOVWF 550AC4: MOVF 78,W0AC5: MOVWF 540AC6: MOVF 77,W0AC7: MOVWF 53........................................ res = y*res/r;0AC8: MOVF 4E,W0AC9: MOVWF 5F0ACA: MOVF 4D,W0ACB: MOVWF 5E0ACC: MOVF 4C,W0ACD: MOVWF 5D0ACE: MOVF 4B,W0ACF: MOVWF 5C0AD0: MOVF 52,W0AD1: MOVWF 630AD2: MOVF 51,W0AD3: MOVWF 620AD4: MOVF 50,W0AD5: MOVWF 610AD6: MOVF 4F,W0AD7: MOVWF 600AD8: BCF 0A.30AD9: CALL 4720ADA: BSF 0A.30ADB: MOVF 77,W0ADC: MOVWF 580ADD: MOVF 78,W0ADE: MOVWF 590ADF: MOVF 79,W0AE0: MOVWF 5A0AE1: MOVF 7A,W0AE2: MOVWF 5B0AE3: MOVWF 5F0AE4: MOVF 79,W0AE5: MOVWF 5E0AE6: MOVF 78,W0AE7: MOVWF 5D0AE8: MOVF 77,W0AE9: MOVWF 5C0AEA: MOVF 56,W0AEB: MOVWF 630AEC: MOVF 55,W0AED: MOVWF 620AEE: MOVF 54,W0AEF: MOVWF 610AF0: MOVF 53,W0AF1: MOVWF 600AF2: BCF 0A.30AF3: CALL 3690AF4: BSF 0A.30AF5: MOVF 7A,W0AF6: MOVWF 520AF7: MOVF 79,W0AF8: MOVWF 510AF9: MOVF 78,W0AFA: MOVWF 500AFB: MOVF 77,W0AFC: MOVWF 4F............................................................ if (flag) // for |x| > 10AFD: BTFSS 57.10AFE: GOTO 31B.................... res = PI_DIV_BY_TWO - res;0AFF: BSF 03.10B00: MOVLW DB0B01: MOVWF 5F0B02: MOVLW 0F0B03: MOVWF 5E0B04: MOVLW 490B05: MOVWF 5D0B06: MOVLW 7F0B07: MOVWF 5C0B08: MOVF 52,W0B09: MOVWF 630B0A: MOVF 51,W0B0B: MOVWF 620B0C: MOVF 50,W0B0D: MOVWF 610B0E: MOVF 4F,W0B0F: MOVWF 600B10: BCF 0A.30B11: CALL 4E70B12: BSF 0A.30B13: MOVF 7A,W0B14: MOVWF 520B15: MOVF 79,W0B16: MOVWF 510B17: MOVF 78,W0B18: MOVWF 500B19: MOVF 77,W0B1A: MOVWF 4F.................... if (s)0B1B: BTFSS 57.00B1C: GOTO 320.................... res = -res;0B1D: MOVF 50,W0B1E: XORLW 800B1F: MOVWF 50........................................ return(res);0B20: MOVF 4F,W0B21: MOVWF 770B22: MOVF 50,W0B23: MOVWF 780B24: MOVF 51,W0B25: MOVWF 790B26: MOVF 52,W0B27: MOVWF 7A.................... }.................... //Overloaded functions for atan() for PCD.................... // Overloaded function atan() for data type - Float48.................... #if defined(__PCD__).................... float48 atan(float48 x).................... {.................... float48 y, res, r;.................... int1 s, flag;........................................ s = 0;.................... flag = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 1.0).................... {.................... y = 1.0/y;.................... flag = 1;.................... }........................................ res = pat[0]*y*y + pat[1];.................... res = res*y*y + pat[2];.................... res = res*y*y + pat[3];........................................ r = qat[0]*y*y + qat[1];.................... r = r*y*y + qat[2];.................... r = r*y*y + qat[3];........................................ res = y*res/r;............................................................ if (flag) // for |x| > 1.................... res = PI_DIV_BY_TWO - res;.................... if (s).................... res = -res;........................................ return(res);.................... }........................................ // Overloaded function atan() for data type - Float64.................... float64 atan(float64 x).................... {.................... float64 y, res, r;.................... int1 s, flag;........................................ s = 0;.................... flag = 0;.................... y = x;........................................ if (x < 0).................... {.................... s = 1;.................... y = -y;.................... }........................................ if (y > 1.0).................... {.................... y = 1.0/y;.................... flag = 1;.................... }........................................ res = pat[0]*y*y + pat[1];.................... res = res*y*y + pat[2];.................... res = res*y*y + pat[3];........................................ r = qat[0]*y*y + qat[1];.................... r = r*y*y + qat[2];.................... r = r*y*y + qat[3];........................................ res = y*res/r;............................................................ if (flag) // for |x| > 1.................... res = PI_DIV_BY_TWO - res;.................... if (s).................... res = -res;........................................ return(res);.................... }.................... #endif........................................ /////////////////////////////////////////////////////////////////////////////.................... // float atan2(float y, float x).................... /////////////////////////////////////////////////////////////////////////////.................... // Description :computes the principal value of arc tangent of y/x, using the.................... // signs of both the arguments to determine the quadrant of the return value.................... // Returns : returns the arc tangent of y/x..................... // Date : N/A.................... //........................................ float32 atan2(float32 y,float32 x).................... {.................... float32 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }........................................ //Overloaded functions for atan2() for PCD.................... // Overloaded function atan2() for data type - Float48.................... #if defined(__PCD__).................... float48 atan2(float48 y,float48 x).................... {.................... float48 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }........................................ // Overloaded function atan2() for data type - Float64.................... float64 atan2(float64 y,float64 x).................... {.................... float64 z;.................... int1 sign;.................... unsigned int8 quad;.................... sign=0;.................... quad=0; //quadrant.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1));.................... if(y<0.0).................... {.................... sign=1;.................... y=-y;.................... }.................... if(x<0.0).................... {.................... x=-x;.................... }.................... if (x==0.0).................... {.................... if(y==0.0).................... {.................... #ifdef _ERRNO.................... {.................... errno=EDOM;.................... }.................... #endif.................... }.................... else.................... {.................... if(sign).................... {.................... return (-(PI_DIV_BY_TWO));.................... }.................... else.................... {.................... return (PI_DIV_BY_TWO);.................... }.................... }.................... }.................... else.................... {.................... z=y/x;.................... switch(quad).................... {.................... case 1:.................... {.................... return atan(z);.................... break;.................... }.................... case 2:.................... {.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122.................... return (PI-atan(z));.................... break;.................... }.................... case 3:.................... {.................... return (atan(z)-PI);.................... break;.................... }.................... case 4:.................... {.................... return (-atan(z));.................... break;.................... }.................... }.................... }.................... }.................... #endif........................................ //////////////////// Hyperbolic functions ////////////////////........................................ ////////////////////////////////////////////////////////////////////////////.................... // float cosh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic cosine value of x.................... // Returns : returns the hyperbolic cosine value of x.................... // Date : N/A.................... //........................................ float32 cosh(float32 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }.................... //Overloaded functions for cosh() for PCD.................... // Overloaded function cosh() for data type - Float48.................... #if defined(__PCD__).................... float48 cosh(float48 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }........................................ // Overloaded function cosh() for data type - Float64.................... float64 cosh(float64 x).................... {.................... return ((exp(x)+exp(-x))/2);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float sinh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic sine value of x.................... // Returns : returns the hyperbolic sine value of x.................... // Date : N/A.................... //........................................ float32 sinh(float32 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }.................... //Overloaded functions for sinh() for PCD.................... // Overloaded function sinh() for data type - Float48.................... #if defined(__PCD__).................... float48 sinh(float48 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }........................................ // Overloaded function sinh() for data type - Float48.................... float64 sinh(float64 x).................... {........................................ return ((exp(x) - exp(-x))/2);.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float tanh(float x).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : Computes the hyperbolic tangent value of x.................... // Returns : returns the hyperbolic tangent value of x.................... // Date : N/A.................... //........................................ float32 tanh(float32 x).................... {.................... return(sinh(x)/cosh(x));.................... }.................... //Overloaded functions for tanh() for PCD.................... // Overloaded function tanh() for data type - Float48.................... #if defined(__PCD__).................... float48 tanh(float48 x).................... {.................... return(sinh(x)/cosh(x));.................... }........................................ // Overloaded function tanh() for data type - Float64.................... float64 tanh(float64 x).................... {.................... return(sinh(x)/cosh(x));.................... }.................... #endif........................................ ////////////////////////////////////////////////////////////////////////////.................... // float frexp(float x, signed int *exp).................... ////////////////////////////////////////////////////////////////////////////.................... // Description : breaks a floating point number into a normalized fraction and an integral.................... // power of 2. It stores the integer in the signed int object pointed to by exp..................... // Returns : returns the value x, such that x is a double with magnitude in the interval.................... // [1/2,1) or zero, and value equals x times 2 raised to the power *exp.If value is zero,.................... // both parts of the result are zero..................... // Date : N/A.................... //........................................ #define LOG2 .30102999566398119521.................... float32 frexp(float32 x, signed int8 *exp).................... {.................... float32 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }........................................ //Overloaded functions for frexp() for PCD.................... // Overloaded function frexp() for data type - Float48.................... #if defined(__PCD__).................... float48 frexp(float48 x, signed int8 *exp).................... {.................... float48 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }........................................ // Overloaded function frexp() for data type - Float64.................... float64 frexp(float64 x, signed int8 *exp).................... {.................... float64 res;.................... int1 sign = 0;.................... if(x == 0.0).................... {.................... *exp=0;.................... return (0.0);.................... }.................... if(x < 0.0).................... {.................... x=-x;.................... sign=1;.................... }.................... if (x > 1.0).................... {.................... *exp=(ceil(log10(x)/LOG2));.................... res=x/(pow(2, *exp));.................... if (res == 1).................... {.................... *exp=*exp+1;.................... res=.5;.................... }.................... }.................... else.................... {.................... if(x < 0.5).................... {.................... *exp=-1;.................... res=x*2;.................... }.................... else.................... {.................... *exp=0;.................... res=x;.................... }.................... }.................... if(sign).................... {.................... res=-res;.................... }.................... return res;.................... }.................... #endif........................................ //////////////////////////////////////////////////////////////////////////////.................... // float ldexp(float x, signed int *exp).................... //////////////////////////////////////////////////////////////////////////////.................... // Description : multiplies a floating point number by an integral power of 2..................... // Returns : returns the value of x times 2 raised to the power exp..................... // Date : N/A.................... //........................................ float32 ldexp(float32 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... //Overloaded functions for ldexp() for PCD.................... // Overloaded function ldexp() for data type - Float48........................................ #if defined(__PCD__).................... float48 ldexp(float48 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... // Overloaded function ldexp() for data type - Float64.................... float64 ldexp(float64 value, signed int8 exp).................... {.................... return (value * pow(2,exp));.................... }.................... #endif........................................ #endif............................................................ #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............................................................ //pøipojení motorù.................... //AIN1 - pro vysku slunce.................... #define AIN1 PIN_D0.................... #define AIN2 PIN_D1.................... //motor A -cerveny vodic na AOUT2.................... //motor A -modry vodic na Aout1........................................ signed int16 X, Y, Z,AX, AY, AZ;........................................ void setAK (void) //nastaveni akcelerometru.................... {.................... i2c_start();*0132: BSF 03.50133: BSF 06.00134: NOP0135: BSF 06.10136: NOP0137: BCF 03.50138: BCF 06.00139: BSF 03.5013A: BCF 06.0013B: NOP013C: BCF 03.5013D: BCF 06.1013E: BSF 03.5013F: BCF 06.1.................... I2C_Write(AK_W);0140: MOVLW 380141: BCF 03.50142: MOVWF 4D0143: CALL 0FE.................... I2C_write(0x2A);0144: MOVLW 2A0145: MOVWF 4D0146: CALL 0FE.................... I2C_write(0x01); //nastaví aktivní stav0147: MOVLW 010148: MOVWF 4D0149: CALL 0FE........................................ i2c_stop();014A: BSF 03.5014B: BCF 06.0014C: NOP014D: BSF 06.1014E: BCF 03.5014F: BTFSS 06.10150: GOTO 14F0151: NOP0152: GOTO 1530153: NOP0154: BSF 03.50155: BSF 06.00156: NOP.................... }0157: BCF 03.50158: BSF 0A.30159: BCF 0A.4015A: GOTO 4DB (RETURN)........................................ int16 akcele (int8 H, int8 L) //vycitani hodnot z akcelerometru.................... {*018E: CLRF 49018F: CLRF 4A.................... unsigned int8 XL=0,XH=0;.................... signed int16 x;........................................ i2c_start();0190: BSF 03.50191: BSF 06.00192: NOP0193: BSF 06.10194: NOP0195: BCF 03.50196: BCF 06.00197: BSF 03.50198: BCF 06.00199: NOP019A: BCF 03.5019B: BCF 06.1019C: BSF 03.5019D: BCF 06.1.................... I2C_Write(AK_W);019E: MOVLW 38019F: BCF 03.501A0: MOVWF 4D01A1: CALL 0FE.................... I2C_write(H);01A2: MOVF 47,W01A3: MOVWF 4D01A4: CALL 0FE.................... i2c_start();01A5: BSF 03.501A6: BSF 06.001A7: NOP01A8: BSF 06.101A9: NOP01AA: BCF 03.501AB: BTFSS 06.101AC: GOTO 1AB01AD: BCF 06.001AE: BSF 03.501AF: BCF 06.001B0: NOP01B1: BCF 03.501B2: BCF 06.101B3: BSF 03.501B4: BCF 06.1.................... I2C_Write(AK_R);01B5: MOVLW 3901B6: BCF 03.501B7: MOVWF 4D01B8: CALL 0FE.................... XH=i2c_read(0);01B9: CLRF 7701BA: CALL 15B01BB: MOVF 78,W01BC: MOVWF 4A.................... i2c_stop();01BD: BSF 03.501BE: BCF 06.001BF: NOP01C0: BSF 06.101C1: BCF 03.501C2: BTFSS 06.101C3: GOTO 1C201C4: NOP01C5: GOTO 1C601C6: NOP01C7: BSF 03.501C8: BSF 06.001C9: NOP........................................ i2c_start();01CA: BSF 06.001CB: NOP01CC: BSF 06.101CD: NOP01CE: BCF 03.501CF: BCF 06.001D0: BSF 03.501D1: BCF 06.001D2: NOP01D3: BCF 03.501D4: BCF 06.101D5: BSF 03.501D6: BCF 06.1.................... I2C_Write(AK_W);01D7: MOVLW 3801D8: BCF 03.501D9: MOVWF 4D01DA: CALL 0FE.................... I2C_write(L);01DB: MOVF 48,W01DC: MOVWF 4D01DD: CALL 0FE.................... i2c_start();01DE: BSF 03.501DF: BSF 06.001E0: NOP01E1: BSF 06.101E2: NOP01E3: BCF 03.501E4: BTFSS 06.101E5: GOTO 1E401E6: BCF 06.001E7: BSF 03.501E8: BCF 06.001E9: NOP01EA: BCF 03.501EB: BCF 06.101EC: BSF 03.501ED: BCF 06.1.................... I2C_Write(AK_R);01EE: MOVLW 3901EF: BCF 03.501F0: MOVWF 4D01F1: CALL 0FE.................... XL=i2c_read(0);01F2: CLRF 7701F3: CALL 15B01F4: MOVF 78,W01F5: MOVWF 49.................... i2c_stop();01F6: BSF 03.501F7: BCF 06.001F8: NOP01F9: BSF 06.101FA: BCF 03.501FB: BTFSS 06.101FC: GOTO 1FB01FD: NOP01FE: GOTO 1FF01FF: NOP0200: BSF 03.50201: BSF 06.00202: NOP........................................ x = (((unsigned int16) XH << 8) + XL ); //prevod na 16bit hodnotu0203: BCF 03.50204: CLRF 4E0205: MOVF 4A,W0206: MOVWF 4D0207: MOVWF 4E0208: CLRF 4D0209: MOVF 49,W020A: ADDWF 4D,W020B: MOVWF 78020C: MOVF 4E,W020D: MOVWF 7A020E: BTFSC 03.0020F: INCF 7A,F0210: MOVF 78,W0211: MOVWF 4B0212: MOVF 7A,W0213: MOVWF 4C.................... x=x/4;0214: MOVF 4C,W0215: MOVWF 4E0216: MOVF 4B,W0217: MOVWF 4D0218: CLRF 500219: MOVLW 04021A: MOVWF 4F*0258: MOVF 79,W0259: MOVWF 4C025A: MOVF 78,W025B: MOVWF 4B........................................ return x;025C: MOVF 4B,W025D: MOVWF 78025E: MOVF 4C,W025F: MOVWF 79.................... }0260: RETURN........................................ float vyska_sl (void) //vypocet aktualni vysky panelu.................... {.................... X= akcele (AK_XH, AK_XL);*0800: MOVLW 010801: MOVWF 470802: MOVLW 020803: MOVWF 480804: BCF 0A.30805: CALL 18E0806: BSF 0A.30807: MOVF 79,W0808: MOVWF 210809: MOVF 78,W080A: MOVWF 20.................... Y= akcele (AK_YH, AK_YL);080B: MOVLW 03080C: MOVWF 47080D: MOVLW 04080E: MOVWF 48080F: BCF 0A.30810: CALL 18E0811: BSF 0A.30812: MOVF 79,W0813: MOVWF 230814: MOVF 78,W0815: MOVWF 22.................... Z= akcele (AK_ZH, AK_ZL);0816: MOVLW 050817: MOVWF 470818: MOVLW 060819: MOVWF 48081A: BCF 0A.3081B: CALL 18E081C: BSF 0A.3081D: MOVF 79,W081E: MOVWF 25081F: MOVF 78,W0820: MOVWF 24........................................ AX=abs(X);0821: MOVF 21,W0822: MOVWF 7A0823: MOVF 20,W0824: BTFSS 21.70825: GOTO 02F0826: MOVF 20,W0827: SUBLW 000828: MOVWF 770829: CLRF 7A082A: MOVF 21,W082B: BTFSS 03.0082C: INCFSZ 21,W082D: SUBWF 7A,F082E: MOVF 77,W082F: MOVWF 260830: MOVF 7A,W0831: MOVWF 27.................... AY=abs(Y)+250;0832: MOVF 23,W0833: MOVWF 7A0834: MOVF 22,W0835: BTFSS 23.70836: GOTO 0400837: MOVF 22,W0838: SUBLW 000839: MOVWF 77083A: CLRF 7A083B: MOVF 23,W083C: BTFSS 03.0083D: INCFSZ 23,W083E: SUBWF 7A,F083F: MOVF 77,W0840: MOVWF 470841: MOVF 7A,W0842: MOVWF 480843: MOVLW FA0844: ADDWF 47,W0845: MOVWF 280846: MOVF 48,W0847: MOVWF 290848: BTFSC 03.00849: INCF 29,F.................... AZ=abs(Z)+250;084A: MOVF 25,W084B: MOVWF 7A084C: MOVF 24,W084D: BTFSS 25.7084E: GOTO 058084F: MOVF 24,W0850: SUBLW 000851: MOVWF 770852: CLRF 7A0853: MOVF 25,W0854: BTFSS 03.00855: INCFSZ 25,W0856: SUBWF 7A,F0857: MOVF 77,W0858: MOVWF 470859: MOVF 7A,W085A: MOVWF 48085B: MOVLW FA085C: ADDWF 47,W085D: MOVWF 2A085E: MOVF 48,W085F: MOVWF 2B0860: BTFSC 03.00861: INCF 2B,F........................................ float a, b;.................... a=(float)Y/Z;0862: MOVF 23,W0863: MOVWF 4C0864: MOVF 22,W0865: MOVWF 4B0866: BCF 0A.30867: CALL 3440868: BSF 0A.30869: MOVF 77,W086A: MOVWF 47086B: MOVF 78,W086C: MOVWF 48086D: MOVF 79,W086E: MOVWF 49086F: MOVF 7A,W0870: MOVWF 4A0871: MOVF 25,W0872: MOVWF 4C0873: MOVF 24,W0874: MOVWF 4B0875: BCF 0A.30876: CALL 3440877: BSF 0A.30878: MOVF 4A,W0879: MOVWF 5F087A: MOVF 49,W087B: MOVWF 5E087C: MOVF 48,W087D: MOVWF 5D087E: MOVF 47,W087F: MOVWF 5C0880: MOVF 7A,W0881: MOVWF 630882: MOVF 79,W0883: MOVWF 620884: MOVF 78,W0885: MOVWF 610886: MOVF 77,W0887: MOVWF 600888: BCF 0A.30889: CALL 369088A: BSF 0A.3088B: MOVF 7A,W088C: MOVWF 42088D: MOVF 79,W088E: MOVWF 41088F: MOVF 78,W0890: MOVWF 400891: MOVF 77,W0892: MOVWF 3F.................... b=atan(a);0893: MOVF 42,W0894: MOVWF 4A0895: MOVF 41,W0896: MOVWF 490897: MOVF 40,W0898: MOVWF 480899: MOVF 3F,W089A: MOVWF 47*0B28: MOVF 7A,W0B29: MOVWF 460B2A: MOVF 79,W0B2B: MOVWF 450B2C: MOVF 78,W0B2D: MOVWF 440B2E: MOVF 77,W0B2F: MOVWF 43.................... b = (b/3.14)*180;0B30: MOVF 46,W0B31: MOVWF 5F0B32: MOVF 45,W0B33: MOVWF 5E0B34: MOVF 44,W0B35: MOVWF 5D0B36: MOVF 43,W0B37: MOVWF 5C0B38: MOVLW C30B39: MOVWF 630B3A: MOVLW F50B3B: MOVWF 620B3C: MOVLW 480B3D: MOVWF 610B3E: MOVLW 800B3F: MOVWF 600B40: BCF 0A.30B41: CALL 3690B42: BSF 0A.30B43: MOVF 77,W0B44: MOVWF 470B45: MOVF 78,W0B46: MOVWF 480B47: MOVF 79,W0B48: MOVWF 490B49: MOVF 7A,W0B4A: MOVWF 4A0B4B: MOVWF 5F0B4C: MOVF 49,W0B4D: MOVWF 5E0B4E: MOVF 48,W0B4F: MOVWF 5D0B50: MOVF 47,W0B51: MOVWF 5C0B52: CLRF 630B53: CLRF 620B54: MOVLW 340B55: MOVWF 610B56: MOVLW 860B57: MOVWF 600B58: BCF 0A.30B59: CALL 4720B5A: BSF 0A.30B5B: MOVF 7A,W0B5C: MOVWF 460B5D: MOVF 79,W0B5E: MOVWF 450B5F: MOVF 78,W0B60: MOVWF 440B61: MOVF 77,W0B62: MOVWF 43.................... b=abs(b);0B63: MOVF 43,W0B64: MOVWF 770B65: MOVF 44,W0B66: MOVWF 780B67: MOVF 45,W0B68: MOVWF 790B69: MOVF 46,W0B6A: MOVWF 7A0B6B: BCF 78.70B6C: MOVF 46,W0B6D: MOVWF 460B6E: MOVF 45,W0B6F: MOVWF 450B70: MOVF 78,W0B71: MOVWF 440B72: MOVF 43,W0B73: MOVWF 43........................................ if(((AX>AY) || (AX>AZ))) //indikace prevraceni panelu0B74: BTFSS 29.70B75: GOTO 3790B76: BTFSS 27.70B77: GOTO 3960B78: GOTO 37B0B79: BTFSC 27.70B7A: GOTO 3850B7B: MOVF 29,W0B7C: SUBWF 27,W0B7D: BTFSS 03.00B7E: GOTO 3850B7F: BTFSS 03.20B80: GOTO 3960B81: MOVF 26,W0B82: SUBWF 28,W0B83: BTFSS 03.00B84: GOTO 3960B85: BTFSS 2B.70B86: GOTO 38A0B87: BTFSS 27.70B88: GOTO 3960B89: GOTO 38C0B8A: BTFSC 27.70B8B: GOTO 3BF0B8C: MOVF 2B,W0B8D: SUBWF 27,W0B8E: BTFSS 03.00B8F: GOTO 3BF0B90: BTFSS 03.20B91: GOTO 3960B92: MOVF 26,W0B93: SUBWF 2A,W0B94: BTFSC 03.00B95: GOTO 3BF.................... {.................... printf("Prevracený panel)\r\n", );0B96: MOVLW 040B97: BSF 03.60B98: MOVWF 0D0B99: MOVLW 000B9A: MOVWF 0F.................... }.................... else*0BBD: GOTO 4530BBE: BCF 03.6.................... {.................... if(Z==0) //osetreni proti deleni 00BBF: MOVF 24,F0BC0: BTFSS 03.20BC1: GOTO 3DA0BC2: MOVF 25,F0BC3: BTFSS 03.20BC4: GOTO 3DA.................... {.................... if(Y>0)0BC5: BTFSC 23.70BC6: GOTO 3D50BC7: MOVF 23,F0BC8: BTFSS 03.20BC9: GOTO 3CE0BCA: MOVF 22,W0BCB: SUBLW 000BCC: BTFSC 03.00BCD: GOTO 3D5.................... {.................... b=180;0BCE: CLRF 460BCF: CLRF 450BD0: MOVLW 340BD1: MOVWF 440BD2: MOVLW 860BD3: MOVWF 43.................... }.................... else0BD4: GOTO 3D9.................... {.................... b=0;0BD5: CLRF 460BD6: CLRF 450BD7: CLRF 440BD8: CLRF 43.................... }.................... }.................... else0BD9: GOTO 452.................... {.................... if(Z>0)0BDA: BTFSC 25.70BDB: GOTO 41B0BDC: MOVF 25,F0BDD: BTFSS 03.20BDE: GOTO 3E30BDF: MOVF 24,W0BE0: SUBLW 000BE1: BTFSC 03.00BE2: GOTO 41B.................... {.................... if(Y>=0)0BE3: BTFSC 23.70BE4: GOTO 400.................... {.................... b=90+b;0BE5: BCF 03.10BE6: CLRF 5F0BE7: CLRF 5E0BE8: MOVLW 340BE9: MOVWF 5D0BEA: MOVLW 850BEB: MOVWF 5C0BEC: MOVF 46,W0BED: MOVWF 630BEE: MOVF 45,W0BEF: MOVWF 620BF0: MOVF 44,W0BF1: MOVWF 610BF2: MOVF 43,W0BF3: MOVWF 600BF4: BCF 0A.30BF5: CALL 4E70BF6: BSF 0A.30BF7: MOVF 7A,W0BF8: MOVWF 460BF9: MOVF 79,W0BFA: MOVWF 450BFB: MOVF 78,W0BFC: MOVWF 440BFD: MOVF 77,W0BFE: MOVWF 43.................... }.................... else0BFF: GOTO 41A.................... {.................... b=90-b;0C00: BSF 03.10C01: CLRF 5F0C02: CLRF 5E0C03: MOVLW 340C04: MOVWF 5D0C05: MOVLW 850C06: MOVWF 5C0C07: MOVF 46,W0C08: MOVWF 630C09: MOVF 45,W0C0A: MOVWF 620C0B: MOVF 44,W0C0C: MOVWF 610C0D: MOVF 43,W0C0E: MOVWF 600C0F: BCF 0A.30C10: CALL 4E70C11: BSF 0A.30C12: MOVF 7A,W0C13: MOVWF 460C14: MOVF 79,W0C15: MOVWF 450C16: MOVF 78,W0C17: MOVWF 440C18: MOVF 77,W0C19: MOVWF 43.................... }.................... }.................... else0C1A: GOTO 452.................... {.................... if(Y>=0)0C1B: BTFSC 23.70C1C: GOTO 438.................... {.................... b=180-b;0C1D: BSF 03.10C1E: CLRF 5F0C1F: CLRF 5E0C20: MOVLW 340C21: MOVWF 5D0C22: MOVLW 860C23: MOVWF 5C0C24: MOVF 46,W0C25: MOVWF 630C26: MOVF 45,W0C27: MOVWF 620C28: MOVF 44,W0C29: MOVWF 610C2A: MOVF 43,W0C2B: MOVWF 600C2C: BCF 0A.30C2D: CALL 4E70C2E: BSF 0A.30C2F: MOVF 7A,W0C30: MOVWF 460C31: MOVF 79,W0C32: MOVWF 450C33: MOVF 78,W0C34: MOVWF 440C35: MOVF 77,W0C36: MOVWF 43.................... }.................... else0C37: GOTO 452.................... {.................... b=270+b;0C38: BCF 03.10C39: CLRF 5F0C3A: CLRF 5E0C3B: MOVLW 070C3C: MOVWF 5D0C3D: MOVLW 870C3E: MOVWF 5C0C3F: MOVF 46,W0C40: MOVWF 630C41: MOVF 45,W0C42: MOVWF 620C43: MOVF 44,W0C44: MOVWF 610C45: MOVF 43,W0C46: MOVWF 600C47: BCF 0A.30C48: CALL 4E70C49: BSF 0A.30C4A: MOVF 7A,W0C4B: MOVWF 460C4C: MOVF 79,W0C4D: MOVWF 450C4E: MOVF 78,W0C4F: MOVWF 440C50: MOVF 77,W0C51: MOVWF 430C52: BSF 03.6.................... }.................... }........................................ }................................................................................ }.................... //printf("uhel namìreny %10.2f \r\n", b);.................... return b;0C53: BCF 03.60C54: MOVF 43,W0C55: MOVWF 770C56: MOVF 44,W0C57: MOVWF 780C58: MOVF 45,W0C59: MOVWF 790C5A: MOVF 46,W0C5B: MOVWF 7A........................................ }0C5C: RETURN........................................ void motorA (int8 H) //pro ovladani prvniho motoru nastaveni vysky.................... {.................... switch(H){*00DB: MOVF 3F,W00DC: XORLW 0100DD: BTFSC 03.200DE: GOTO 0E300DF: XORLW 0300E0: BTFSC 03.200E1: GOTO 0EC00E2: GOTO 0F5.................... case 1: //reverzní chod.................... output_low (AIN2);00E3: BSF 03.500E4: BCF 08.100E5: BCF 03.500E6: BCF 08.1.................... output_high (AIN1);00E7: BSF 03.500E8: BCF 08.000E9: BCF 03.500EA: BSF 08.0.................... break;00EB: GOTO 0FD........................................ case 2: //dopøedu.................... output_low (AIN1);00EC: BSF 03.500ED: BCF 08.000EE: BCF 03.500EF: BCF 08.0.................... output_high (AIN2);00F0: BSF 03.500F1: BCF 08.100F2: BCF 03.500F3: BSF 08.1.................... break;00F4: GOTO 0FD........................................ default:.................... output_low (AIN2);00F5: BSF 03.500F6: BCF 08.100F7: BCF 03.500F8: BCF 08.1.................... output_low (AIN1);00F9: BSF 03.500FA: BCF 08.000FB: BCF 03.500FC: BCF 08.0.................... }.................... }00FD: RETURN........................................ void uhel (int8 H) //slouzi pro nastaveni nove vysky panelu.................... {.................... float a;.................... int16 b,c;........................................ a=vyska_sl();*0668: BSF 0A.30669: CALL 000066A: BCF 0A.3066B: MOVF 7A,W066C: MOVWF 3A066D: MOVF 79,W066E: MOVWF 39066F: MOVF 78,W0670: MOVWF 380671: MOVF 77,W0672: MOVWF 37.................... b= (int16) a;0673: MOVF 3A,W0674: MOVWF 420675: MOVF 39,W0676: MOVWF 410677: MOVF 38,W0678: MOVWF 400679: MOVF 37,W067A: MOVWF 3F067B: CALL 628067C: MOVF 79,W067D: MOVWF 3C067E: MOVF 78,W067F: MOVWF 3B.................... //printf("auhel pro mereni: %Ld(procenta)\r\n", b);.................... if(b>350)0680: MOVF 3C,W0681: SUBLW 000682: BTFSC 03.00683: GOTO 68E0684: XORLW FF0685: BTFSS 03.20686: GOTO 68B0687: MOVF 3B,W0688: SUBLW 5E0689: BTFSC 03.0068A: GOTO 68E.................... {.................... b=0;068B: CLRF 3C068C: CLRF 3B.................... }.................... else068D: GOTO 68E.................... {........................................ }.................... c=abs(H-b);068E: MOVF 3B,W068F: SUBWF 36,W0690: MOVWF 3F0691: CLRF 400692: MOVF 3C,W0693: BTFSS 03.00694: INCFSZ 3C,W0695: SUBWF 40,F0696: MOVF 40,W0697: MOVWF 3E0698: MOVF 3F,W0699: MOVWF 3D........................................ while(c>2) //maximalni odchylka uhlu, aby nebylo potreba panelem hybat.................... {069A: MOVF 3E,F069B: BTFSS 03.2069C: GOTO 6A1069D: MOVF 3D,W069E: SUBLW 02069F: BTFSC 03.006A0: GOTO 6F3.................... while(H!=b) //probiha dokud se uhel panelu nerovna zadanemu na cele stupne.................... {06A1: MOVF 3B,W06A2: SUBWF 36,W06A3: BTFSS 03.206A4: GOTO 6A806A5: MOVF 3C,F06A6: BTFSC 03.206A7: GOTO 6F2.................... //printf("aktualni uhel: %Ld(procenta)\r\n", b);.................... //printf("zadane nastavení: %d(procenta)\r\n", H);.................... if(H>b)06A8: MOVF 3C,F06A9: BTFSS 03.206AA: GOTO 6B306AB: MOVF 36,W06AC: SUBWF 3B,W06AD: BTFSC 03.006AE: GOTO 6B3.................... {.................... motorA(2);06AF: MOVLW 0206B0: MOVWF 3F06B1: CALL 0DB.................... //printf("zmotor2í: \r\n", );.................... }.................... else06B2: GOTO 6B6.................... {.................... motorA(1);06B3: MOVLW 0106B4: MOVWF 3F06B5: CALL 0DB.................... }........................................ delay_ms (50); //cas sepnuti motoru06B6: MOVLW 3206B7: MOVWF 3F06B8: CALL 330........................................ motorA(3); //vypne motor06B9: MOVLW 0306BA: MOVWF 3F06BB: CALL 0DB.................... delay_ms (50); //doma na ustaleni panelu pred merenim06BC: MOVLW 3206BD: MOVWF 3F06BE: CALL 330.................... a=vyska_sl();06BF: BSF 0A.306C0: CALL 00006C1: BCF 0A.306C2: MOVF 7A,W06C3: MOVWF 3A06C4: MOVF 79,W06C5: MOVWF 3906C6: MOVF 78,W06C7: MOVWF 3806C8: MOVF 77,W06C9: MOVWF 37.................... b= (int16) a;06CA: MOVF 3A,W06CB: MOVWF 4206CC: MOVF 39,W06CD: MOVWF 4106CE: MOVF 38,W06CF: MOVWF 4006D0: MOVF 37,W06D1: MOVWF 3F06D2: CALL 62806D3: MOVF 79,W06D4: MOVWF 3C06D5: MOVF 78,W06D6: MOVWF 3B.................... //printf("auhel pro mereni: %Ld(procenta)\r\n", b);.................... if(b>350) //osetreni pro uhel 0. Zabezpeci ze neprejde stav z 0 na 359 kdy by se solar zacal tocit na druhou stranu06D7: MOVF 3C,W06D8: SUBLW 0006D9: BTFSC 03.006DA: GOTO 6E506DB: XORLW FF06DC: BTFSS 03.206DD: GOTO 6E206DE: MOVF 3B,W06DF: SUBLW 5E06E0: BTFSC 03.006E1: GOTO 6E5.................... {.................... b=0;06E2: CLRF 3C06E3: CLRF 3B.................... }.................... else06E4: GOTO 6E5.................... {.................... b=b;.................... }.................... c=abs(H-b);06E5: MOVF 3B,W06E6: SUBWF 36,W06E7: MOVWF 3F06E8: CLRF 4006E9: MOVF 3C,W06EA: BTFSS 03.006EB: INCFSZ 3C,W06EC: SUBWF 40,F06ED: MOVF 40,W06EE: MOVWF 3E06EF: MOVF 3F,W06F0: MOVWF 3D.................... }06F1: GOTO 6A1.................... }06F2: GOTO 69A.................... motorA(3); //vypne motor06F3: MOVLW 0306F4: MOVWF 3F06F5: CALL 0DB.................... printf("Podaøené nastavení: %Ld\r\n", b);06F6: MOVLW 1806F7: BSF 03.606F8: MOVWF 0D06F9: MOVLW 0006FA: MOVWF 0F06FB: MOVLW 1406FC: BCF 03.606FD: MOVWF 3F06FE: CALL 64706FF: MOVLW 100700: MOVWF 040701: MOVF 3C,W0702: MOVWF 400703: MOVF 3B,W0704: MOVWF 3F0705: CALL 2B00706: MOVLW 0D0707: MOVWF 490708: CALL 0710709: MOVLW 0A070A: MOVWF 49070B: CALL 071.................... }070C: BSF 0A.3070D: BCF 0A.4070E: GOTO 577 (RETURN).................................................................................................... void main().................... {*0C5D: CLRF 040C5E: BCF 03.70C5F: MOVLW 1F0C60: ANDWF 03,F0C61: MOVLW 710C62: BSF 03.50C63: MOVWF 0F0C64: MOVF 0F,W0C65: BCF 06.30C66: BCF 03.50C67: BSF 06.30C68: BSF 03.50C69: BSF 03.60C6A: MOVF 09,W0C6B: ANDLW C00C6C: MOVWF 090C6D: BCF 03.60C6E: BCF 1F.40C6F: BCF 1F.50C70: MOVLW 000C71: BSF 03.60C72: MOVWF 080C73: BCF 03.50C74: CLRF 070C75: CLRF 080C76: CLRF 09........................................ setup_adc_ports(NO_ANALOGS|VSS_VDD);*0C7A: BSF 03.50C7B: BSF 03.60C7C: MOVF 09,W0C7D: ANDLW C00C7E: MOVWF 090C7F: BCF 03.60C80: BCF 1F.40C81: BCF 1F.50C82: MOVLW 000C83: BSF 03.60C84: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_2);0C85: BCF 03.50C86: BCF 03.60C87: BCF 1F.60C88: BCF 1F.70C89: BSF 03.50C8A: BCF 1F.70C8B: BCF 03.50C8C: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);0C8D: BCF 14.50C8E: BCF 2C.50C8F: MOVF 2C,W0C90: BSF 03.50C91: MOVWF 070C92: BCF 03.50C93: BSF 2C.40C94: MOVF 2C,W0C95: BSF 03.50C96: MOVWF 070C97: BCF 03.50C98: BCF 2C.30C99: MOVF 2C,W0C9A: BSF 03.50C9B: MOVWF 070C9C: MOVLW 010C9D: BCF 03.50C9E: MOVWF 140C9F: MOVLW 000CA0: BSF 03.50CA1: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);0CA2: MOVF 01,W0CA3: ANDLW C70CA4: IORLW 080CA5: MOVWF 01.................... setup_timer_1(T1_DISABLED);0CA6: BCF 03.50CA7: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);0CA8: MOVLW 000CA9: MOVWF 780CAA: MOVWF 120CAB: MOVLW 000CAC: BSF 03.50CAD: MOVWF 12.................... setup_ccp1(CCP_OFF);0CAE: BCF 03.50CAF: BSF 2C.20CB0: MOVF 2C,W0CB1: BSF 03.50CB2: MOVWF 070CB3: BCF 03.50CB4: CLRF 170CB5: BSF 03.50CB6: CLRF 1B0CB7: CLRF 1C0CB8: MOVLW 010CB9: MOVWF 1D.................... setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard0CBA: BCF 03.50CBB: BSF 03.60CBC: CLRF 070CBD: CLRF 080CBE: CLRF 09........................................ setup_adc_ports(PIN_A0); //piny pro A/D RA00CBF: BSF 03.50CC0: MOVF 09,W0CC1: ANDLW C00CC2: MOVWF 090CC3: BCF 03.60CC4: BCF 1F.40CC5: BCF 1F.50CC6: MOVLW 280CC7: BSF 03.60CC8: MOVWF 08........................................ printf("Akcelerometr: \r\n",);0CC9: MOVLW 320CCA: BCF 03.50CCB: MOVWF 0D0CCC: MOVLW 000CCD: MOVWF 0F0CCE: BCF 0A.30CCF: BCF 03.60CD0: GOTO 0930CD1: BSF 0A.3........................................ motorA(3);0CD2: MOVLW 030CD3: MOVWF 3F0CD4: BCF 0A.30CD5: CALL 0DB0CD6: BSF 0A.3........................................ float a, b;.................... unsigned int value1=10;0CD7: MOVLW 0A0CD8: MOVWF 35............................................................ setAK(); //nastaveni akcelerometru0CD9: BCF 0A.30CDA: GOTO 1320CDB: BSF 0A.3........................................ while(TRUE).................... {........................................ X= akcele (AK_XH, AK_XL);0CDC: MOVLW 010CDD: MOVWF 470CDE: MOVLW 020CDF: MOVWF 480CE0: BCF 0A.30CE1: CALL 18E0CE2: BSF 0A.30CE3: MOVF 79,W0CE4: MOVWF 210CE5: MOVF 78,W0CE6: MOVWF 20.................... Y= akcele (AK_YH, AK_YL);0CE7: MOVLW 030CE8: MOVWF 470CE9: MOVLW 040CEA: MOVWF 480CEB: BCF 0A.30CEC: CALL 18E0CED: BSF 0A.30CEE: MOVF 79,W0CEF: MOVWF 230CF0: MOVF 78,W0CF1: MOVWF 22.................... Z= akcele (AK_ZH, AK_ZL);0CF2: MOVLW 050CF3: MOVWF 470CF4: MOVLW 060CF5: MOVWF 480CF6: BCF 0A.30CF7: CALL 18E0CF8: BSF 0A.30CF9: MOVF 79,W0CFA: MOVWF 250CFB: MOVF 78,W0CFC: MOVWF 24........................................ printf("Stav X: %Ld(procenta)\r\n", X);0CFD: MOVLW 3B0CFE: BSF 03.60CFF: MOVWF 0D0D00: MOVLW 000D01: MOVWF 0F0D02: BCF 03.00D03: MOVLW 080D04: BCF 03.60D05: MOVWF 360D06: BCF 0A.30D07: CALL 2610D08: BSF 0A.30D09: MOVLW 100D0A: MOVWF 040D0B: MOVF 21,W0D0C: MOVWF 400D0D: MOVF 20,W0D0E: MOVWF 3F0D0F: BCF 0A.30D10: CALL 2B00D11: BSF 0A.30D12: MOVLW 400D13: BSF 03.60D14: MOVWF 0D0D15: MOVLW 000D16: MOVWF 0F0D17: BSF 03.00D18: MOVLW 0C0D19: BCF 03.60D1A: MOVWF 360D1B: BCF 0A.30D1C: CALL 2610D1D: BSF 0A.3.................... printf("Stav Y: %Ld(procenta)\r\n", Y);0D1E: MOVLW 470D1F: BSF 03.60D20: MOVWF 0D0D21: MOVLW 000D22: MOVWF 0F0D23: BCF 03.00D24: MOVLW 080D25: BCF 03.60D26: MOVWF 360D27: BCF 0A.30D28: CALL 2610D29: BSF 0A.30D2A: MOVLW 100D2B: MOVWF 040D2C: MOVF 23,W0D2D: MOVWF 400D2E: MOVF 22,W0D2F: MOVWF 3F0D30: BCF 0A.30D31: CALL 2B00D32: BSF 0A.30D33: MOVLW 4C0D34: BSF 03.60D35: MOVWF 0D0D36: MOVLW 000D37: MOVWF 0F0D38: BSF 03.00D39: MOVLW 0C0D3A: BCF 03.60D3B: MOVWF 360D3C: BCF 0A.30D3D: CALL 2610D3E: BSF 0A.3.................... printf("Stav Z: %Ld(procenta)\r\n", Z);0D3F: MOVLW 530D40: BSF 03.60D41: MOVWF 0D0D42: MOVLW 000D43: MOVWF 0F0D44: BCF 03.00D45: MOVLW 080D46: BCF 03.60D47: MOVWF 360D48: BCF 0A.30D49: CALL 2610D4A: BSF 0A.30D4B: MOVLW 100D4C: MOVWF 040D4D: MOVF 25,W0D4E: MOVWF 400D4F: MOVF 24,W0D50: MOVWF 3F0D51: BCF 0A.30D52: CALL 2B00D53: BSF 0A.30D54: MOVLW 580D55: BSF 03.60D56: MOVWF 0D0D57: MOVLW 000D58: MOVWF 0F0D59: BSF 03.00D5A: MOVLW 0C0D5B: BCF 03.60D5C: MOVWF 360D5D: BCF 0A.30D5E: CALL 2610D5F: BSF 0A.3............................................................................................................................................ set_adc_channel(0); //nastavi AD na kanál 0 (RA0)0D60: MOVLW 000D61: MOVWF 780D62: MOVF 1F,W0D63: ANDLW C30D64: IORWF 78,W0D65: MOVWF 1F.................... read_adc(ADC_START_ONLY); // Spustime A/D prevod0D66: BSF 1F.1.................... Delay_ms(1);0D67: MOVLW 010D68: MOVWF 3F0D69: BCF 0A.30D6A: CALL 3300D6B: BSF 0A.3.................... while(!adc_done()); // Cekame na dokonceni prevodu0D6C: BTFSC 1F.10D6D: GOTO 56C.................... value1=read_adc(); // Precteme hodnotu z prevodniku0D6E: BSF 1F.10D6F: BTFSC 1F.10D70: GOTO 56F0D71: MOVF 1E,W0D72: MOVWF 35.................... uhel (value1);0D73: MOVF 35,W0D74: MOVWF 360D75: BCF 0A.30D76: GOTO 6680D77: BSF 0A.3.................... printf("zadaný uhel %d \r\n", value1);0D78: MOVLW 5F0D79: BSF 03.60D7A: MOVWF 0D0D7B: MOVLW 000D7C: MOVWF 0F0D7D: MOVLW 0C0D7E: BCF 03.60D7F: MOVWF 3F0D80: BCF 0A.30D81: CALL 6470D82: BSF 0A.30D83: MOVF 35,W0D84: MOVWF 360D85: MOVLW 1F0D86: MOVWF 370D87: BCF 0A.30D88: GOTO 7240D89: BSF 0A.30D8A: MOVLW 200D8B: MOVWF 490D8C: BCF 0A.30D8D: CALL 0710D8E: BSF 0A.30D8F: MOVLW 0D0D90: MOVWF 490D91: BCF 0A.30D92: CALL 0710D93: BSF 0A.30D94: MOVLW 0A0D95: MOVWF 490D96: BCF 0A.30D97: CALL 0710D98: BSF 0A.3........................................................................................................................ delay_ms (2000);0D99: MOVLW 080D9A: MOVWF 360D9B: MOVLW FA0D9C: MOVWF 3F0D9D: BCF 0A.30D9E: CALL 3300D9F: BSF 0A.30DA0: DECFSZ 36,F0DA1: GOTO 59B............................................................ }0DA2: GOTO 4DC.................... }....................0DA3: SLEEPConfiguration Fuses:Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40