Hallo Leute. Werde im Moment nicht schlau stehe auf dem Schlauch. Ich kann per UART super empfangen, aber sobald ich ne Interruptroutine hinen bringe klappt das Empfangen nicht mehr. Meine Schaltung besteht aus ATmega88 mit 5V Versorgungsspannung.
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <util/delay.h> |
4 | |
5 | #define F_CPU 20000000UL
|
6 | |
7 | #define Led_GR_HI PORTB|=(1<<PB0)
|
8 | #define Led_GR_LOW PORTB&=~(1<<PB0)
|
9 | |
10 | #define Led_RO_HI PORTB|=(1<<PB5)
|
11 | #define Led_RO_LOW PORTB&=~(1<<PB5)
|
12 | |
13 | void Port_Init() |
14 | {
|
15 | DDRB|=(1<<PB0)|(1<<PB5); |
16 | }
|
17 | |
18 | unsigned char RxData; |
19 | |
20 | void UART_Init(void) |
21 | {
|
22 | UCSR0B|=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); // Sender, Empfaenger, Interrupt ein |
23 | UCSR0C|=(1<<UCSZ01)|(1<<UCSZ00); // Asynchron 8N1 |
24 | UBRR0H = 0; // Aus dem Datenblatt fuer 19,2 kBaud |
25 | UBRR0L = 64; // Aus dem Datenblatt |
26 | }
|
27 | |
28 | ISR(USART_RX_vect) // Vector aus dem iomx8.h |
29 | {
|
30 | // while ( !( UCSR0A & (1<<RXC0)) );
|
31 | RxData = UDR0; |
32 | }
|
33 | |
34 | int main(void) |
35 | {
|
36 | Port_Init(); |
37 | UART_Init(); |
38 | sei(); |
39 | |
40 | if(RxData == 0x01) |
41 | {
|
42 | Led_GR_HI; |
43 | _delay_ms(100); |
44 | };
|
45 | Led_GR_LOW; |
46 | |
47 | if(RxData == 0x02) |
48 | {
|
49 | Led_RO_HI; |
50 | _delay_ms(100); |
51 | };
|
52 | Led_RO_LOW; |
53 | |
54 | while(1); |
55 | }
|