[Asembler] Intel 8051 wyświetlacz siedmiosegmentowy

0

Proszę o podpowiedź. Wykonałem program dla procesora Intel 8051 który przy pomocy przycisków zwiększa wartość liczby i wyświetla tą wartość na wyświetlaczu.

$INCLUDE (REG52.INC)
 
CLOCK EQU P3.1
OFF EQU P3.3
LOAD EQU P3.2
DANE EQU P3.0
ENTER EQU P1.5
ESC EQU P1.4

MOV R4, #0
MOV R5, #0
MOV R6, #0
MOV R7, #0
			
WPISYWANIE:
			
			MOV A, R4
 			ACALL WPIS
 			MOV A, R5
 			ACALL WPIS
 			MOV A, R6
 			ACALL WPIS
 			MOV A, R7
 			ACALL WPIS
 			
 			CLR LOAD
 			SETB LOAD
 			CLR OFF
 			
czekaj:	DJNZ R0, czekaj
			DJNZ R1, czekaj
			
jump: 	JNB ENTER, LICZ

 			JNB ESC, LICZ2
 			
 			SJMP jump


LICZ2:   
			DEC R4
			CJNE R4, #-1, WPISYWANIE
			DEC R5
			MOV R4, #9
			CJNE R5, #-1, WPISYWANIE
			DEC R6
			MOV R5, #9
			CJNE R6, #-1, WPISYWANIE
			DEC R7
			MOV R6, #9
			SJMP WPISYWANIE

LICZ:    INC R4
			CJNE R4, #10, WPISYWANIE
			INC R5
			MOV R4, #0
			CJNE R5, #10, WPISYWANIE
			INC R6
			MOV R5, #0
			CJNE R6, #10, WPISYWANIE
			INC R7
			MOV R6, #0
			SJMP WPISYWANIE
 			
WPIS:	
 			MOV DPTR, #TABLICA
 			MOVC A, @A+DPTR
 			MOV R0, #8
NEXT:		RRC A
 			MOV DANE, C
 			CLR CLOCK
 			SETB CLOCK
 			DJNZ R0, NEXT
 			RET
 			
 TABLICA:
 			DB 0C0H; 0
 			DB 0F9H; 1
 			DB 0A4H; 2
 			DB 0B0H; 3
 			DB 099H; 4
 			DB 092H; 5
 			DB 082H; 6
 			DB 0F8H; 7
 			DB 080H; 8
 			DB 090H; 9
 			
 			END

Wykonałem program stosując 4 rejestry i teraz staram się wykonać to samo stosując tylko rejestr R4

$INCLUDE (REG52.INC)
 
CLOCK EQU P3.1
OFF EQU P3.3
LOAD EQU P3.2
DANE EQU P3.0
PLUS EQU P1.4
MINUS EQU P1.5

			MOV R4, #0
			
WPISYWANIE:
			MOV A, R4
			ACALL WPIS
			 
			MOV A, R4 
			MOV B, #10
			DIV AB
			ACALL WPIS
			
			MOV A, R4 
			MOV B, #100
			DIV AB
			ACALL WPIS
			
			MOV A, R4 
			MOV B, #1000
			DIV AB
			ACALL WPIS
 			
 			CLR LOAD
 			SETB LOAD
 			CLR OFF
CZEKAJ:
			DJNZ R0, czekaj
			DJNZ R1, czekaj
			
JUMP:
			JNB PLUS, DODAJ
			JNB MINUS, ODEJMIJ
			SJMP JUMP
			
ODEJMIJ:
			DEC R4
			SJMP WPISYWANIE
			
DODAJ:
			INC R4
			SJMP WPISYWANIE

WPIS:	
 			MOV DPTR, #TABLICA
 			MOVC A, @A+DPTR
 			MOV R0, #8
NEXT:		RRC A
 			MOV DANE, C
 			CLR CLOCK
 			SETB CLOCK
 			DJNZ R0, NEXT
 			RET
 			
TABLICA:
 			DB 0C0H; 0
 			DB 0F9H; 1
 			DB 0A4H; 2
 			DB 0B0H; 3
 			DB 099H; 4
 			DB 092H; 5
 			DB 082H; 6
 			DB 0F8H; 7
 			DB 080H; 8
 			DB 090H; 9
 			
 			END

Każdy kolejny wpis dzielę przez potęgę 10.
np. R4 po zwiekszaniu ma wartosc 23
wrzucenie 1 cyfry: R4/1 = 23 nie wyświetli się
wrzucenie 2 cyfry: R4/10 = 2 (bez reszty) wyświetla się prawidłowo
3 cyfra R4/100 = 0
4 cyfra R4/1000 = 0

w jaki sposób prawidłowo wyświetlić pierwszą cyfrę?

0

Reszta z dzielenia przez 10

1 użytkowników online, w tym zalogowanych: 0, gości: 1