Hallo,
ich betreibe einen Mega64 mit 16Mhz Quartz und möchte den USART1 nutzen.
Aus lauter Verzweiflung habe ich jetzt schon den Beispielcode aus dem
Datenblatt genommen. Wenn ich Breakpoints setze (z.b. wo ich das UBRR1L
Register schreibe) bleibt die Software dort hängen, als ob es eine
Endlosschleife ist. Irgendwas stimmt hier nicht?! Gibt es irgendwelche
Fuses o.ä. die ich überlesen habe um den USART1 nutzen zu können?
Übrigends benutze ich zum ersten Mal Studio 6 (vorher Version 4).
Vielen Dank für Infos!
Jannik
Hier der komplette Code (ist ja überschaubar).
1 | #include <avr/io.h>
|
2 | #define FOSC 16000000// Clock Speed
|
3 | #define BAUD 9600
|
4 | #define MYUBRR FOSC/16/BAUD-1
|
5 |
|
6 |
|
7 | void USART_Init( unsigned int ubrr )
|
8 | {
|
9 | /* Set baud rate */
|
10 | UBRR1H = (unsigned char)(ubrr>>8);
|
11 | UBRR1L = (unsigned char)ubrr;
|
12 | /* Enable receiver and transmitter */
|
13 | UCSR1B = (1<<RXEN1)|(1<<TXEN1);
|
14 | /* Set frame format: 8data, 2stop bit */
|
15 | UCSR1C = (1<<USBS1)|(3<<UCSZ10);
|
16 | }
|
17 |
|
18 | void USART_Transmit( unsigned char data )
|
19 | {
|
20 | /* Wait for empty transmit buffer */
|
21 | while ( !( UCSR1A & (1<<UDRE1)) )
|
22 | ;
|
23 | /* Put data into buffer, sends the data */
|
24 | UDR1 = data;
|
25 | }
|
26 |
|
27 |
|
28 | void main( void )
|
29 | {
|
30 |
|
31 | USART_Init ( MYUBRR );
|
32 |
|
33 | while(1)
|
34 | {
|
35 | USART_Transmit('A');
|
36 | }
|
37 | }
|