Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
08/04/03 16:41
Read: times


 
#52088 - RE: Paulmon memory problem
Responding to: ???'s previous message
I have checked the parts of my code that use push/pop sequences, but I don't think that there are any errors in those parts. I have posted the parts below so if any of you see any push/pop errors I may have missed, please let me know. Thanks.

This first part is the built in lcd routines by Paulmon that uses push/pop:

;for writing a string to lcd
lcd_pstr: CLR a
MOVC a, @a+dptr
INC dptr
JZ lcd_pstr_end
PUSH dpl
PUSH dph
ACALL lcd_cout
POP dph
POP dpl
SJMP lcd_pstr
lcd_pstr_end: RET


;writes what is in Acc to lcd
lcd_cout: PUSH acc
ACALL lcd_busy ;busy flag checked here, so no
MOV dptr, #lcd_data_wr ;need to check before calling lcd_out
POP acc
MOVX @dptr, a
RET

This 2nd part below is the 32-bit division by Dr. Marshall that uses push/pop instructions:

UDIV32: push 08 ; Save Register Bank 1
push 09
push 0AH
push 0BH
push 0CH
push 0DH
push 0EH
push 0FH
push dpl
push dph
push B
setb RS0 ; Select Register Bank 1
mov r7, #0 ; clear partial remainder
mov r6, #0
mov r5, #0
mov r4, #0
mov B, #32 ; set loop count

div_lp32: clr RS0 ; Select Register Bank 0
clr C ; clear carry flag
mov a, r0 ; shift the highest bit of the
rlc a ; dividend into...
mov r0, a
mov a, r1
rlc a
mov r1, a
mov a, r2
rlc a
mov r2, a
mov a, r3
rlc a
mov r3, a
setb RS0 ; Select Register Bank 1
mov a, r4 ; ... the lowest bit of the
rlc a ; partial remainder
mov r4, a
mov a, r5
rlc a
mov r5, a
mov a, r6
rlc a
mov r6, a
mov a, r7
rlc a
mov r7, a
mov a, r4 ; trial subtract divisor from
clr C ; partial remainder
subb a, 04
mov dpl, a
mov a, r5
subb a, 05
mov dph, a
mov a, r6
subb a, #0
mov 06, a
mov a, r7
subb a, #0
mov 07, a
cpl C ; complement external borrow
jnc div_321 ; update partial remainder if
; borrow
mov r7, 07 ; update partial remainder
mov r6, 06
mov r5, dph
mov r4, dpl
div_321: mov a, r0 ; shift result bit into partial
rlc a ; quotient
mov r0, a
mov a, r1
rlc a
mov r1, a
mov a, r2
rlc a
mov r2, a
mov a, r3
rlc a
mov r3, a
djnz B, div_lp32

mov 07, r7 ; put remainder, saved before the
mov 06, r6 ; last subtraction, in bank 0
mov 05, r5
mov 04, r4
mov 03, r3 ; put quotient in bank 0
mov 02, r2
mov 01, r1
mov 00, r0
clr RS0
pop B
pop dph
pop dpl
pop 0FH ; Retrieve Register Bank 1
pop 0EH
pop 0DH
pop 0CH
pop 0BH
pop 0AH
pop 09
pop 08
ret


List of 13 messages in thread
TopicAuthorDate
Paulmon memory problem            01/01/70 00:00      
   RE: Paulmon memory problem            01/01/70 00:00      
      RE: Paulmon memory problem            01/01/70 00:00      
   RE: Paulmon memory problem            01/01/70 00:00      
      RE: Paulmon memory problem            01/01/70 00:00      
         RE: Paulmon memory problem            01/01/70 00:00      
      RE: Paulmon memory problem            01/01/70 00:00      
         RE: Paulmon memory problem            01/01/70 00:00      
            RE: Paulmon memory problem            01/01/70 00:00      
               Micro Controller            01/01/70 00:00      
                  RE: Micro Controller            01/01/70 00:00      
               Micro            01/01/70 00:00      
                  RE: Micro            01/01/70 00:00      

Back to Subject List