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
Was sagt denn der Simulator im MPLAB? Da kannst du das ganze Ding doch mal durchsteppen und die betreffenden Register beobachten...
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
Es wäre noch schön zu wissen welchen von den hundert PIC16F du nun verwendest... Dann könnte man dir helfen ...
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?
einen fehler erkannt intcon b'11000000' aber läuft immer noch nicht
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?
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
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
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...
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.
Es ging auch mehr um ein Problem beim Simulieren in MPLab
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.