Moin,
das folgende einfache Programm soll eigentlich nur warten, bis ein
gesendetes Byte vom PC gleich dem "sync"-Byte ist und dass danach
folgende Byte dann an den PC zurück senden. Kurioserweise funktioniert
das Programm nur, wenn ich in der whileschleife der main-Funktion PortB
oder PortD irgendeinen Wert zuweise, das fiel mir auf, als ich
verschiedene LEDs angesteuert hab um zu gucken, welche Programmparts
überhaupt aufgerufen werden. Irgendwie komme ich da grade auf keinen
grünen Zweig, warum das Programm sich so merkwürdig verhält, vielleicht
fällt es ja jemanden sofort auf.
1 | int main(void)
|
2 | {
|
3 | uart_init();
|
4 | flags.synced=0;
|
5 | flags.complete=0;
|
6 | //DDRB=0xFF;
|
7 | sei();
|
8 | while(1){
|
9 | PORTB = 0xFF;
|
10 | if (flags.complete==1){
|
11 | PORTB = 0xFF; <---- Wird diese Zeile auskommentiert läuft das Programm nicht mehr.
|
12 | while (!(USR & (1<<UDRE))){}
|
13 | UDR=data;
|
14 | // while (!(USR & (1<<TXC))){}
|
15 | flags.synced=0;
|
16 | flags.complete=0;
|
17 | //UCR |= (1<<RXEN);
|
18 | }
|
19 | }
|
20 | return 0;
|
21 | }
|
22 |
|
23 |
|
24 | ISR ( UART_RX_vect) {
|
25 | buffer=UDR;
|
26 | if (flags.synced==1 && flags.complete==0) {
|
27 | data=buffer;
|
28 | flags.complete=1;
|
29 | }
|
30 | if (buffer==sync && flags.synced==0) {
|
31 | while (!(USR & (1<<UDRE))){}
|
32 | flags.synced=1;
|
33 | }
|
34 | }
|