Forum: Mikrocontroller und Digitale Elektronik Timer0


von zugvogel1 (Gast)


Lesenswert?

Hallo...

Bin anfänger und möchte gern immer bei Timer0 überlauf eine Led togglen
lassen. Komme aber einfach nicht weiter.
Danke schon mal im voraus

Isr:                                    ;InterruptServiceVector
    MOVWF   W_TEMP
    SWAPF   STATUS,W
    CLRF    STATUS
    MOVWF   STATUS_TEMP
    MOVF    PCLATH, W
    MOVWF   PCLATH_TEMP
    CLRF    PCLATH

    movlw   b'00000001'
    xorwf   PORTB,f         ; toggle PORTB

END_ISR                                 ;return to the main program
    bcf     INTCON, TMR0IF
    MOVF    PCLATH_TEMP, W
    MOVWF   PCLATH
    SWAPF   STATUS_TEMP,W
    MOVWF   STATUS
    SWAPF   W_TEMP,F
    SWAPF   W_TEMP,W
    retfie

von johnny.m (Gast)


Lesenswert?

Was für'n Assembler is das denn???? Jedenfalls kein AVR!!!

von crazy horse (Gast)


Lesenswert?

ne, das ist typisch PIC :-)
Ich verstehe nicht, wie man das verstehen kann :-)

von Wolfram (Gast)


Lesenswert?

@Zugvogel:
Bevor man losprogrammiert sollte man erstmal wissen was die Aufgabe
sein soll.
Led toggln lassen ist keine Aufgabe.
Auf welchem Mikrocontroller, Taktfrequenz des Mikrocontrollers,
Frequenz mit der getoggelt werden soll,an welchem Portpin hängt die Led
wären Fragen die man schon beantworten sollte.
Auch wenn ich nicht PIC Assembler kann, wenn das da oben dein gesamtes
Programm ist, solltest du nochmal ins Datenblatt schauen.
z.B. wie geht die Initialisierung des Timers. ISR Routinen...

von zugvogel1 (Gast)


Lesenswert?

hallo wolfram

ich wollte ja nur mal die abläufe um bei jedem Timer0 überlauf den
zustand der led ändert.
Als ist bei Timer0 im überlauf die led high dann soll sie beim nächsten
überlauf auf low gehen.

von sackgesicht (Gast)


Lesenswert?

Das Toggeln in deiner ISR müsste funktionieren. Ob das Sichern vom W und
STATUS hier nötig ist, wage ich zu bezweifeln, schadet aber nichts.

Aber: Ich würde sagen, dass das Blinken der LED nicht zu sehen ist.
Rechne doch mal die Blinkfrequenz aus.

von Wolfram (Gast)


Lesenswert?

Du hast leider keine Frage beantwortet
Also allgemein

Interrupttabelle
..
springe zu Timer0_overflowISR
..

Timer0_overflowISR:
sichere Register die ich in ISR benutze
toggle LEDPIN
stelle Registerzustand wieder her
interruptrücksprung
END_TIMER0_overflowISR

Hauptprogramm:
initialisiere Timer
starte Timer
endlosschleife
End Hauptprogramm

von zugvogel1 (Gast)


Lesenswert?

hallo wolfram

das andere ist schon soweit alles eingestellt und das ist auch nicht
meine frage.

ich dachte vieleicht so...
;*********************************
;Interrupt Service Vector Timer0 *
;*********************************
Isr:                                    ;InterruptServiceVector
    MOVWF   W_TEMP
    SWAPF   STATUS,W
    CLRF    STATUS
    MOVWF   STATUS_TEMP
    MOVF    PCLATH, W
    MOVWF   PCLATH_TEMP
    CLRF    PCLATH

START_ISR

    incf    count1, f                   ;count1+1
    movlw   .100                        ;lade 100 im W
    subwf   count1, w                   ;subtr w-count1
    btfss   STATUS, Z
    bsf     PortB, 1

    incf    count2, f                   ;count2+1
    movlw   .20                         ;lade 20 im W
    subwf   count2, w                   ;subtr w-count1
    btfss   STATUS, Z
    bcf     PortB, 1

END_ISR                                 ;return to the main program
    bcf     INTCON, TMR0IF
    MOVF    PCLATH_TEMP, W
    MOVWF   PCLATH
    SWAPF   STATUS_TEMP,W
    MOVWF   STATUS
    SWAPF   W_TEMP,F
    SWAPF   W_TEMP,W
    retfie

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
Noch kein Account? Hier anmelden.