Forum: Mikrocontroller und Digitale Elektronik PIC - Register während Interrupt abfragen


von Klaus m. .. (magic-moe)


Lesenswert?

Hallo,
ich habe in Assembler einen Counter für einen Pic geschrieben. Es 
funktioniert auch alles wunderbar, die Zeit lässt sich mit 4 Tastern 
einstellen und wird auf 4 7-Segment Anzeigen visualisiert. Nun möchte 
ich, das das "runterlaufen" der Zeit nur stattfindet (im Moment immer), 
wenn ein zusätzlicher Taster gedrückt wurde. Dazu wollte ich ein Bit 
(Starten, 0) setzen und während des Interrupts abfragen:

     btfss Starten, 0
     goto Int_end
     Counter

Doch leider funktioniert das kein bisschen, egal was ich schon versucht 
habe, es scheint sich immer aufzuhängen, da die Ausgänge plötzlich 
völlig verrückt spielen.

Weis jemand woran das liegen könnte?
Danke im vorraus

Gruß Moritz

von holger (Gast)


Lesenswert?

>Weis jemand woran das liegen könnte?

An deinem Programm.

von Master S. (snowman)


Lesenswert?

was holger sagen will: wir können dir nicht helfen, wenn wir dein 
programm nicht sehen...

von Michael R. (mexman) Benutzerseite


Lesenswert?

Hallo Moritz,

> ich habe in Assembler einen Counter für einen Pic geschrieben. Es
> funktioniert auch alles wunderbar, die Zeit lässt sich mit 4 Tastern

Counter? Zeit?
Hast Du jetzt einen Counter oder einen Timer gebaut?\

Sieht nach Timer aus: Eine Zeit wird heruntergezaehlt und angezeigt, 
richtig?

>      btfss Starten, 0
>      goto Int_end
>      Counter

Das kann wirklich alles sein:
- Falsch/Doppeltdeklaration des Bytes "Starten"
- falsche Sprungadresse Int_end (ohne Wiederherstellung des Stacks)
- .......



Holger MUSS nicht recht haben....kann auch Deine Hardware sein ;-)
Aber ohne weitere INformation wuerde ich sagen, der Kondensator C14 
sollte nicht mit der Adresse der Interruptserviceroutine verbunden sein!


Gruss

Michael

von Klaus m. .. (magic-moe)


Angehängte Dateien:

Lesenswert?

So,
ich habe jetzt folgendes Problem: Der Counter zählt nach dem drücken der 
OK - Taste abwärts. Allerdings funktioniert es nur bei der 4 Ziffer. 
Sobald ich auch eine der 3 Ziffern vorher auf eine andere Zahl auser 0 
einstelle leuchten auf einmal die Dezimalpunkte, genauso auch wenn der 
Counter nach dem Runterzählen der Sekunden auf 0 kommt.

Wie kann das sein, ich habe den Ausgang der Dezimalpunkte nirgends 
definiert???
Und warum funktioniert es nur bei der 4 Ziffer???

Mfg
Moritz

von hempel (Gast)


Lesenswert?

Wenn es nur bei der 4 funktioniert klappt vielleicht nur die Abfrage 
nicht und überspringt alle anderen, du hast wenn ich das richtig sehe in 
deinem Interrupt die 4 als automatische Auswahl falls alle andern 
"false" sind definiert.

Ansonsten evtl. mal noch den Schaltplan anhängen, wenn man selbst schon 
paar Stunden grübelt ist einem das alles immer etwas mehr vor Augen als 
dem Rest hier im Forum, deswegen machen paar wenige Sätze meist nicht 
viel Sinn ;)

von Klaus m. .. (magic-moe)


Lesenswert?

Ich kanns kaum glauben, es geht auf einemal :-)
Kann es sein das es einen Unterscheid macht ober man

movlw  5            oder
movlw  d'5'         scheibt?

MFG
Moritz

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.