mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt funktioniert nicht PIC16 und Timer in Assembler


Autor: rhamirez (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sagt denn der Simulator im MPLAB? Da kannst du das ganze Ding doch 
mal durchsteppen und die betreffenden Register beobachten...

Autor: rhamirez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den timer zählt er hoch (also muss der ja richtig initialisiert 
sein,oder?)
aber der springt nie in meinen breakpoint im interrupt, overflow flag 
usw macht er nicht

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wäre noch schön zu wissen welchen von den hundert PIC16F du nun 
verwendest... Dann könnte man dir helfen ...

Autor: rhamirez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay tut mir leid.. es ist ein pic 16f872, laut data sheet muss ich doch 
nur pie1<0> in bank 1 und im intcon gie oder noch mehr? habe ich 
vielleicht etwas vergessen?

Autor: rhamirez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einen fehler erkannt intcon b'11000000'

aber läuft immer noch nicht

Autor: Sebastian Hepp (sebihepp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setze mal das Bit T1OSCEN in T1CON.

Autor: Sebastian Hepp (sebihepp)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: rhamirez (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: rhamirez (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Hepp (sebihepp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir schon gedacht, dass der Befehl dazu da ist. ;)
Mir ist er neu, aber schön was neues gelernt zu haben. =)

Gut, dann ist es wohl ein Bug in MPLab. Wobei ich den Simulator nicht 
(gern) benutze...

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian Hepp (sebihepp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ging auch mehr um ein Problem beim Simulieren in MPLab

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.