# Fazer relógio em Assembly sem usar interrupções usando o 8051

**URL:** <https://forum.fazedores.com/t/fazer-relogio-em-assembly-sem-usar-interrupcoes-usando-o-8051/8228>\
**Category:** Microcontroladores\
**Created:** [Maio 30, 2021, 8:03pm UTC](https://forum.fazedores.com/t/fazer-relogio-em-assembly-sem-usar-interrupcoes-usando-o-8051/8228 "2021-05-30T20:03:02Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ewerton](https://avatars.discourse-cdn.com/v4/letter/e/e68b1a/32.png) [@Ewerton](https://forum.fazedores.com/u/Ewerton)\
**Post date:** [Maio 30, 2021, 8:03pm UTC](https://forum.fazedores.com/t/fazer-relogio-em-assembly-sem-usar-interrupcoes-usando-o-8051/8228/1 "2021-05-30T20:03:02Z")

</div>

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
```
