AVR Studio kann ohne zusätzliche Software eigentlich nur Assembler.
Dazu musst Du zuerst eine Interrupt Vektortabelle ganz am Anfang des Flash legen. Danach muß der Stack initialisiert werden.
Code:
.cseg
.org 0
;*** Interrupt vectors ***
rjmp reset ;Reset Handler
rjmp pwm ;INT0 Handler
reti ;Pin Change
rjmp TIM0_OFV0 ;Timer 0 Overflow Handler
reti ;EE_RDY
reti ;Analog Comperator
;*** Initialisation ***
reset:
; LDI temp,low(ramend) ;not possible at ATtiny 12, possible at AT90LS2323
; OUT SPL,temp
; LDI temp,high(ramend) ,nur bei Controllern mit höheren RAM Adressen als 0xFF!
; OUT SPH,temp
.....
.....
;*** Initial Timer 0 ***
LDI temp,0b00000001 ;Clock divider CK/1
OUT TCCR0,temp
LDI temp,0b00000010 ;CK Interrupt enable
OUT TIMSK,temp
.....
.....
;*** Interupts freigeben
SEI
Hier mal ein Beispiel für den ATtiny12.
Die eigentliche Interruptroutine wird dann beim eintreffen des Interrupts aufgerufen, sofern die entsprechenden zugehörigen Register richtig gesetzt und der globale Interrupt mit "SEI" freigegeben wurden.
Code:
;*** Timer 0 Overflow ***
TIM0_OFV0:
PUSH temp ;Alle benutzten Register retten - Geht bei Tiny 12 zwar etwas anders, aber nur mal als Beispiel!
IN temp,SREG
PUSH temp
PUSH temp1; usw.
Dein Code.....
POP temp1; Benutzte Register wieder vom Stack holen
POP temp
OUT SREG,temp
POP temp
RETI ; Ende der Interrupt Routine
Lesezeichen