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


WcN - AVR i Fonaments de computadors -> Bit corrent en leds