Programa 8.2
;
; Disp7SegCntAsm.asm
;
; Created: 06/10/2016 08:58:39
; Author : Manoel
;
;; Conectores ARDUINO UNO
;; 7 6 5 4 3 2 1 0
;; Segmentos do Display 7 Segmentos
;; a b c d e f g -
;; Pinos do PORTD
;; 7 6 5 4 3 2 1
;; Iniciliza Stack Pointer
LDI R16,HIGH(RAMEND) ; Obtem parte alta do último endereço da RAM
OUT SPH,R16 ; Carrega na parte alta de Stack Pointer
LDI R16,LOW(RAMEND) ; Obtem parte baixa do último endereço da RAM
OUT SPL,R16 ; Carrega na parte baixa de Stack Pointer
;; Programa PORTD para atuar como porta de Sa ída
LDI R16,0b11111111 ; Ajusta todos os bits em nível lógico 1
OUT DDRD,R16 ; Programa todos os bits de PORTD como saída
;; Programa Principal
INICIO:
LDI R16,0 ; Inicializa Contador
REPITA:
RCALL bin7Seg ; Converte contagem para 7 Segmentos
COM R17 ; Para display Anodo-comum: R17 <-- /R17
OUT PORTD,R17 ; Envie código de 7 Segmentos ao Display
RCALL D1000ms ; Temporize 1000 ms
INC R16 ; Avance a contagem
CPI R16,16 ; Compare a contagem com o valor dezesseis
BRNE REPITA ; Se R16 <> 16, Salte para REPITA
RJMP INICIO ; Caso contrário conte novamente
;;
;; Sub rotina para conversao de binário para 7 segmentos
;; obs.: Lógica Positiva ('1' acende ; '0' apaga)
;; bits 7 6 5 4 3 2 1 0
;; seg a b c d e f g -
;; O Registrador Z na realidade é o nome que se dá ao par de Registradores R30, R31
;; quando operam como um apontador (endere çador) ou ponteiro para a memória
;;
;; Entrada: R16 = numero binário de 0000 a 1111
;; Saída: R17 = código em 7 segmentos
;;
bin7Seg:
LDI ZH,HIGH(bint7SegTable << 1) ; Obtém parte alta do ender. da tabela
LDI ZL,LOW(bint7SegTable << 1) ; Obtém parte baixa do ender. da tabela
ANDI R16,0b00001111 ; Mascara (zera) o nibble alto
ADD ZL,R16 ; Soma índice à parte baixa do ender. da Tab.
CLR R0 ; R0 = 0
ADC ZH,R0 ; ZH = ZH + 0 + (C) . O Carry é da soma anterior
LPM R17,Z ; Le o código da Tab. e o armazena em R17
RET
.CSEG
bint7SegTable: .DB 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000,
0b00000100, 0b00000010, 0b11000000, 0b01100000, 0b00110000, 0b00011000,
0b00001100,0b00000010, 0b10100000, 0b01010000, 0b00101000