zum Directory-modus

PIC-Controller-Schnittstellen

SCI-Schnittstelle

Das Serial Communication Interface (SCI), das nur bei einigen größeren PIC16-Derivaten wie u.a. den PIC16C74 und PIC16C73 implementiert ist, ist eines der zwei seriellen I/O Module. Das SCI-Modul kann entweder als full duplex- asynchrones System konfiguriert werden, das mit peripheren Geräten wie CRT Terminals oder Personal Computern kommunizieren kann oder als half duplex synchrones System, das mit peripheren Geräten kommunizieren kann wie A/D oder D/A integrierte Schaltkreise, serielle EEPROMS etc. Das SCI kann in den folgenden Modi konfiguriert werden:

  • Asynchron (full duplex)
  • Synchron - Master (half duplex)
  • Synchron - Slave (half duplex)

In allen Fällen muss das SPEN Bit (RCSTA<7>) gesetzt werden, um die Pins RC6 und RC7 als Schnittstellen I/O Ports zu konfigurieren. Insgesamt besteht das Modul aus 5 Spezielregistern: TXSTA-Register, RCSTA-Register, TXREG-Register, RCREG-Register und SPBRG-Register. Die Register TXSTA und RCSTA sind kombinierte Control- und Statusregister, mit denen das SCI-Modul konfiguriert wird und Informationen für den Anwender zurückgegeben werden. Diese sind im TXSTA-Register das Bit TRMT, welches anzeigt, dass der Transmitpuffer leer ist und das nächste Byte zum Senden übergeben werden kann. Ebenso im TXSTA-Register enthalten ist das Bit zum Auswählen des Baudratenbereichs. Es ist das Bit BRGH, das im asynchronen Modus beim Setzen den High Speed Bereich aktiviert. Wahlweise können 8 oder 9 Datenbits übertragen werden. Die Festlegung geschieht wiederum im TXSTA-Register in Bit TX8/9, ist es gesetzt, werden 9 Bits übertragen, ansonsten 8. Wird der 9-Bit Modus ausgewählt, muss das 9.Bit in TXSTA<0> (TXD8) geschrieben werden. Im RCSTA-Register befinden sich Errorbits und das neunte gelesene Datenbit. Zum Empfangen muss auch unbedingt das RCSTA<4> Bit (CREN) gesetzt werden. Wenn 9 Datenbits in einem Block empfangen werden sollen, so ist zusätzlich noch das RCSTA<6> Bit (RC8/9) zu setzen.

Will man Daten senden, so braucht man nur das zu sendende Byte in das Register TXREG zu schreiben. Wenn der Sendevorgang beendet ist, wird das Bit TXSTA,1 (TMRT) gesetzt. Dieses Bit wird gelöscht, wenn ein Byte in das TXREG geschrieben wird. Die Beendigung des Sendevorgangs zeigt auch das Interrupt-Flag PIR<4> an. Damit kann auch ein Interrupt ausgelöst werden, sofern dieser in den entsprechenden Registern konfiguriert ist. Zum Empfangen wird das übertragene Byte ins Register RCREG geschrieben. Nach der Übertragung wird das Interrupt-Flag PIR1,5 gesetzt. Das Bit aus dem Übertragungspuffer RCREG braucht nur noch abgeholt zu werden. Das SPBRG-Register zuguterletzt ist das Baudratengenerator-Steuerregister. Dieses ist einfach mit dem Teilerwert zu beschreiben, der direkt aus einer im Datenbuch abgedruckten Tabelle zu entnehmen ist. Er ist sehr flexibel und bietet Baudraten an, die weit über das Übliche hinausgehen. Der Wert kann auch nach folgender Formel berechnet werden:

SPBRG=FOSC / (16*Baudrate)-1

sofern Bit 3 von TXSTA gesetzt ist. Wenn TXSTA,3 nicht gesetzt ist, muss die 16 in der obigen Formel durch 64 ersetzt werden.

Für FOSC=4 MHz und eine Baudrate von 9600 ergibt die Formel einen Wert von 25,04, welcher durch 25 problemlos zu nähern ist. Man beachte, dass es sich zwar um einen kumulativen Fehler handelt, solange er aber unter einem Prozent liegt, kann er 8 Bit überstehen, ohne auszuufern.

Im Master-synchronen Modus werden die Daten in einer halb-duplexen Art übertragen, d.h. Senden und Empfangen finden nicht gleichzeitig statt. Es kann entweder nur gesendet oder nur empfangen werden. Mit dem Setzen des TXSTA<4> (SYNC) Bits wird der synchrone SCI-Modus aktiviert. Mit dem SPEN-Bit (RCSTA<7>) werden die Pins RC6 und RC7 als CK(Clock) und DT(data) konfiguriert. Im Master Modus wird die Master Clock auf der CK Leitung gesendet. In den Master Modus schaltet man, wenn das TXSTA<7> Bit (CSRC) gesetzt wird. Das Sende-Schiebe-Register ist das Register TSR. Dieses Register ist für die Software nicht direkt zugänglich, ferner übernimmt es den Wert des Registers TXREG, der im Programm gesetzt wird. Wenn das TXEN-Bit (TXSTA<5>) gesetzt wird und das Register TXREG mit dem zu sendenden Wert geladen wird, beginnt der Datentransfer bei der nächsten steigenden Flanke der Clockleitung CK.

Der Datenempfang ist aktiviert, wenn Bit SREN (RCSTA<5>) oder CREN (RCSTA<4>) gesetzt wird. Wenn SREN gesetzt wird, wird nur ein einfaches Wort übertragen, beim Setzen von CREN ist die Übertragung kontinuierlich. Die Daten werden bitweise auf den Pin DT an der fallenden Flanke der Clock übertragen. Nachdem das letzte Bit übertragen wurde, wird der Wert aus dem Empfangs-Schieberegister in das Register RCREG transferiert, wo es dann abgeholt werden kann. Dabei wird das Interrupt-Flag PIR1<5> gesetzt. Neben dem Master Modus gibt es noch den Slave Modus. In diesem Modus wird eine externe Clock an den Pin RC6/CK angelegt. Dies hat den Vorteil, dass Senden und Empfangen auch im SLEEP-Modus möglich ist. Mit Löschen des CSRC(TXSTA<7>) Bits wird der Slave-Modus aktiviert.

Die Funktionsweise des Master und Slave-Modus unterscheidet sich lediglich in dem Fall des Sleep-Modus. Wenn 2 Worte in das Register TXREG geschrieben werden und dann die SLEEP-Anweisung ausgeführt wird, wird das folgende passieren: Das erste Wort wird sofort in das TSR-Register transferiert und gesendet. Das zweite Wort wird im Register TXREG bleiben. Das TXIF wird nicht gesetzt. Wenn das erste Wort aus dem TSR-Register transportiert wurde, wird das zweite aus dem TXREG in das TSR transportiert und das Interrupt-Flag gesetzt. Wenn der Interrupt aktiviert ist, wird er den Chip "aufwachen" und, sofern der globale Interrupt gesetzt ist, wird dieser ausgeführt. Beim Empfangen verhält es sich genauso: wenn der Empfang aktiviert ist (CREN), kann ein Wort im SLEEP-Modus empfangen werden. Ist das Wort komplett empfangen, transferiert das RSR die Daten zum RCREG-Register und das RCIE-Bit wird gesetzt. Infolgedessen wird der hervorgerufene Interrupt den Chip "aufwachen", und, sofern der globale Interrupt aktiviert ist, wird das Programm in den Interrupt springen (Adresse 0004h).

Seite 2 von 4