kramann.info
© Guido Kramann

Login: Passwort:










7.7 Empfangen

Wie sieht ein einfaches Programm zum Empfang serieller Daten auf dem ATmega32 aus?

  • Im folgenden soll ein Programm dargestellt und besprochen werden, das immer das zuletzt vom Hyperterminal gesendete ASCII-Zeichen als Dezimalwert in der 7-Segment-Anzeige darstellt.
  • Dazu kann die Hardware-Anordnung von Kapitel 5.5 beibehalten werden.
rs232_empfangen.zip - Projekt zum nachfolgenden Programm.
#include<avr/io.h>

//Definition von Taktfrequenz und Bausrate als Konstanten
#define TAKTFREQUENZ 9216000
#define BAUDRATE 115200


int main()
{
    unsigned char akku=0;

    DDRA = 0b00000000;
    DDRB = 0b00000000;
    DDRD = 0b00000000;

    DDRC = 0b11111111; //über RS232 gesendete Zahlen sollen auch an 
                       //zweiten Mikrocontroller geschickt
                       //und angezeigt werden.

    //Aktivieren der RS232-Schnittstelle des Mikrocontrollers:
    
    //Merken des in UBRR zu speichernden Wertes.
    unsigned int baudregister = TAKTFREQUENZ/8/BAUDRATE-1;

	//setzen der Baudrate
	UBRRH = (unsigned char) (baudregister>>8); //Setzen des HIGH-Bytes des Baudraten-Registers
	UBRRL = (unsigned char)  baudregister;     //Setzen des LOW -Bytes des Baudraten-Registers
	
	//Einschalten des Senders und des Empfängers
	UCSRB = (1<<TXEN) | (1<<RXEN);
		        
	//Setzen des Nachrichtenformats: 8 Datenbits, 1 Stopbits
	UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
    UCSRA = (1<<U2X);

    //Es soll das zuletzt vom Hyperterminal empfangene ASCII-Zeichen 
    //dezimal angezeigt werden

    while(1)
    {
        while( !(UCSRA & (1<<RXC)) );  //Warten bis der Uebertragungspuffer ein Zeichen empfangen hat
        akku = UDR;                    //Zeichen aus dem Puffer holen

        //...und anzeigen
        PORTC = akku;
    }
}
 

Code 7.7-1: ASCII-Zeichen vom Hyperterminal mit dem Mikrocontroller empfangen und anzeigen.