Hy ich möchte das mein Programm zu beginn 5 Werte per RS232 aufnimmt und mit denen dann weiterarbeitet. Wenn die Werte korreckt ankommen funktionert das auch wunderbar. Wenn jedoch nur 4 ankommen bleibt er in dem Punkt hängen. Daher wollte ich einen Watchdogtimer einführen, der dann nach 2,2s resetet... nutze
1 | #define F_CPU 8000000UL |
2 | #include <avr/io.h> |
3 | #include <stdio.h> |
4 | #include <stdlib.h> |
5 | #include <inttypes.h> |
6 | #include <avr/interrupt.h> |
7 | #include <avr/wdt.h> |
8 | |
9 | #define BAUD 38400UL |
10 | #define UBRR_BAUD ((F_CPU)/(16*(BAUD))-1) |
11 | |
12 | int main (void) |
13 | { |
14 | |
15 | // Programm |
16 | |
17 | // RS232 aktivieren |
18 | |
19 | UCSRB |= (1 << TXEN) | ( 1 << RXEN ) | ( 1 << RXCIE ) ; // UART TX, RX einschalten |
20 | |
21 | UCSRC |= ( 1 << URSEL ) | ( 1<<UCSZ1 ) | ( 1<<UCSZ0 ) | ( 1<<UPM1 ); // Asynchron 8N1 |
22 | |
23 | UBRRH = (uint8_t) (UBRR_BAUD>>8); // USART Baud |
24 | |
25 | UBRRL = (uint8_t) UBRR_BAUD; |
26 | |
27 | wdt_enable(7); |
28 | sei(); |
29 | |
30 | while (!(UCSRA & (1<<UDRE))); |
31 | UDR = 0; |
32 | |
33 | // Empfangen der Parameter |
34 | while (!(UCSRA & (1<<RXC))); |
35 | Xonin = UDR; // Zeiweisung der ersten 8 Bit |
36 | while (!(UCSRA & (1<<RXC))); // Warten auf die Parametereingabe |
37 | loesungnew = UDR; // Zuweisung der Zusatzes von RX |
38 | while (!(UCSRA & (1<<RXC))); // Warten auf die Parametereingabe |
39 | parameterHnew = UDR; // Zeiweisung der ersten 8 Bit |
40 | while (!(UCSRA & (1<<RXC))); // Warten auf die Parametereingabe |
41 | parameterLnew = UDR; // Zeiweisung der zweiten 8 Bit |
42 | while (!(UCSRA & (1<<RXC))); // Warten auf die Parametereingabe |
43 | Xoffin = UDR; |
44 | |
45 | ... |
46 | |
47 | } |
48 | // Interrupt aktivieren |
49 | wdt_reset(); |
50 | |
51 | // Messungschleife |
52 | |
53 | for (;;) |
54 | { |
55 | wdt_reset(); |
56 | i++; |
57 | for (a=0;a<1000;) |
58 | { |
59 | a++; |
60 | } |
61 | // Summation der Werte in einer Messschleife |
62 | if (i == parameter) // Intervalllänge bestimmt durch Parametereingabe |
63 | output(); // Ausgabe der Daten per RS232 |
64 | } |
65 | } |