;=======derivate.asm ==================================10/28/97== list p=16c63 radix hex LIST P = 16C63 INCLUDE ; P16C74 include file INCLUDE ; PIC16 device specific definitions INCLUDE ; PIC16 math library definitions ;********************************************************************************************** ;********************************************************************************************** ;------------------------------------------------------------ ; cpu equates (memory map) pcl equ 0X02 status equ 0x03 porta equ 0x05 portb equ 0x06 pclath equ 0x0a trisa equ 0x85 trisb equ 0x86 COUNT EQU 0X4F INTVAL1EXP EQU 0X50 ;FLOATING POINT REGISTERS FOR ERROR1 INTVAL1B0 EQU 0X51 INTVAL1B1 EQU 0X52 INTVAL1B2 EQU 0X53 INTVAL2EXP EQU 0X54 INTVAL2B0 EQU 0X55 ;FLOATING POINT REGISTERS FOR ERROR2 INTVAL2B1 EQU 0X56 INTVAL2B2 EQU 0X57 INTVAL3EXP EQU 0X58 INTVAL3B0 EQU 0X59 INTVAL3B1 EQU 0X5A ;FLOATING POINT REGISTERS FOR DELTA TIME INTVAL3B2 EQU 0X5B INTVAL4EXP EQU 0X5C ;FLOATING POINT REGISTERS FOR ERROR1 INTVAL4B0 EQU 0X5D INTVAL4B1 EQU 0X5E INTVAL4B2 EQU 0X5F INTVAL5EXP EQU 0X60 INTVAL5B0 EQU 0X61 ;FLOATING POINT REGISTERS FOR ERROR2 INTVAL5B1 EQU 0X62 INTVAL5B2 EQU 0X63 INTVAL6EXP EQU 0X64 INTVAL6B0 EQU 0X65 INTVAL6B1 EQU 0X66 ;FLOATING POINT REGISTERS FOR DELTA TIME INTVAL6B2 EQU 0X67 INTVAL7EXP EQU 0X68 ;FLOATING POINT REGISTERS FOR ERROR1 INTVAL7B0 EQU 0X69 INTVAL7B1 EQU 0X6A INTVAL7B2 EQU 0X6B INTVAL8EXP EQU 0X6C INTVAL8B0 EQU 0X6D ;FLOATING POINT REGISTERS FOR ERROR2 INTVAL8B1 EQU 0X6E INTVAL8B2 EQU 0X6F INTVAL9EXP EQU 0X70 INTVAL9B0 EQU 0X71 INTVAL9B1 EQU 0X72 ;FLOATING POINT REGISTERS FOR DELTA TIME INTVAL9B2 EQU 0X73 INTVAL10EXP EQU 0X74 ;FLOATING POINT REGISTERS FOR ERROR1 INTVAL10B0 EQU 0X75 INTVAL10B1 EQU 0X76 INTVAL10B2 EQU 0X77 INTVAL11EXP EQU 0X78 INTVAL11B0 EQU 0X79 ;FLOATING POINT REGISTERS FOR ERROR2 INTVAL11B1 EQU 0X7A INTVAL11B2 EQU 0X7B INTVAL12EXP EQU 0X7C INTVAL12B0 EQU 0X7D INTVAL12B1 EQU 0X7E INTVAL12B2 EQU 0X7F TOTALEXP EQU 0XA0 TOTALB0 EQU 0XA1 TOTALB1 EQU 0XA2 TOTALB2 EQU 0XA3 ERREXP EQU 0XA4 ERRB0 EQU 0XA5 ERRB1 EQU 0XA6 ERRB2 EQU 0XA7 MEMBASE EQU 0X4E X EQU 0 ;------------------------------------------------------------ ORG 0x00 CLRW ;clear w START MOVLW 0X50 ;STARTING MEMORY LOCATION FOR ERRORS MOVWF MEMBASE CLRW ;PUT ZERO IN W MOVWF INTVAL1EXP ;CLEARING ALL VALUES MOVWF INTVAL1B0 MOVWF INTVAL1B1 MOVWF INTVAL1B2 MOVWF INTVAL2EXP MOVWF INTVAL2B0 MOVWF INTVAL2B1 MOVWF INTVAL2B2 MOVWF INTVAL3EXP MOVWF INTVAL3B0 MOVWF INTVAL3B1 MOVWF INTVAL3B2 MOVWF INTVAL4EXP MOVWF INTVAL4B0 MOVWF INTVAL4B1 MOVWF INTVAL4B2 MOVWF INTVAL5EXP MOVWF INTVAL5B0 MOVWF INTVAL5B1 MOVWF INTVAL5B2 MOVWF INTVAL6EXP MOVWF INTVAL6B0 MOVWF INTVAL6B1 MOVWF INTVAL6B2 MOVWF INTVAL7EXP MOVWF INTVAL7B0 MOVWF INTVAL7B1 MOVWF INTVAL7B2 MOVWF INTVAL8EXP MOVWF INTVAL8B0 MOVWF INTVAL8B1 MOVWF INTVAL8B2 MOVWF INTVAL9EXP MOVWF INTVAL9B0 MOVWF INTVAL9B1 MOVWF INTVAL9B2 MOVWF INTVAL10EXP MOVWF INTVAL10B0 MOVWF INTVAL10B1 MOVWF INTVAL10B2 MOVWF INTVAL11EXP MOVWF INTVAL11B0 MOVWF INTVAL11B1 MOVWF INTVAL11B2 MOVWF INTVAL12EXP MOVWF INTVAL12B0 MOVWF INTVAL12B1 MOVWF INTVAL12B2 MOVLW 0X50 MOVWF COUNT ;SET COUNT TO FIRST MEMORY LOCATION MOVF MEMBASE,W ;MOVE THE MEMORY LOCATION INTO W MOVWF FSR ;SET MEMORY POINTER TO START ;GETTING THE VALUE FOR THE LATEST ERROR AND STORING IT IN AARG MOVF ERREXP,W MOVWF AEXP ;MOVE EXPONENT OF FIRST ERROR TO AEXP MOVF ERRB0,W ;THROUGH W MOVWF AARGB0 ;MOVE FIRST 8-BITS OF ERR1 TO AARGB0 MOVF ERRB1,W ; MOVWF AARGB1 ;MOVE SECOND 8-BITS OF ERR1 TO AARGB1 MOVF ERRB2,W MOVWF AARGB2 ;MOVE THIRD 8-BITS OF ERR1 TO AARGB2 ;THIS IS PUTTING THE VALUE OF DELTA t INTO BARG FOR MULTIPLICATION WITH THE ERROR MOVLW 0X7E MOVWF BEXP ;MOVE EXPONENT OF FIRST ERROR TO AEXP MOVLW 0X40 ;THROUGH W MOVWF BARGB0 ;MOVE FIRST 8-BITS OF ERR1 TO AARGB0 MOVLW 0X00 ; MOVWF BARGB1 ;MOVE SECOND 8-BITS OF ERR1 TO AARGB1 MOVLW 0X00 MOVWF BARGB2 ;MOVE THIRD 8-BITS OF ERR1 TO AARGB2 MOVLW 0X00 CALL FPM32 ;MULTIPLY THE ERROR X TIME INTERVAL OR DELTA t ;NOW PUTTING THE CALCULATED AREA INTO NEXT AVAILABLE MEMORY LOCATION MOVF AEXP,W MOVWF INDF ;PUT THE EXPONENT VALUE IN W INCF FSR,F ;MOVE TO NEXT MEMORY LOCATION MOVF AARGB0,W ;PUT AARGB0 INTO W MOVWF INDF ;MOVE W TO AARGB0(NUM) INCF FSR,F ;INCREMENT TO NEXT LOCATION MOVF AARGB1,W ; MOVWF INDF ; INCF FSR,F ;INCREMENT AGAIN MOVF AARGB2,W ; MOVWF INDF ;NOW, THE ERROR HAS BEEN SAVED IN MEMORY LOC (NUM) INCF FSR,F MOVLW 0X04 ADDWF COUNT,1 ;SET THE MEMORY POINTER TO THE NEXT AVAILABLE SPOT ;HERE, WE HAVE TO TEST TO SEE IF ALL 12 HAVE BEEN USED ;AND RESET COUNT, IF IT HAS BEEN BTFSS COUNT,7 ;TEST TO SEE IF COUNT IS FINISHED, ALL 12 VALUES LOADED ;THIS SECTION ADDS ALL THE ERROR STORED IN MEMORY, 12 OF EM SUM MOVF MEMBASE,W ;MOVE MEMORY START LOCATION INTO W MOVWF FSR ;SET THE POINTER TO START OF MEMORY MOVF INTVAL1EXP,W ;PUTS VALUE TO BE ADDED MOVWF AEXP MOVF INTVAL1B0,W MOVWF AARGB0 MOVF INTVAL1B1,W MOVWF AARGB1 MOVF INTVAL1B2,W MOVWF AARGB2 MOVF INTVAL2EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL2B0,W MOVWF BARGB0 MOVF INTVAL2B1,W MOVWF BARGB1 MOVF INTVAL2B2,W MOVWF BARGB2 CALL FPA32 ;CALL 32 BIT FLOATING POINT ADDITION ROUTINE MOVF INTVAL3EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL3B0,W MOVWF BARGB0 MOVF INTVAL3B1,W MOVWF BARGB1 MOVF INTVAL3B2,W MOVWF BARGB2 CALL FPA32 ;NOTE: AAGRB ALREADY HAS SUM OF FIRST TWO MOVF INTVAL4EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL4B0,W MOVWF BARGB0 MOVF INTVAL4B1,W MOVWF BARGB1 MOVF INTVAL4B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL5EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL5B0,W MOVWF BARGB0 MOVF INTVAL5B1,W MOVWF BARGB1 MOVF INTVAL5B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL6EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL6B0,W MOVWF BARGB0 MOVF INTVAL6B1,W MOVWF BARGB1 MOVF INTVAL6B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL7EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL7B0,W MOVWF BARGB0 MOVF INTVAL7B1,W MOVWF BARGB1 MOVF INTVAL7B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL8EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL8B0,W MOVWF BARGB0 MOVF INTVAL8B1,W MOVWF BARGB1 MOVF INTVAL8B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL9EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL9B0,W MOVWF BARGB0 MOVF INTVAL9B1,W MOVWF BARGB1 MOVF INTVAL9B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL10EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL10B0,W MOVWF BARGB0 MOVF INTVAL10B1,W MOVWF BARGB1 MOVF INTVAL10B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL11EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL11B0,W MOVWF BARGB0 MOVF INTVAL11B1,W MOVWF BARGB1 MOVF INTVAL11B2,W MOVWF BARGB2 CALL FPA32 MOVF INTVAL12EXP,W ;PUTS NEXT VALUE IN TO BE ADDED MOVWF BEXP MOVF INTVAL12B0,W MOVWF BARGB0 MOVF INTVAL12B1,W MOVWF BARGB1 MOVF INTVAL12B2,W MOVWF BARGB2 CALL FPA32 MOVF AEXP,W ;STORES THE SUM OF ALL 12 AREAS OF INTEGRATION MOVWF TOTALEXP MOVF AARGB0,W MOVWF TOTALB0 MOVF AARGB1,W MOVWF TOTALB1 MOVF AARGB2,W MOVWF TOTALB2 TEND GOTO TEND ;********************************************************************************************** ; These include files contain all of the floating point routines for convenience ; in experimenting with routines in addition to the above example. In a specific case, ; only the necessary routine and its dependencies need be included. INCLUDE ; INCLUDE ;********************************************************************************************** END