LotharK
23.02.2007, 18:06
Hallo,
ich versuche vergeblich den Timer-Interrupt des ATtiny2313 zu aktivieren.
Hier der NICHT FUNKTIONIERENDE Code.
Ich beschäftige mich erst sehr kurze Zeit mit Assembler. Die Daten der Interrupts habe ich aus dem Datenblatt.
Irgendwo beim Aktivieren des Interrupts steckt ein Fehler - nur wo?
.NOLIST
.INCLUDE "tn2313def.inc"
.LIST
;
; Definition der Register
;
.DEF mp=R16
.DEF ri = R1
; Beginn des Codes, Init I/O-Ports
rjmp main ; Springe zum Anfang
; Die Interrupt-Vektoren zu je 1 Byte:
reti ; Int0-Interrupt
reti ; Int1-Interrupt
reti ; TC1-Capture
reti ; TC1-Compare A
reti ; TC1-Overvlow
rjmp tc0i; TC0-Overvlow
reti ; UART0 RX
reti ; UART0 UDRE
reti ; UART Tx
reti ; Analog COMP
reti ; PCINT
reti ; Timer/Counter1 Compare Match B
reti ; Timer/Counter0 Compare Match A
reti ; Timer/Counter0 Compare Match B
reti ; USI Start
reti ; USI Overflow
reti ; EEReady
reti ; WDT Overflow
; Interrupt-Service-Routine für den Zähler
tc0i:
in ri,SREG ; Rette den Inhalt des Flag-Registers
LDI mp, 0x0F
OUT PortB, mp ; Hintere LEDs zur Kontrolle einschalten
out SREG,ri ; Stelle Flag-Register wieder her
reti ; Kehre vom Interrupt zurück
; Hauptprogramm beginnt hier
main:
ldi mp,LOW(RAMEND) ;Initiate Stackpointer
out SPL,mp ; wegen Interrupts und Unterprogr.
; Vorteiler des Zählers = 256, 4 MHz/256 = 15625 Hz = $3D09
ldi mp,0x04 ;Initiate Timer/Counter 0 Vorteiler
out TCCR0,mp ; an Timer 0 Control Register
LDI mp,0x0C ; PORTD 2 und 3 als Ausgang (INT0 und INT1)
out DDRD,mp ; in Datenrichtungsregister
; Interrupts bei Timer 0 einschalten
ldi mp,2; Bit 1 setzen
out TIMSK,mp ; in Timer Interupt Mask Register
LDI mp, 0x00
OUT PortB, mp
; Alle Interrupts allgemein freigeben
sei ; Gib Interrupts im Status-Register frei
loop:
NOP ; tue nichts
rjmp loop
ich versuche vergeblich den Timer-Interrupt des ATtiny2313 zu aktivieren.
Hier der NICHT FUNKTIONIERENDE Code.
Ich beschäftige mich erst sehr kurze Zeit mit Assembler. Die Daten der Interrupts habe ich aus dem Datenblatt.
Irgendwo beim Aktivieren des Interrupts steckt ein Fehler - nur wo?
.NOLIST
.INCLUDE "tn2313def.inc"
.LIST
;
; Definition der Register
;
.DEF mp=R16
.DEF ri = R1
; Beginn des Codes, Init I/O-Ports
rjmp main ; Springe zum Anfang
; Die Interrupt-Vektoren zu je 1 Byte:
reti ; Int0-Interrupt
reti ; Int1-Interrupt
reti ; TC1-Capture
reti ; TC1-Compare A
reti ; TC1-Overvlow
rjmp tc0i; TC0-Overvlow
reti ; UART0 RX
reti ; UART0 UDRE
reti ; UART Tx
reti ; Analog COMP
reti ; PCINT
reti ; Timer/Counter1 Compare Match B
reti ; Timer/Counter0 Compare Match A
reti ; Timer/Counter0 Compare Match B
reti ; USI Start
reti ; USI Overflow
reti ; EEReady
reti ; WDT Overflow
; Interrupt-Service-Routine für den Zähler
tc0i:
in ri,SREG ; Rette den Inhalt des Flag-Registers
LDI mp, 0x0F
OUT PortB, mp ; Hintere LEDs zur Kontrolle einschalten
out SREG,ri ; Stelle Flag-Register wieder her
reti ; Kehre vom Interrupt zurück
; Hauptprogramm beginnt hier
main:
ldi mp,LOW(RAMEND) ;Initiate Stackpointer
out SPL,mp ; wegen Interrupts und Unterprogr.
; Vorteiler des Zählers = 256, 4 MHz/256 = 15625 Hz = $3D09
ldi mp,0x04 ;Initiate Timer/Counter 0 Vorteiler
out TCCR0,mp ; an Timer 0 Control Register
LDI mp,0x0C ; PORTD 2 und 3 als Ausgang (INT0 und INT1)
out DDRD,mp ; in Datenrichtungsregister
; Interrupts bei Timer 0 einschalten
ldi mp,2; Bit 1 setzen
out TIMSK,mp ; in Timer Interupt Mask Register
LDI mp, 0x00
OUT PortB, mp
; Alle Interrupts allgemein freigeben
sei ; Gib Interrupts im Status-Register frei
loop:
NOP ; tue nichts
rjmp loop