Hallo! Mein PIC wird alle 2,5s geresetted. Ich verzweifle mittlerweile, denn: - einerseits habe ich den Brown-Out reset aus - andererseits habe ich den Watchdog auch aus! zum Code: ein zyklischer Interrupt soll bestimmte Pins auf ne best. Art toggeln. diese Zykluszeit beträgt ca 8ms.
1 | #include "int16CXX.h" |
2 | #pragma origin 4
|
3 | interrupt serverX(void) |
4 | {
|
5 | int_save_registers
|
6 | if (TMR1IF) // T1 übergelaufen? |
7 | {
|
8 | PORTB.6 = !PORTB.6; |
9 | |
10 | PORTC.1 = 0; |
11 | TMR1IF = 0; |
12 | T1OSCEN = 0; |
13 | TMR1CS = 0; |
14 | TMR1H = 240; |
15 | TMR1L = 220; |
16 | TMR1ON = 1; |
17 | GIE = 1; |
18 | PEIE = 1; |
19 | TMR1IE = 1; |
20 | TMR1IF = 0; |
21 | |
22 | if (PORTB.5 == 0 && !m) |
23 | {
|
24 | PRO = PRO<<1; |
25 | n=1; |
26 | PORTB.4 =1; |
27 | }
|
28 | if (!m) PORTB.5 = !PORTB.5; |
29 | |
30 | else
|
31 | {
|
32 | m = 0; |
33 | n = 0; |
34 | PORTB.4 = 0; |
35 | PORTC.2 = 0; |
36 | }
|
37 | if (PRO.7 && n == 1) |
38 | {
|
39 | m = 1; |
40 | PORTC.2 =1; |
41 | }
|
42 | |
43 | |
44 | |
45 | }//if(TMR1IF) |
46 | |
47 | int_restore_registers
|
48 | } // Interrupt-Routine zu ende |
49 | |
50 | |
51 | void main(void) // Hauptfunktion |
52 | {
|
53 | OSCCON.4 = 1; |
54 | OSCCON.5 = 1; |
55 | OSCCON.6 = 1; // 8MHz interne Taktung |
56 | |
57 | ANSEL = 0; |
58 | //nach dem Reset vom KG Steuergerät 1 vorimpuls, zwei Nullprotokolle
|
59 | PROTOCOL = 0b.1111.1111;// Grundzustand des Protokolls |
60 | PRO = PROTOCOL; |
61 | |
62 | TRISA = 0; |
63 | TRISB = 0; |
64 | TRISC = 0; |
65 | TMR1IF = 0; |
66 | T1OSCEN = 0; // Timerinitialisierungen für Interruptauslösung |
67 | TMR1CS = 0; |
68 | TMR1H = 240; |
69 | TMR1L = 220; |
70 | T1CKPS0=0; // Prescaler auf 8 einstellen |
71 | T1CKPS1=1; |
72 | TMR1ON = 1; |
73 | GIE = 1; |
74 | PEIE = 1; |
75 | TMR1IE =1; |
76 | TMR1IF = 0; |
77 | m = 0; |
78 | n = 0; |
79 | PORTB.6 = 1; |
80 | PORTB.5 = 0; |
81 | PORTC.1 = 1; // auf HI beim Reset |
82 | for (;;) |
83 | {}
|
84 | |
85 | }
|