Die UART - Ein Zeichen empfangen und senden Drucken E-Mail

Hier ein UART-Demoprojekt mit dem AT90PWM316.


Da keine serielle Schnittstelle am PC zur Verfügung stand, wurde diese mit Hilfe eines USB / UART - Wandlers (CP2102) realisiert.

Serielle Kommunikation

 

Abbildung: USB/UART Converter mit CP2102

 

Kommunikation mit dem Hyper Terminal

Mit dem Programm Hyper Terminal wird ein Zeichen an den Mikrocontroller gesendet, anschließend zurück gesendet und im Editorfenster des Hyperterminals angezeigt.

Das Programm Hyper Terminal befindet sich unter Windows (Programme --> Zubehör --> Kommunikation) und muss beim Start auf die jeweiligen Einstellungen (COM Port, Baud Rate, Stop Bits, etc.) eingestellt werden.

In unserem Fall befindet sich die serielle Schnittstelle mit dem USB / UART - Wandleram COM Port 7.

 

Wenn wir nun ein Zeichen senden, in unserem Fall das Zeichen a, wird der entsprechende ASCII-Code des Zeichens an den Mikrocontroller gesendet und dort am PORT B ausgegeben.

Da das empfangene Zeichen sofort zurück gesendet wird, wird es am Hyper Terminal empfangen und angezeigt.

Der ASCII-Code für das Zeichen a ist 61Hex

Dem zu Folge wird am PORT B 61Hex (= binär 0110 0001) angezeigt.

 

 

C-Code auf der Seite des Mikrocontrollers

 

/*****************************************************************

/* Demoprojekt: UART

/* © HG / 2011

/* Ziel: AT90PWM316, AVR Studio und GCC

/*****************************************************************

// Beschreibung:

// Initialisierung der UART, 9600, 8N1; unter Verwendung von Marcos

// Funktionen zum Senden und Empfangen eines Bytes im Polling

// main: ein empfangenes Zeichen wieder senden und am PortB ausgeben


#include <avr/io.h>

#define FOSC 8000000 // Set clock Speed in Hz

#define BAUD 9600 // Set baud rate

#define UBRR_Value FOSC/16/BAUD-1 // Set baud rate value in baud rate register

 

void USART_Init( unsigned int ubrr)

{

UBRRH = (unsigned char)(ubrr>>8); // Set baud rate in high- and low-register

UBRRL = (unsigned char)ubrr;

UCSRC = (1<<UCSZ1)|(1<<UCSZ0); // Set frame format: 8data, 1stop bit

UCSRB = (1<<RXEN)|(1<<TXEN); // Enable receiver and transmitter

}


void USART_Transmit(unsigned char data)

{

while ( !( UCSRA & (1<<UDRE)) ); // Wait for empty transmit buffer

UDR = data; // Put data into buffer, sends the data

}


unsigned char USART_Receive(void)

{

while ( !(UCSRA & (1<<RXC)) ); // Wait for data to be received

return UDR; // Get and return received data from buffer

}


void USART_Flush(void) // Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte)

{

unsigned char dummy;

while (UCSRA & (1<<RXC))

dummy = UDR;

}


void main( void )

{

unsigned char data;

USART_Init(UBRR_Value); // Init UART

USART_Flush(); // Flush Receive-Buffer

DDRB = 0xFF; // alle PINs an PortB als Ausgänge

while(1)

{

USART_Transmit(data = USART_Receive()); // receive on byte, send it

PORTB = data; // and write to Port B

}

}

 

 

 

Samstag, 19. Mai 2012

Banner
Seitenaufrufe : 1040188