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ę?