Dieser Code läuft bei mir:
Code:
/*
===========================================================
Aufgabe:
Sende "Hallo Welt" über die RS232 UND
LED auf PB2 anzünden
Autor: JWT
===========================================================
*/
#include <stdlib.h>
#include <avr/io.h>
/* #include <avr/iotn2313.h> <<< das is ja wohl nix */
//#define MCU = attiny2313
// ### NEIN ### Mit Quarz 16 Mhz-CPU
// Interner Oszillator, 8 MHz
#define F_CPU 8000000
#define BAUD 9600
#define UBRR (unsigned int)(F_CPU / BAUD / 16 - 0.5)
// ### Portinitialisierung und waitms aus RNContr Demo C
// *### Ports setzen ###
// Ports auf HIGH/LOW setzen
static inline void setportbon(const uint8_t n)
{PORTB |= (1<<n);} //set PORTB.n high
static inline void setportboff(const uint8_t n)
{PORTB &= ~(1<<n);} //set PORTB.n low
/*### Programm pausieren lassen ###*/
/*Pausenwert ist nur experimentell !*/
void waitms(uint16_t ms)
{
for(; ms>0; ms--)
{
uint16_t __c = 4000;
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__c)
: "0" (__c)
);
}
}
// ------------------------------------------------------------------
// Dieser Codeschnipsel ähnlich 2313-doc, S 121
void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (3<<UCSZ0);
}
// ------------------------------------------------------------------
void sendchar(unsigned char c)
{
while(!(UCSRA & (1<<UDRE))) //Warten, bis Senden möglich ist
{
}
UDR = c; //schreibt das Zeichen aus 'c' auf die Schnittstelle
}
// ------------------------------------------------------------------
void sendUSART(char *s) //*s funktiniert wie eine Art Array - auch bei
// einem String werden die Zeichen (char)
// einzeln ausgelesen - und auf die
// Sendeschnittstelle übertragen
{
while(*s)
{
sendchar(*s);
s++;
}
}
// ------------------------------------------------------------------
/*### Hauptschleife ###*/
int main(void)
{
USART_Init(UBRR); //USART initialisieren
DDRB=0xff;
// for(uint8_t i=0; i<10; i++)
for(;;){
setportboff(2);
waitms(150);
setportbon(2);
/*###Text senden###*/
sendUSART("\r\n\n\n"); //Sendet Kenung und Text.
// "\r" setze Cursor auf Zeilenanfang,
// "\n" beginnt dann die nächste Zeile
sendUSART("**** ATtiny2313 *****\r\n");
sendUSART(" \r\n");
sendUSART("Hallo, Welt.\r\n");
sendUSART(" \r\n");
}
}
Wie schon erwähnt PORTB als Ausgang definieren und den UART richtig einstellen, du hast die Baudrate in den UBRRL und H geschrieben.
Edit: Ich habe auf 1Stopbit geändert
Lesezeichen