Interrupt funktioniert nicht PIC16 und Timer in Assembler

Gast #1811370
Lesenswert?

Hallo Leute, ich bräuchte etwas hilfe...

Könnte vielleicht jemand mal drüberschauen und mir sagen, wo der fehler 
ist?
Was soll es machen:
Timer hochzählen und beim overflow meinen interruot ausführen.
Vielleicht habe ich etwas übersehen oder vergessen oder einfach nur 
falsch verstanden...

in der initialisierung:

BSF     STATUS, RP0 ; Bank 1 anwählen
    MOVLW   B'00000110'  ; A/D Converter  aus
     MOVWF   ADCON1
    BSF    PIE1,TMR1IE  ; timer 1 interrupt enable

    BCF       STATUS, RP0    ; Bank 0 anwählen
    ;========= INTCON GIE,PIE enable========
    MOVLW  B'1100000'
    MOVWF  INTCON
       movlw   B'00110001' ; prescaler 1 zu 8, timer enable
    movwf  T1CON

und der interrupt selber:

  BCF  INTCON,7
  BCF  PIR1,TMR1IF
  MOVWF   W_TEMP
        SWAPF   STATUS,W
        CLRF    STATUS
        MOVWF   STATUS_TEMP
        MOVF    PCLATH, W
        MOVWF   PCLATH_TEMP
        CLRF    PCLATH

  INCF  timercounter
  MOVFW  timercounter
  XORLW  D'16'
  SKPZ
  b  intende
  CLRF  PORTB
  CLRF  timercounter

intende MOVF    PCLATH_TEMP, W
    MOVWF   PCLATH
    SWAPF   STATUS_TEMP,W
    MOVWF   STATUS
    SWAPF   W_TEMP,F
    SWAPF   W_TEMP,W
    BSF  INTCON,7
    RETFIE

ich wäre sehr dankbar, wenn mir jemand helfen könnte...

Mit freundlichen Grüßen
euer rhamirez
#1811638
Lesenswert?

Sorry, der Oszillator hat damit nichts zu tun.

Aber du zählst im Interrupt eine Variable "timercounter" hoch und sobald 
diese 16 erreicht, setzt du die Variable und PortB auf 0. Wie willst du 
merken ob das Programm funktioniert?

Und woher kommt die Instruktion SKPZ? Ich kann mir schon denken, was sie 
macht, aber wo hast du sie deklariert?
Gast #1811645
Lesenswert?

soo sebi, habe ich gemacht, hatt immer noch nicht funktioniert...


nach langem probieren, habe ich den timer manuell durchlaufen lassen....
er springt in den interrupt... läuft durch.. und läuft in den break 
point und läuft weiter Oo... frecher hund der....

irgendwann wurde es mir zu bund habe in jeder zeile einen gesetzt 
durchlaufen lassen und schwupps hängt er im ersten fest hängt im 
zweiten.. hängt in allen...

scheint ein bug zu sein wenn ich jetz wieder alle entfernt und meinen 
ursprünglichen gelassen... jetz läuft er da auch rein..

Es handelt sich um die Version MPLAB IDE 8.53
Gast #1811648
Lesenswert?

den befehl habe ich von der sprut seite..

den kennt MPLAB

SKPZ    SKIP wenn Z-Flag gesetzt ist
Syntax:   SKPZ
echter Code   BTFSS    STATUS, Z
Bedeutung:   Überspringe den folgenden Befehl, falls das Zero-Flag 
gesetzt ist.
Beispiel:   SKPZ        ; teste das Z-Flag
CLRW        ; dieser Befehl wird nicht ausgeführt falls Z=1
Gast #1812044
Lesenswert?

So ein einfacher Timer-Interrupt kann doch wohl kein ernsthaftes Problem 
machen. Ich benutzte kürzlich ein uraltes PICkit1, wobei ich mir das 
neueste MPLAB aus dem Netz zog. Den Code für einen 
Timer-Interrupt-gesteuerten Multiplexer sowohl für Assembler als auch 
für C schrieb ich selbst anhand von Beispielen. Da gibt es doch 
reichlich Demos, auch von der Microchip Homepage.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren