Você está na página 1de 5

;

; AssemblerApplication9.asm
;
; Created: 04/04/2023 11:07:00
; Author : Paulo Vinicius Mendes Mota
;

; Replace with your application code


; r30 -> controla a multiplexação
; r24 -> primeiro digito | r30, 1
; r25 -> segundo digito | r30, 2
; r26 -> terceiro digito | r30, 3
; r27 -> quarto digito | r30, 4
; r28 -> quinto digito | r30, 5
; r29 -> sexto digito | r30, 6
; PORTD -> Segmentos
; PORTC -> Seleciona o display
; controle de estouro segmento

.org 0x00
rjmp start
.org 0x1C ; endereço de interrupção TC0 modo compare A
rjmp interrup

start:
sei
cp r2, r3 ;Para chamar a configuração uma vez
breq configs
call mostrarPrimeiroPar
call mostrarSegundoPar
call mostrarTerceiroPar
rjmp start

configs:
inc r2
ldi r19, 10 ; usado na comparação para virar o numero do display
ldi r16, 0
mov r15, r16; usado para contar as interrupções
ldi r16, 5
mov r14, r16 ; usado para comprar a quantidade de interrupções
call zerarTudo
ldi r16, 156 ; ajusta o tempo
out ocr0a, r16
ldi r16, 2
out tccr0a, r16
ldi r16, 0b00000101 ;seta prescaler
out tccr0b,r16
; resultado é um interrupção a cada 0,020096 segundo.
ldi r16,2 ; configura interrupção para o modo compara OCR0A
sts timsk0,r16
rjmp start
interrup:
inc r15
cp r15, r14 ;sperar um registrar estourar 5 vezes, para então chamar o
increments
brge incrementos
reti

incrementos:
ldi r16, 0
mov r15, r16
cpse r29, r19
inc r29
call checkR29
ret

checkR29:
cp r29, r19
brge clearR29
ret

clearR29:
ldi r29, 0
call incR28
ret

incR28:
cpse r28, r19
inc r28
call checkR28
ret

checkR28:
cp r28, r19
brge clearR28
ret

clearR28:
ldi r28, 0
call incR27
ret

incR27:
cpse r27, r19
inc r27
call checkR27
ret

checkR27:
cp r27, r19
brge clearR27
ret
clearR27:
ldi r27, 0
call incR26
ret

incR26:
cpse r26, r19
inc r26
call checkR26
ret

checkR26:
cp r26, r19
brge clearR26
ret

clearR26:
ldi r26, 0
call incR25
ret

incR25:
cpse r25, r19
inc r25
call checkR25
ret

checkR25:
cp r25, r19
brge clearR25
ret

clearR25:
ldi r25, 0
call incR24
ret

incR24:
cpse r24, r19
inc r24
call checkR24
ret

checkR24:
cp r24, r19
brge clearR24
ret
clearR24:
ldi r24, 0
call zerarTudo
ret

zerarTudo:
ldi r24, 0
ldi r25, 0
ldi r26, 0
ldi r27, 0
ldi r28, 0
ldi r29, 0
ret

mostrarPrimeiroPar:
call delay338us
ldi r30, 0b00000001
out PORTC,r30
out PORTD, r24
call delay338us
ldi r30, 0b00000010
out PORTC,r30
out PORTD, r25
ret

mostrarSegundoPar:
call delay338us
ldi r30, 0b00000100
out PORTC,r30
out PORTD, r26
call delay338us
ldi r30, 0b00001000
out PORTC,r30
out PORTD, r27
ret

mostrarTerceiroPar:
call delay338us
ldi r30, 0b00010000
out PORTC,r30
out PORTD, r28
call delay338us
ldi r30, 0b00100000
out PORTC,r30
out PORTD, r29
ret

delay338us:
ldi r21, 2
call delay
ret

delay:
ldi r22,1
ldi r20,8
subi r21,1 ;
brne delayDecre
ldi r22,0
ldi r20,0
ldi r21,0
ret

delayDecre:
subi r22,1
brne delayDecre
subi r20,1
brne delayDecre
rjmp delay

Você também pode gostar