Moin,
kennt sich einer mit der UART programmierung von µC aus?
Ich habe folgenden Programmcode aus Beispielen kopiert, soweit ohne Fehler, nur leider weiß ich nicht ob er funktioniert oder nicht. Mein PC gibt mir beim RS232 Anschluss keine Signale raus. Ich habe aber leider keine Ahnung zu dem Thema, nur benötige bald ein Programm womit ich Signale über Funk (RS232) verschicken kann. Als µC habe ich den Atmega 8515-PU genutzt. Falls mir noch so einer Tipps geben kann wäre ich sehr dankbar.
Mein Programm:
Code:
#include "uart.h"
#define BAUDRATE 38400UL//Definition als unsigned long, sonst gibt es Fehler in der Berechnung
#define F_CPU 8000000
void uart_init (void)
{
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*BAUDRATE) - 1);
UBRRL = ubrr; //Baudrate 38400
UCSRA|=2; //Doppelte Baudrate
UCSRB=0x18; //RX und TX erlaubt
// Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte)
do
{
UDR;
}
while (UCSRA & (1 << RXC));
}
int main(void)
{
uart_init ();
while(1)
{
int a;
uart_putc(1001);
}
}
Die dazu benötigte UART.h:
Code:
#ifndef UART_H
#define UART_H
#include <avr/io.h>
extern void uart_init (void);
static inline int
uart_putc (const uint8_t c)
{
// Warten, bis UDR bereit ist für einen neuen Wert
while (!(UCSRA & (1 << UDRE)))
;
// UDR Schreiben startet die Übertragung
UDR = c;
return 1;
}
static inline uint8_t
uart_getc_wait (void)
{
// Warten, bis etwas empfangen wird
while (!(UCSRA & (1 << RXC)))
;
// Das empfangene Zeichen zurückliefern
return UDR;
}
static inline int
uart_getc_nowait (void)
{
// Liefer das empfangene Zeichen, falls etwas empfangen wurde; -1 sonst
return (UCSRA & (1 << RXC)) ? (int) UDR : -1;
}
#endif /* UART_H */
Lesezeichen