Forum: Mikrocontroller und Digitale Elektronik PIC 16F870 Porgrammzählerreset MikroC


von Andreas (Gast)


Lesenswert?

Hallo,

ich veruche gerade einen Softwarereset in dem PIC zu ermöglichen. Dabei 
will ich den Programmcounter auf die Adresse 0x0000 bringen, sozusagen 
der Startvektor.

Nur das Mikroc mag die direktive
1
 asm (Reset EQU 0x0000)
 gar nicht.

Wie könnte ich sonst noch den Programmzähler auf Null setzen???



Vielen Dank für eure Hilfe!



mit freundlichen Grüßen

Andreas

von Grrrr (Gast)


Lesenswert?

Andreas schrieb:
> Nur das Mikroc mag die direktive
1
asm (Reset EQU 0x0000)

Was heisst der Compiler "mag das nicht"? Das ist nicht wirklich 
aussagekräftig, geht man davon aus, das Compiler keinerlei Gefühlsleben 
oder überhaupt irgendwelche Bedürfnisse haben. Irgendwelche 
anthropozentrischen Unterstellungen helfen Dir hier nicht und uns auch 
nicht, Dein Problem zu verstehen.

Es ist die Frage was das eigentlich bewirken soll.
An sich (ich verwende keinen PIC, aber das sollte hier keine Rolle 
spielen), gibt das nur den Effekt das mit dem Namen "Reset" der Wert 0 
verbunden wird. Ich gehe fast sicher davon aus, das der Name im Code 
nirgendwo als Sprungziel verwendet wird (oder ein indirekter call/jmp 
darauf ausgeführt wird). Das würde also garnicht helfen, sondern nur 
Platz verbrauchen.

> ich veruche gerade einen Softwarereset in dem PIC zu ermöglichen.

Solche Versuche sind (bei Anfängern, und ich vermute Du bist einer) fast 
immer Designfehler. Schreib' doch mal bitte warum Du das überhaupt 
willst.
Was erreichst Du dadurch, das Du so einen Softreset einbaust?

Um aber direkt auf Deine Frage zu antworten, wird sowas
1
asm (JMP 0x0000)
an entsprechender Stelle im Code eher tun, was Du Dir vorstellst. Ob das 
in der jeweiligen Situation überhaupt passt, ist eine andere Frage.

von Lehrmann M. (ubimbo)


Lesenswert?

Hallo,

also ich mache den Sotfwarereset bei PIC16F immer folgendermaßen: WDT an 
(wenn nicht sowieso verwendet) und dann halt nicht rücksetzen.

Allerdings muss ich auch sagen, dass mir in C nichts bekannt ist um zu 
org0 zurückzukommen.

Es gibt aber von Mikroe auch ein Forum da wird man gut geholfen.

von holger (Gast)


Lesenswert?

>Allerdings muss ich auch sagen, dass mir in C nichts bekannt ist um zu
>org0 zurückzukommen.

goto 0?

von Andreas (Gast)


Lesenswert?

Also um auf das Gefühlsleben meines Compilers mal einzugehen. Der 
liefert die Meldung "Specifier needed" zurück.


Und nun zu der Motivation, es geht hier um die Steuerung einer 
Pendelautomatik wobei 2 mehrgleisige Bahnhöfe über eine Strecke 
verbunden sind. Im normalfall wartet die Steuerung solang bis der 
Gleisbesetztmelder (GBM) im Zielbahnhof meldet das er dort ist. Sollte 
der Zug aber währende der Fahrt von der Strecke genommen werden werden 
wartet die Stuerung ewig auf die Meldung des GBM. Und da kommt der Reset 
ins spiel. Ich gebe ein Zeitfenster vor und danach wird der Reset 
ausgelöst und die Schaltung beginnt die Belegung auf den Gleisen neu 
einzulesen. Diese Lösung fand ich praktikabler als das Programm 
weiterlaufen zulassen.


Vielen Dank für die Hilfe!


mfg

andreas

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.