Departament de Microelectrònica i Sistemes Electrònics
AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)
exemple d'ús de taules amb la SRAM
El programa llegeix un conjunt de dades d'una taula emmagatzemada en la SRAM i les volca pel pord de sortida PORTD
Funcionalment, i connectant un conjunt de leds al port, es mostra una seqüència d'encesa/apagada dels leds.
.INCLUDE "m128def.inc"
.DEF srri = R10 ; registre temporal
.DEF temp = R16 ; registre temporal
.ORG 0x0
rjmp inici
.ORG 0x18
rjmp int_cmp1A
inici:
ldi YH, HIGH(RAMEND)
ldi YL, LOW(RAMEND)
out SPH, YH
out SPL, YL
ser temp
out DDRD, temp
ldi temp, (1<<WGM12)|(1<<CS12)
out TCCR1B, temp
ldi temp, high(6250)
out OCR1AH, temp
ldi temp, low(6250)
out OCR1AL, temp
ldi temp, (1<<OCIE1A)
out TIMSK, temp
sei
main:
ldi zh, high(2*taula)
ldi zl, low(2*taula)
ldi temp, 0
loop:cpi temp, 30
brne loop
rjmp main
int_cmp1A:
in srri, SREG
lpm R0, Z+
out PORTD, R0
inc temp
out SREG, srri
reti
taula:
.DB 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01
.DB 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFE
.DB 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0xC0, 0xE0
.DB 0xF0, 0xF8, 0xFC, 0xFE; GENERACIÓ DE LLUMETS EN LEDS
; Joan Oliver
; Universitat Autònoma de Barcelona
;
; Retard d'1Hz.
; Treballant amb Timer1, mode CTC
; Sortida per OC1A (PORTB.5)
rutina d'inici del programa
; rutina int'timer1_compA
;-------INICI--------------------------------------------------------
; inicialització stack
; PORTD com a sortida
;-------SETUP TIMER1-------------------------------------------------
; mode CTC i prescaler=256 => 10Hz (ck0=16MHz)
; comparació a 12500
; activació interrupció per comparació en registre A
;-------PROGRAMA PRINCIPAL--------------------------------------------
; inicialització apuntador Z
;-------INT'TIMER1_CMP_A----------------------------------------------
; càrrega a R0 del valor de la taula apuntat per Z i increment de Z
; mostrar valor R= en sortida
;-------TAULA---------------------------------------------------------