AVR ASM - přerušení
Moderátor: Moderátoři
AVR ASM - přerušení
Kód: Vybrat vše
.CSEG
.org 0 RJMP MCUINIT
.org 0x04 RJMP TIM2OVF
TIM2OVF:
; kod preruseni, terba pricti vterinu
RETI
MCUINIT:
; startovaci kod
;Timer2
ldi a,0x08
out ASSR,a
ldi a,0b00000101 ;FOC2 WGM20 COM21 atd...
out tccr2,a
MAIN:
; cyklicky program
RJMP MAINNa jeho konci jsou jména a adresy přerušení..
Použití je následující:equ INT0addr=$002 ; External Interrupt0 Vector Address
.equ INT1addr=$004 ; External Interrupt1 Vector Address
.equ INT2addr=$006 ; External Interrupt2 Vector Address
.equ OC2addr =$008 ; Output Compare2 Interrupt Vector Address
.equ OVF2addr=$00a ; Overflow2 Interrupt Vector Address
... atd
Kód: Vybrat vše
.include "m32def.inc"
; osc 8 MHz
.CSEG
.org 0
rjmp start
.org INT1addr // INT1 , adresa $04
jmp extint1_isr // pojmenuj libovolně
.org OVF2addr // přetečení timer2 , adresa $06
jmp timer1_ovf_isr
;--------------------------------
start:
; ...
main:
; ... // kód
; ...
jmp main
;--------------------------------
timer1_ovf_isr: // obsluha přerušení
push r1
in r1,SREG // schovej SREG
push r20 // ulož použité registry
push r21
ldi r20, 10 // kód
ldi r21, 20
; ...
; ...
pop r21 // obnov registry a SREG
pop r20
out SREG, r1
pop r1
reti // návrat z přerušení
;--------------------------------
extint1_isr: // obsluha přerušení
; ...
; ...
reti
Kdyby něco nebylo jasné, tak se zeptej.