Objektorientierte Umsetzung der Klasse RS232
|
Bild 0-1: Leeres Projekt
|
Bild 0-1: Neues .h-File für die Klasse RS232 anlegen.
RS232 - Klasse
class RS232 { public: RS232(uint32_t baudrate=115200, uint8_t datenbits=8, uint8_t stopbits=1) { //setzen der Baudrate: uint32_t baudregister = TAKTFREQUENZ/8/baudrate-1; UBRRH = (uint8_t) (baudregister>>8); //Setzen des HIGH-Bytes des Baudraten-Registers UBRRL = (uint8_t) baudregister; //Setzen des LOW -Bytes des Baudraten-Registers //einfache (nicht doppelte) Übertragungsgeschwindigkeit: UCSRA = (1<<U2X); //Setzen des Nachrichtenformats: 8 Datenbits, 1 Stopbits switch(datenbits) { case 5: UCSRC = (1<<URSEL)|(0<<UCSZ1)|(0<<UCSZ0); break; case 6: UCSRC = (1<<URSEL)|(0<<UCSZ1)|(1<<UCSZ0); break; case 7: UCSRC = (1<<URSEL)|(1<<UCSZ1)|(0<<UCSZ0); break; case 8: UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); break; } if(stopbits==2) UCSRC |= (1<<USBS); } void start(bool senden, bool empfangen) { if(senden==true) UCSRB |= 1<<TXEN; if(empfangen==true) UCSRB |= 1<<RXEN; } void stop() { UCSRB &= 255 - (1<<TXEN) - (1<<RXEN); } void sendeZeichen(uint8_t zeichen) { while( !(UCSRA & (1<<UDRE)) ); //Warten bis der Uebertragungspuffer leer ist UDR = zeichen; //Daten in den Puffer schreiben und übertragen } void sendeZahl(uint8_t zahl) { sendeZeichen( 48+zahl/100 ); sendeZeichen( 48+(zahl % 100)/10 ); sendeZeichen( 48+zahl%10 ); sendeZeichen('\n'); sendeZeichen('\r'); } };
Code 0-1: RS232.h - Klasse für RS232-Schnittstelle.
Hauptprogramm / Verwendung / Test der Klasse RS232
#include <avr/io.h> #define TAKTFREQUENZ 9216000 #include "RS232.h" int main(void) { // RS232 rs232(115200,8,1); RS232 rs232; uint8_t akku=0; uint32_t pause; DDRA = 0b00000000; DDRB = 0b00000000; DDRD = 0b00000000; DDRC = 0b11111111; //über RS232 gesendete Zahlen sollen auch an //zweiten Mikrocontroller geschickt //und angezeigt werden. rs232.start(true,false); while(true) { rs232.sendeZahl(akku); //Zahl außerdem wie gewohnt nach Port C schicken: PORTC = akku; for(pause=0;pause<10000000;pause++); //Weiterzählen: akku++; } return 0; }
Code 0-2: Hauptprogramm