Departament de Microelectrònica i Sistemes Electrònics
AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)
Exemple d'ús de SBIC i SBIS
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 "m8def.inc"
.DEF srri = R1
.DEF dada = R16
.DEF estat = R17
.ORG 0x0
rjmp inici
.ORG 0x18
rjmp int_cmp1A
inici:
ldi YH, HIGH(RAMEND) ; inicialització stack
ldi YL, LOW(RAMEND)
out SPH, YH
out SPL, YL
ldi dada, (1<<WGM12)|(1<<CS12)
out TCCR1B, dada
ldi dada, high(6250)
out OCR1AH, dada
ldi dada, low(6250)
out OCR1AL, dada
ldi dada, (1<<OCIE1A)
out TIMSK, dada
ser dada
out DDRD, dada
ldi dada, 1
out PORTD, dada
sei
;-------PROGRAMA PRINCIPAL--------------------------------------------
main: nop
rjmp main
int_cmp1A:
in srri, SREG
out PORTD, dada
nop
sbic PIND, 0
ldi estat, 1
sbic PIND,7
ldi estat, 0
sbrc estat, 0
lsl dada
sbrs estat, 0
lsr dada
out SREG, srri
reti; LED CORRENT: Exemple amb SBIS/SBIC
; Un led encès corre amunt i avall
; Joan Oliver
; Universitat Autònoma de Barcelona
;
; Amb Timer1, mode CTC, es fa un retard de 0.1seg
; guarda de stack
; registra que guarda la dada que es treu per PORTD
; registre estat
; rutina d'inici del programa
; rutina int'timer1_compA
;-------INICI--------------------------------------------------------
; inicialització stack
;-------SETUP TIMER1-------------------------------------------------
; timer1 en mode CTC i prescaler=256 => 10Hz (ck0=16MHz)
; comparadorA a 6250 => 10Hz (ck0=16MHz)
; interrupció per comparació en A
;-------SETUP PORTS---------------------------------------------------
; PORTD com a sortida
; inicialització dada
; activació interrupcions
;-------PROGRAMA PRINCIPAL--------------------------------------------
;-------RUTINA INT'TIMER1_CMP_A---------------------------------------
; actualització sortida PORTD
; cicle s'espera per actualitzar PIND (obligat si es fa comparació de seguida!)
; si primer bit a 0 es salta instrucció següent ;si no, canvi de gir
; si darrer bit a 0 es salta instrucció següent ;si no, canvi de gir
; si estat /= 0 desplaçament esquerra de dada
; si estat /= 1 desplaçament dreta de dada