16F628: Timer1 und Interrupt
Montag, 21. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  Timer (Assembler)  |  16F628: Timer1 und Interrupt « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: 16F628: Timer1 und Interrupt  (Gelesen 5043 mal)
 
DragonBurn007
Gast
« am: Januar 19, 2006, 09:43:37 »

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.

Code:

    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?
Gespeichert
Steffen
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 1235


Profil anzeigen
« Antworten #1 am: Januar 19, 2006, 10:22:48 »

Der Timer1-Interrupt ist ein Peripherial-Interrupt. INTCON.PEIE muss also auch gesezt sein, damit er abgearbeitet wird.

MfG
Gespeichert
DragonBurn007
Gast
« Antworten #2 am: Januar 19, 2006, 10:33:33 »

Cool!

Das wusste ich nicht.
Das ist es dann wahrscheinlich!

Danke!!!
Gespeichert
kalledom
Full Member
***
Offline Offline

Beiträge: 103


Profil anzeigen WWW
« Antworten #3 am: Januar 19, 2006, 12:42:11 »

In der InterruptServiceRoutine wird das Status- und W-Register nicht gerettet.
Beispiele zum Retten und Restaurieren von Registern findest Du unter http://www.domnick-elektronik.de/picasm.htm.
Gespeichert

MfG Karl-Heinz
Bernie6666
Newbie
*
Offline Offline

Beiträge: 12


Profil anzeigen
« Antworten #4 am: Januar 20, 2006, 09:25:04 »

Hallo Steffen,


Zitat von: Steffen
Der Timer1-Interrupt ist ein Peripherial-Interrupt. INTCON.PEIE muss also auch gesezt sein, damit er abgearbeitet wird.

MfG

Das war's.
Danke noch mal!

Leider habe ich meinen PIC gestern noch zerschossen.  :-(
(nur durch ausschalten der Betriebsspannung - direkt am Netzteil)

Seitdem sind alle Ausgänge auf High und wenn ich ein
Low an PA0 oder PA1 lege, dann gehen ALLE gleichzeitig auf LOW.
Merkwürdig!?

Programmieren lässt er sich nicht mehr.
Erase und Blank-Check lässt er aber noch zu.
Noch merkwürdiger!?

Was das wohl ist.
Gespeichert
Bernie6666
Newbie
*
Offline Offline

Beiträge: 12


Profil anzeigen
« Antworten #5 am: Januar 20, 2006, 09:27:15 »

Hallo Kalledom,

Zitat von: kalledom
In der InterruptServiceRoutine wird das Status- und W-Register nicht gerettet.


Das weiß ich und habe ich auch gemacht.

Trotzdem danke für den Hinweis.
Gespeichert
Steffen
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 1235


Profil anzeigen
« Antworten #6 am: Januar 20, 2006, 09:40:05 »

Zitat
Leider habe ich meinen PIC gestern noch zerschossen.  
(nur durch ausschalten der Betriebsspannung - direkt am Netzteil)


So etwas sollte eigentlich nicht passieren. Die 16F628 sind eigentlich recht robust. Bis jetzt habe ich noch keinen kaputt bekommen (mal abgesehen von falsch angeschlossen).
Gespeichert
Bernie6666
Newbie
*
Offline Offline

Beiträge: 12


Profil anzeigen
« Antworten #7 am: Januar 20, 2006, 13:27:21 »

Zitat von: Steffen
So etwas sollte eigentlich nicht passieren. Die 16F628 sind eigentlich recht robust.


Evtl. hat es auch was mit dem LVP-Mode zu tun.
Werde mal sehen ob mein Brenner da was kaputt gemacht hat.
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.036 Sekunden mit 18 Zugriffen.
 
Top! Top!