AVR-Grundlagen
Empfangen und Senden
Größere Mikrocontroller aus der AVR-Serie wie der ATmega8 verfügen über einen Hardware-UART (Universal Asynchronous Receiver Transmitter, universeller asynchroner Empfänger und Sender). Der ATtiny13 enthält eine solche Baugruppe nicht. Deshalb müssen die erforderlichen Funktionen durch Unterprogramme gebildet werden.
von Burkhard Kainka
Eine Lösung zeigt das Projekt RS232. Hier gibt es ein Unterprogramm RdCOM (Read, Lesen) und ein Unterprogramm WrCOM (Write,
Schreiben). Zur Datenübergabe wurde eine Variable A definiert, die das Register R16 belegt.
Das Unterprogramm RdCOM empfängt ein Byte und übergibt es in A.
Das Unterprogramm WrCOM übernimmt dann das empfangene Byte in A und sendet es zurück.
Die Empfangsroutine RdCOM (Read, Lesen) wartet zunächst auf einen High-Pegel an der Empfangsleitung RXD = PB2. Dann folgt eine Wartezeit von 1,5 Bitlängen (58 Warteschleifen), nach der das erste Datenbit gelesen wird.
Das Programm erkennt also das Startbit, um dann jeweils in der Mitte der Datenbits den Eingangszustand auszuwerten.
In der eigentlichen Empfangsschleife für die acht Datenbits wird jeweils nur eine Bitlänge gewartet, was mit dem Verzögerungswert Delay = 38 erreicht wird.
Ganzen Artikel lesen...
Vor der eigentlichen Empfangsschleife mit acht Durchläufen (Count = 8) wird A gelöscht. Für jedes gelesene 1-Bit wird dann das Bit 7 gesetzt (ori A, 128). Außerdem werden alle Bits schrittweise nach rechts verschoben.
Dazu dient der Schiebebefehl LSR (Logical Shift Right, Bitweise nach rechts schieben). Das zuerst empfangene Bit erscheint daher am Ende an der Stelle 0.
Am Ende werden alle Bits mit COM A (One's Complement, bitweise umdrehen) invertiert, weil High-Bits mit Low-Pegeln übertragen werden.
Wenn eine Schaltung den üblichen invertierenden RS232-Leitungstreiber verwendet, muss die Invertierung entfernt werden.
Die Senderoutine WrCOM führt den gleichen Vorgang in umgekehrter Richtung aus.
Zuerst wird ein Startbit erzeugt.
Dann folgt die eigentliche Ausgabeschleife für acht Bits. Hier wird jeweils das Bit 0 in A mit dem Befehl SBRC (Skip if Bit in Register is Cleared; überspringe, wenn das Registerbit gelöscht ist) getestet.
Je nach Zustand des Bits verzweigt das Programm zu den Adressen ON oder OFF. Am Ende wird noch das
Stoppbit mit seinem Low-Pegel angehängt.
Die passende Ergänzung zu diesem Artikel:
 | Lernpaket Mikrocontroller Lieferumfang: 15 Bauteile, Platine, Sub-D-9-Kabel, CD-ROM, Handbuch 160 Seiten ISBN 978-3-7723-4899-0 Versandkostenfrei* direkt beim Verlag bestellen
49,95 € 
|

Lernen Sie die ganze Vielfalt vom Franzis Buch- und Softwareverlag kennen