Hallo,
bin neu im PIC-Geschäft.
Habe da ein Problem mit dem Interrupt:
Timer1 zählt von 0x8000 bis Ende und sollte dann
einen Interrupt auslösen. Timer1 zählt auch (soviel
ich feststellen konnte), aber er löst keinen Interrupt aus.
list p=16f628 ;der Prozessortyp wird festgelegt
[...]
org 0x00 ; Startadresse nach Reset ist 0 hier startet der PIC
goto main ; Sprung zum Hauptprogramm
org 0x04 ; Interruptvector ist 0x04,
; Interruptbehandlungsroutine
; Daten retten
;Hier die Routine
bcf T1CON, TMR1ON ; Zähler stoppen
bcf PIR1, TMR1IF ; Timer1 Interrupt-Flag löschen
; Timer1 an Port B legen
movfw TMR1H ; High-Byte Timer 1 lesen
movwf PORTB ; auf Port B schreiben
; Timer init
; Timer mit &0800 initalisieren
movlw 0x80 ; 0x80 in MSB
movwf TMR1H
movlw 0x00 ; 0x00 in LSB
movwf TMR1L
bsf T1CON,TMR1ON ; Timer1 starten
[...]
retfie
;Interupt ENDE
main
[...]
; Timer1 initialisieren
; Timer1-Interrupt einstellen
bcf T1CON, TMR1ON ; Zähler stoppen
movlw B'00110100' ; internen Takt zählen, Vorteiler zum Timer1=8:1, kein Synchronisator
movwf T1CON
; Timer mit &0800 initalisieren
movlw 0x80 ; 0x80 in MSB
movwf TMR1H
movlw 0x00 ; 0x00 in LSB
movwf TMR1L
bsf T1CON, T1CKPS0 ; Teiler setzen
bsf T1CON, T1CKPS1 ; Teiler setzen
; Interrupt Initialisieren
bsf STATUS, RP0 ; auf Bank 1 umschalten
bsf PIE1, TMR1IE ; Timer1 interrupt erlauben
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
; Timer Start
bcf PIR1, TMR1IF ; Timer1 Interrupt-Flag löschen
bsf INTCON, GIE ; Interrupt erlauben
bsf T1CON,TMR1ON ; Timer1 starten
; Tastenabrage
Loop goto Loop
end ;das Ende des Programms
(Code etwas abgespeckt!)
Was könnte ich da falsch machen?