Boa tarde,
Estou iniciando a aprender Assembly e estou com dificuldades em fazer um relógio para um display multiplexado. Não estou conseguindo fazer com que ele zere quando chega em 23:59.
Já tentei várias formas, mas estou tendo dificuldade em criar o código. Agradeço desde já pela a ajuda. Segue o código que eu fiz:
tabela: DB 11000000b ; 0
DB 11111001b ; 1
DB 10100100b ; 2
DB 10110000b ; 3
DB 10011001b ; 4
DB 10010010b ; 5
DB 10000010b ; 6
DB 11111000b ; 7
DB 10000000b ; 8
DB 10010000b ; 9
ORG 00H
MOV DPTR, #tabela
INICIO: MOV R0, #10
MOV R1, #00
MOV R2, #00
MOV R3, #10
MOV R4, #06
MOV R5, #00
MOV R6, #10
MOV R7, #00
D1: LCALL DISPLAY1
LCALL ATRASO
D2: LCALL DISPLAY2
LCALL ATRASO
D3: LCALL DISPLAY3
LCALL ATRASO
D4: LCALL DISPLAY4
LCALL ATRASO
CJNE R1,#09,END01
END01: INC R1
DJNZ R3, D1
MOV R3, #10
MOV R1, #00
CJNE R2,#06,END02
END02: INC R2
DJNZ R4, D1
CJNE R4,#00,D1
MOV R4, #06
MOV R2, #00
JMP CONTD3
CONTD3: CJNE R5,#09,END03
END03: INC R5
DJNZ R6, D1
CJNE R6,#00,D1
CJNE R5,#09,ZERAR5
ZERAR5: MOV R5,#00
MOV R6,#10
JMP CONTD4
CONTD4: CJNE R7,#02,END04
END04: INC R7
DJNZ R0, D1
DISPLAY1:
MOV P1, #0FFH
MOV A, R1
MOVC A, @A+DPTR
MOV B, #0FEH
MOV P0, B
MOV P1, A
RET
DISPLAY2:
MOV P1, #0FFH
MOV A, R2
MOVC A, @A+DPTR
MOV B, #0FDH
MOV P0, B
MOV P1, A
RET
DISPLAY3:
MOV P1, #0FFH
MOV A, R5
MOVC A, @A+DPTR
MOV B, #0FBH
MOV P0, B
MOV P1, A
RET
DISPLAY4:
MOV P1, #0FFH
MOV A, R7
MOVC A, @A+DPTR
MOV B, #0F7H
MOV P0, B
MOV P1, A
RET
ATRASO: MOV B, #10
DJNZ B, $
RET
END