;=======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 ERR1E EQU 0X50 ;FLOATING POINT REGISTERS FOR ERROR1 ERR1A0 EQU 0X51 ERR1A1 EQU 0X52 ERR1A2 EQU 0X53 ERR1A3 EQU 0X54 ERR2E EQU 0X55 ;FLOATING POINT REGISTERS FOR ERROR2 ERR2A0 EQU 0X56 ERR2A1 EQU 0X57 ERR2A2 EQU 0X58 ERR2A3 EQU 0X59 DELTE EQU 0X5A ;FLOATING POINT REGISTERS FOR DELTA TIME DELTA0 EQU 0X5B DELTA1 EQU 0X5C DELTA2 EQU 0X5D DELTA3 EQU 0X5E DAEXP EQU 0X5F DA0 EQU 0X60 DA1 EQU 0X61 DA2 EQU 0X62 X EQU 0 ;------------------------------------------------------------ ORG 0x00 CLRW ;clear w START BTFSC X,1 ;skip next instruction if clear GOTO NEXT ;IF NOT CLEAR MOVE TO NEXT CLRW ;PUT ZERO IN W MOVWF ERR2E ;MOVE ZERO TO EXPONENT PART OF ERROR MOVWF ERR2A0 ;MOVE ZERO TO FIRST 8-BITS MOVWF ERR2A1 ; SECOND 8-BITS MOVWF ERR2A2 ; THIRD 8-BITS MOVWF ERR2A3 ; FOURTH 8-BITS ?? INCF X,1 ;MAKE X ONE SO START WILL NOT RUN AGAIN NEXT ;HERE NEED TO DEVELOP A WAY TO READ ERROR1 ;AND PLACE IT IN THE ERROR1 REGISTERS MOVLW 0X83 MOVWF ERR1E ;MOVE EXPONENT OF FIRST ERROR TO AEXP MOVLW 0X20 ;THROUGH W MOVWF ERR1A0 ;MOVE FIRST 8-BITS OF ERR1 TO AARGB0 MOVLW 0X00 ; MOVWF ERR1A1 ;MOVE SECOND 8-BITS OF ERR1 TO AARGB1 MOVLW 0X00 MOVWF ERR1A2 ;MOVE THIRD 8-BITS OF ERR1 TO AARGB2 MOVLW 0X00 MOVLW 0X82 MOVWF ERR2E ;MOVE EXPONENT OF FIRST ERROR TO AEXP MOVLW 0X20 ;THROUGH W MOVWF ERR2A0 ;MOVE FIRST 8-BITS OF ERR1 TO AARGB0 MOVLW 0X00 ; MOVWF ERR2A1 ;MOVE SECOND 8-BITS OF ERR1 TO AARGB1 MOVLW 0X00 MOVWF ERR2A2 ;MOVE THIRD 8-BITS OF ERR1 TO AARGB2 MOVLW 0X00 MOVLW 0X80 MOVWF DELTE ;MOVE EXPONENT OF FIRST ERROR TO AEXP MOVLW 0X00 ;THROUGH W MOVWF DELTA0 ;MOVE FIRST 8-BITS OF ERR1 TO AARGB0 MOVLW 0X00 ; MOVWF DELTA1 ;MOVE SECOND 8-BITS OF ERR1 TO AARGB1 MOVLW 0X00 MOVWF DELTA2 ;MOVE THIRD 8-BITS OF ERR1 TO AARGB2 MOVLW 0X00 MOVF ERR1E,W ;MOVE EXPONENT OF FIRST ERROR TO AEXP MOVWF AEXP ;THROUGH W MOVF ERR1A0,W ;MOVE FIRST 8-BITS OF ERR1 TO AARGB0 MOVWF AARGB0 ; MOVF ERR1A1,W ;MOVE SECOND 8-BITS OF ERR1 TO AARGB1 MOVWF AARGB1 MOVF ERR1A2,W ;MOVE THIRD 8-BITS OF ERR1 TO AARGB2 MOVWF AARGB2 MOVF ERR2E,W ;MOVE EXPONENT OF SECOND ERROR TO BEXP MOVWF BEXP ;THROUGH W MOVF ERR2A0,W ;MOVE FIRST 8-BITS OF ERR2 TO BARGB0 MOVWF BARGB0 MOVF ERR2A1,W ;MOVE SECOND 8-BITS OF ERR2 TO BARGB1 MOVWF BARGB1 MOVF ERR2A2,W ;MOVE THIRD 8-BITS OF ERR2 TO BARGB2 MOVWF BARGB2 CALL FPS32 ;SUBTRACT BARG FROM AARG CHANGE MOVF ERR1E,W ;PUT ERR1E TO W MOVWF ERR2E ;PUT W TO ERR2E MOVF ERR1A0,W ;PUT ERR1A0 IN W MOVWF ERR2A0 ;MOVE W TO ERR2A0 MOVF ERR1A1,W ; MOVWF ERR2A1 ;THIS WHOLE PROCESS MOVES THE VALUE IN ERROR1 MOVF ERR1A2,W ;INTO ERROR2 SO THST DURING THE NEXT ITERATION MOVWF ERR2A2 ;THE CURRENT VALUE OF ERROR1 BECOMES THE SECOND MOVF ERR1A3,W ;VALUE IN THE DERIVATION MOVWF ERR2A3 DIV MOVF DELTE,W ;ALL THIS MOVES DELT REGISTERS TO BARG REGISTERS MOVWF BEXP ;TO BE DIVIDED BY ERR1-ERR2 WHICH IS IN THE AARG MOVF DELTA0,W ;RESISTERS MOVWF BARGB0 MOVF DELTA1,W MOVWF BARGB1 MOVF DELTA2,W MOVWF BARGB2 CALL FPD32 ;DIVIDE AARG BY BARG MOVE MOVF AEXP,W ;NOW MOVE THE RESULT RETURNED IN AAGR TO THE MOVWF DAEXP ;REGISTERS OF THE DERIVATIVE ERROR NAMED D MOVF AARGB0,W MOVWF DA0 MOVF AARGB1,W MOVWF DA1 MOVF AARGB2,W MOVWF DA2 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