Der PIC 12F675 Teil 2 – STATUS Register

PIC © 12F675 Eines der größten Probleme beim Programmieren von PIC’s ist der Umstand, dass man die Funktionen des Innenlebens zumindest grob kennen muss. Immer öfter bekomme ich Anfragen zu Problemen, die ursächlich nicht aus dem eigentlichen Programm, sondern der Einstellung des Controllers an sich kommen. Bei genauerer Überlegung logisch, wie soll z. B. der A/D Wandler arbeiten, wenn er gar nicht aktiviert wurde? Ich versuche in diesem (und dem ersten Teil und vielleicht folgenden) Beitrag mal, das Ganze anhand des 12F675 ein wenig zu entwirren. Vorweg sei gesagt, dass man um das Datenblatt trotzdem nicht herumkommt, zu vieles ist sehr tief verschachtelt oder setzt weitere Kenntnisse voraus, die ich in einem Beitrag hier einfach nicht komplett erfassen kann. Oftmals muss man aber so tief gar nicht graben, vielleicht fehlte beim letzten Versuchsaufbau ja nur ein einziges Bit, damit das Programm läuft oder eben der PIC einfach macht, was er soll.

Ich nehme als Beispiel den 12F675, er ist günstig und für die allermeisten Kleinprojekte ausreichend. Darüber hinaus, kann man die Kenntnisse auf sehr viele weitere Controller anwenden, Unterschiede liegen hier eher in den Details -> Datenblatt! ;-) Ich werde in diesem Teil die wichtigsten Register ein wenig beschreiben, mal sehen, wie umfangreich dieser und die wahrscheinlich folgenden Beiträge werden. Bestimmte Parameter kann man nicht wirklich gut erklären, wenn der Leser die elektronischen Funktionen nicht kennt, welche dahinter stehen. Oft hilft einfach experimentieren Glücklicherweise sind diese Möglichkeiten des Mikrocontrollers für die meisten Funktionen nicht unbedingt notwendig, in Standardschaltungen jedenfalls. Auf solch spezielle Funktionen werde ich also nur eingehen, wenn es unumgänglich ist. Will sagen: wenn jemand diese Funktionen benötigt, dann weiß er mesit auch, um was es geht :mrgreen: Nebenbei wird es sicher wieder Mails geben, in denen typische Dinge wie ‚Es geht aber auch anders…‘ und ‚… ganz korrekt wäre aber…‘ stehen, das ist sicher alles richtig, kenne ich aber so nicht, habe ich noch nicht getestet oder erscheint mir aus irgendeinem Grund für den Artikel unpassend, akzeptiert das bitte. Meine Beiträge sind keine Doktorarbeiten, sie sollen dem Interessierten bei einem kleinen Schritt auf einem langen Weg einfach etwas helfen, schreib ich andauernd, ist mir klar ;-)

Link: -> 12F675 Teil 1

Ich starte in den nächsten Beiträgen mit den Registern in der Reihenfolge, in der sie auch im Datenblatt aufgeführt sind.

Sei noch darauf hingewiesen, dass es i. d. R. 8 Bit pro Register gibt, welche von RECHTS NACH LINKS beginnend mit ‚0‘ bezeichnet sind! 

Geschrieben sieht dies also so aus:

Bit 7 – Bit 6 – Bit 5 – Bit 4 – Bit 3 – Bit 2 – Bit 0

Möchte man z. B. das erste Bit in einem Register bearbeiten, dann ist dies im Assembler Bit ‚0‘. Mit

bsf ADCON,0

würde zum Beispiel das 1. Bit im Register ADCON auf ‚1‘ oder ‚HIGH‘ setzen,

00000001

wäre also der Inhalt, wenn alle anderen Bits vorher auf ‚0‘ standen.


 

STATUS 

Im STATUS Register des Controllers kann man hauptsächlich feststellen, was der PIC gerade erledigt hat bzw. welches Ereignis gerade eingetreten ist. STATUS befindet sich in Bank 0 und Bank 1!

 Bit 7

In diesem PIC nicht relevant

Bit 6

In diesem PIC nicht relevant

Bit 5

Bankauswahl, dazu kommt noch ein eigener Artikel. Dient dazu, Register in Bank 0 oder Bank 1 auszuwählen. In welcher Bank welches Register zu finden ist, steht im Datenblatt. Beim 12F675 gibt es Bank 0 und 1, in anderen PIC’s noch weitere. Setzen von Bit 5 (bsf STATUS,5) schaltet in Bank 1. Befindet man sich im Programm in der falschen Bank, kann man auf Register die eben in der anderen liegen nicht zugreifen.

Bit 4

Feststellen oder beeinflussen des SLEEP Modus bzw. des Watchdog, muss ich auch in einem eigenen Beitrag bearbeiten.

Bit 3

Siehe Bit 4 :-)

Bit 2

Zeigt an, ob das Ergebnis der letzten Operation ‚0‘ war. Hat der Controller also z. B. 10 – 10 = 0 gerechnet, wird dieses Bit  auf ‚1‘ gesetzt.

Bit 1

Wird ‚1‘, wenn ein Überlauf der unteren 4 Bit der letzten Operation stattgefunden hat. Ich weiß, das klingt jetzt völlig Ballaballa, ich drösel’s später noch auf ;-)

Bit 0

Wird ebenfalls ‚1‘, wenn ein Überlauf stattgefunden hat, hier aber auf die kompletten 8 Bit bezogen. Durch seine 8 Bit, kann der 12F675 von 0-255 zählen. Addiert man nun zu 255 +1, ergibt das nicht 256, der Zähler „springt um“, er steht auf ‚0‘, mehr als 255 gehen eben nicht. Um festzustellen, ob dies geschehen ist, kann man STATUS,0 abfragen. Das gleiche gilt für oben genanntes Bit 1, nur eben auf die unteren 4 Bit bezogen. In der Praxis kann man beispielsweise ein Register immer um +1 erhöhen, wenn eine Ereignis eingetreten ist und abfragen, ob es einen Überlauf gab. Dieser Überlauf könnte dann eine Signal-LED einschalten oder einen anderen Programmteil starten. Lädt man dieses Register schon vorher mit einem bestimmten Wert, können auch weniger als 255 Schritte gewählt werden, der Überlauf erfolgt dann eben eher. Alternativ oder ergänzend rechnet man nicht +1 sondern +2 oder +11 oder was auch immer, die Möglichkeiten sind zahlreich.

Etwas unübersichtlicher wird es bei Subtraktionen, da verläuft das Spiel umgekehrt. Wird also beim Minusrechnen die 0 unterschritten (Beispiel:1-2 dann = 255), ist das Bit NICHT gesetzt, in allen anderen Fällen ja.

Vereinfacht betrachtet ist dies der Sinn bzw. die Aufgabe des STATUS-Registers mit den Funktionen, die für einfachere Anwendungen benötigt werden.

Tipp zu ersten Programmierübungen:

4 LEDs an GP 0 – 3 des PIC anschließen und die unteren 4 Bit des STATUS-Registers nach Operationen in GPIO kopieren und (mit Pause) anzeigen lassen. So kann man gut prüfen, was wirklich im Register erschienen ist. Für reine „Trockenübungen“ eignet sich hier auch der MPLAB eigene Simulator gut.