PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt Prioritäten (PIC16F876A)



Lord_of_Valmore
22.02.2005, 09:50
Hi!

Ich arbeite an einem Projekt, bei dem ein PIC16F876A über eine RS232-Schnittstelle mit einer Platine verbunden ist. Die Platine versendet Daten mit einem eigens entwickelten Protokoll über die Schnittstelle.

Was ich wissen will ist, ob man beim PIC16F876A irgendwie einstellen kann, dass beispielsweise der serielle Interrupt den timer-interrupt unterbricht. Mit welchem Befehl (in C) legt man die Interrupt-Prioritäten fest?
#priority funktioniert nicht, da dieser Befehl nur festlegt, welcher Interrupt ausgeführt wird, wenn zwei interrupts gleichzeitig ausgelöst werden.

Lord_of_Valmore
22.02.2005, 09:55
In der Hilfe meines Compilers steht übrigens:

Syntax:
#priority ints

Elements:
ints is a list of one or more interrupts separated by commas.

Purpose:
The priority directive may be used to set the interrupt priority. The highest priority items are first in the list. If an interrupt is active it is never interrupted. If two interrupts occur at around the same time then the higher one in this list will be serviced first.

Examples:
#priority rtcc,rb


Lässt sich der Interrupt tatsächlich unter keinen Umständen unterbrechen?

Lord_of_Valmore
22.02.2005, 09:59
Eine weitere interessante Frage wäre, wieviele Zeichen der PIC, bzw. der nötige MAX232-Baustein puffert, wenn diese mit getc() nicht sofort verarbeitet werden.

stegr
22.02.2005, 12:01
Der PIC puffert ein Byte, der MAX gar nix, weil das nur ein Pegelwandler ist.

22.02.2005, 12:41
heißt das, dass Bytes, die über die serielle schnittstelle hereinkommen sofort gepuffert werden müssen, um verarbeitet werden zu können?

RCO
22.02.2005, 12:47
Jepp, am besten nen Interrupt, der das Byte direkt wegspeichert.
Mich würde auch interessieren, wie sich die Interrupts gegeneinander verhalten.

MFG Moritz

PicNick
22.02.2005, 14:26
Hi, soweit ich weiß, haben die PIC16F... nur einen Interrupt-Level
einer nach dem anderen. der, der läuft, wird nie unterbrochen

BlackBox
23.02.2005, 07:46
Mit nur maximal 8 Adressen auf dem Hardwarestack und nur einem Interuptvektor geht es auch nicht anders. Lässt sich zwar machen aber wenn 3 Interupts hintereinander auftreten ist unter Umständen schon Sense.

Wenn es unbedingt sein muss, die 18FXXX haben zwei Interuptvektoren.