Escolar Documentos
Profissional Documentos
Cultura Documentos
; AssemblerApplication9.asm
;
; Created: 04/04/2023 11:07:00
; Author : Paulo Vinicius Mendes Mota
;
.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