Escolar Documentos
Profissional Documentos
Cultura Documentos
Begin:
rcall initUART ;Iniciar a Uart
rcall IniciarPortB ;Iniciar a portaB
Loop:
rcall uartRxOk ; Verifica se a Uart pode enviar os dados
rcall DadoUartAT ; Envia os dados da Uart para o Atmega
ldi r20, 0x3F ; Adciona no R20 o valor 0x3F, que corresponde ao valor de
"-" no display
rcall CompValor ; Chama a função para comparar o valor que entrou da UART
rcall Mostra ; mostra no display o dado esperado
rcall uartTxOk ; Verifica se todos os dados foram enviados
rcall DadoATuart ; Envia o dado do Atmega para a Uart
rjmp loop ; Retorna para a função Loop
initUART:
ldi r16,(1<<RXEN0)|(1<<TXEN0) ; Habilita a transmissão da porta Uart
sts UCSR0B,r16 ; Habilita o receptor
IniciarPortB:
ldi AUX, 0x7F ;carrega AUX com o valor 0xFE
out ddrb, AUX ;configura PORTB, PB0 entrada e PB1 .. PB7 saídas
out PORTB, AUX ;Desliga os segmentos do Display
ret
/*
Realiza alguns processos
1- Compara os dois valores: Do registrador 18 e valor exadecimal (r18 - K)
2 - Se r18 - k = 0, Z = 1, então a subrotina abaixo é chamada
3 - Se r18 - k != 0, z = 0, então a sobrotina não é chamada e continua o
desenvolvimento do código
*/
CompValor: ; Sub rotina criada para comparar os valores
CPI r18, 0x30 ; Realiza a subtração do R18 - 0x30
breq If0 ; Se Z = 1, chama a sub rotina If0
ret
If0: ; Se o valor inserido na Uart for 0
ldi r20,0x40 ; Guarda em R20 o 0x40
ret ; retorna pra função que foi chamada
If1: ; Se o valor inserido na Uart for 1
ldi r20,0x79 ; Guarda em R20 o 0x79
ret ; retorna pra função que foi chamada
If2: ; Se o valor inserido na Uart for 2
ldi r20,0x24 ; Guarda em R20 o 0x24
ret ; retorna pra função que foi chamada
If3: ; Se o valor inserido na Uart for 3
ldi r20,0x30 ; Guarda em R20 o 0x30
ret ; retorna pra função que foi chamada
If4: ; Se o valor inserido na Uart for 4
ldi r20,0x19 ; Guarda em R20 o 0x19
ret ; retorna pra função que foi chamada
If5: ; Se o valor inserido na Uart for 5
ldi r20,0x12 ; Guarda em R20 o 0x12
ret ; retorna pra função que foi chamada
If6: ; Se o valor inserido na Uart for 6
ldi r20,0x02 ; Guarda em R20 o 0x02
ret ; retorna pra função que foi chamada
If7: ; Se o valor inserido na Uart for 7
ldi r20,0x78 ; Guarda em R20 o 0x78
ret ; retorna pra função que foi chamada
If8: ; Se o valor inserido na Uart for 8
ldi r20,0x00 ; Guarda em R20 o 0x00
ret ; retorna pra função que foi chamada
If9: ; Se o valor inserido na Uart for 9
ldi r20,0x18 ; Guarda em R20 o 0x18
ret ; retorna pra função que foi chamada
IfA: ; Se o valor inserido na Uart for A
ldi r20,0x08 ; Guarda em R20 o 0x08
ret ; retorna pra função que foi chamada
IfB: ; Se o valor inserido na Uart for B
ldi r20,0x03 ; Guarda em R20 o 0x03
ret ; retorna pra função que foi chamada
IfC: ; Se o valor inserido na Uart for C
ldi r20,0x46 ; Guarda em R20 o 0x46
ret ; retorna pra função que foi chamada
IfD: ; Se o valor inserido na Uart for D
ldi r20,0x21 ; Guarda em R20 o 0x21
ret ; retorna pra função que foi chamada
IfE: ; Se o valor inserido na Uart for E
ldi r20,0x06 ; Guarda em R20 o 0x06
ret ; retorna pra função que foi chamada
IfF: ; Se o valor inserido na Uart for F
ldi r20,0x0E ; Guarda em R20 o 0x0E
ret ; retorna pra função que foi chamada
Mostra: ; Sub rotinha para mostrar o valor no display
OUT DISPLAY, r20 ; saí para o display o valor de R20
ret