123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- MODULE OSAL_Math.s51
- PUBLIC osalMcuDivide31By16To16
- FUNCTION osalMcuDivide31By16To16,0201H
- EXTERN ?XSP
- RSEG DATA_Z:DATA:NOROOT(0)
- savedR6:
- DS 1
- savedR7:
- DS 1
- savedRemHi:
- DS 1
- savedRemLow:
- DS 1
- savedDPH:
- DS 1
- savedDPL:
- DS 1
- RSEG NEAR_CODE:CODE:NOROOT(2)
- osalMcuDivide31By16To16:
- #ifdef DEBUG_GPIO
-
- #endif
-
- MOV B,#16
-
- MOV savedR6,R6
- MOV savedR7,R7
-
- MOV savedDPL,DPL
- MOV savedDPH,DPH
-
- MOV DPL,?XSP
- MOV DPH,?XSP+1
- MOVX A,@DPTR
- XCH A,R6
- INC DPTR
- MOVX A,@DPTR
- XCH A,R7
-
- MOV DPL,savedDPL
- MOV DPH,savedDPH
-
- MOV A,R3
- XCH A,R1
- MOV A,R2
- XCH A,R0
-
- MOV A,R5
- XCH A,R3
- MOV A,R4
- XCH A,R2
- TopOfLoop:
-
- CLR C
- MOV A,R0
- RLC A
- XCH A,R0
- MOV A,R1
- RLC A
- XCH A,R1
- MOV A,R2
- RLC A
- XCH A,R2
- MOV A,R3
- RLC A
- XCH A,R3
-
-
- CLR C
- MOV A,R2
- SUBB A,R6
- MOV savedRemLow,A ; save remainder in case it needs to be restored
- MOV A,R3
- SUBB A,R7
- MOV savedRemHi,A ; save remainder in case it needs to be restored
-
-
- CPL C
- JNC ShiftQuotient
-
- MOV R3,savedRemHi
- MOV R2,savedRemLow
- ShiftQuotient:
- MOV A,R4
- RLC A
- XCH A,R4
- MOV A,R5
- RLC A
- XCH A,R5
-
- DJNZ B,TopOfLoop
-
- MOV R6,savedR6
- MOV R7,savedR7
- #ifdef DEBUG_GPIO
-
- #endif
- RET
- END
|