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.
Hier mal ein Beispiel für den ATtiny12.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
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







Zitieren

Lesezeichen