1 | /*********************************************************************
|
2 | Projekt: 10016
|
3 | Projekt von Simon Arndt
|
4 | Projekt DCF77 Auswerten
|
5 | *********************************************************************/
|
6 |
|
7 |
|
8 | //********************************************************************
|
9 | //* INCLUDES *
|
10 | //********************************************************************
|
11 | #include<p18cxxx.h>
|
12 |
|
13 |
|
14 | //********************************************************************
|
15 | //* GLOBALE VARIABLEN *
|
16 | //********************************************************************
|
17 | char TMR0_high=0;
|
18 | char TMR0_low=0;
|
19 | unsigned int TMR0_erg=0;
|
20 |
|
21 |
|
22 | //********************************************************************
|
23 | //* PORTB INITIALISIERUNG *
|
24 | //********************************************************************
|
25 |
|
26 | void PORTB_init(void)
|
27 | {
|
28 | TRISB = 16; //PORT-B-4 als Eingang Konfigurieren
|
29 | //INTCON2bits.RBPU = 0;
|
30 | LATB = 0;
|
31 | }
|
32 |
|
33 | //********************************************************************
|
34 | //* PORTD INITIALISIERUNG *
|
35 | //********************************************************************
|
36 |
|
37 | void PORTD_init(void)
|
38 | {
|
39 | TRISD = 0; //PORT D als Ausgang Konfigurieren
|
40 | LATD = 0; //Gesamten PORTD auf 0 (LED aus)
|
41 | }
|
42 |
|
43 | //********************************************************************
|
44 | //* TIMER-0 INITIALISIERUNG *
|
45 | //********************************************************************
|
46 |
|
47 | void TMR0_init(void)
|
48 | {
|
49 | T0CON = 0x87;
|
50 | TMR0H = 0x00;
|
51 | TMR0L = 0x00;
|
52 |
|
53 | T0CON = 0x97;
|
54 |
|
55 |
|
56 | }
|
57 |
|
58 | //********************************************************************
|
59 | //* TIMER-0 REGISTER SETZEN *
|
60 | //********************************************************************
|
61 |
|
62 | void TMR0_set(void)
|
63 | {
|
64 | TMR0H = 0x1B;
|
65 | TMR0L = 0x1D;
|
66 | }
|
67 |
|
68 | //********************************************************************
|
69 | //* INTERRUPT INITIALISIERUNG *
|
70 | //********************************************************************
|
71 |
|
72 | void Interrupt_init(void)
|
73 | {
|
74 | INTCON = 0;
|
75 | INTCONbits.GIE = 1;
|
76 | INTCONbits.RBIE = 1;
|
77 | }
|
78 |
|
79 | //********************************************************************
|
80 | //* INTERRUPT SERVICE ROUTINE *
|
81 | //********************************************************************
|
82 |
|
83 | #pragma /*interruptlow*/interrupthigh InterruptHandler
|
84 | void InterruptHandler (void)
|
85 | {
|
86 | INTCONbits.GIEH = 0;
|
87 |
|
88 | if (INTCONbits.RBIF == 1)
|
89 | {
|
90 | INTCONbits.RBIF = 0;
|
91 |
|
92 | LATDbits.LATD6 = 1;
|
93 |
|
94 | T0CON = 0x87;
|
95 |
|
96 | TMR0_low = TMR0L;
|
97 | TMR0_high = TMR0H;
|
98 |
|
99 | TMR0_set();
|
100 |
|
101 | T0CON = 0x97;
|
102 | }
|
103 |
|
104 | INTCONbits.GIEH = 1;
|
105 |
|
106 | }
|
107 |
|
108 | #pragma code _HIGH_INTERRUPT_VECTOR = 0x000008
|
109 | void _high_ISR (void)
|
110 | {
|
111 | _asm
|
112 | goto InterruptHandler // Sprung zur Interruptroutine
|
113 | _endasm
|
114 | }
|
115 |
|
116 | #pragma code _LOW_INTERRUPT_VECTOR = 0x000018
|
117 | void _low_ISR (void)
|
118 | {
|
119 | _asm
|
120 | goto InterruptHandler // Sprung zur Interruptroutine
|
121 | _endasm
|
122 | }
|
123 |
|
124 | //********************************************************************
|
125 | //* MAIN *
|
126 | //********************************************************************
|
127 |
|
128 | void main (void)
|
129 | {
|
130 | PORTB_init();
|
131 | PORTD_init();
|
132 | TMR0_init();
|
133 | Interrupt_init();
|
134 |
|
135 | while(1)
|
136 | {
|
137 | LATDbits.LATD6 = 0;
|
138 | TMR0_erg = 0x00;
|
139 |
|
140 | INTCONbits.GIEH = 0;
|
141 | TMR0_erg = TMR0_high;
|
142 | TMR0_erg = (TMR0_erg<<8) | TMR0_low;
|
143 | INTCONbits.GIEH = 1;
|
144 |
|
145 | if(TMR0_erg >= 10066 && TMR0_erg <= 11629)
|
146 | {
|
147 | LATDbits.LATD0 = 1;
|
148 | LATDbits.LATD1 = 0;
|
149 | }
|
150 |
|
151 | else if(TMR0_erg >= 13972 && TMR0_erg <= 15535)
|
152 | {
|
153 | LATDbits.LATD1 = 1;
|
154 | LATDbits.LATD0 = 0;
|
155 | }
|
156 |
|
157 | else if(INTCONbits.TMR0IF == 1)
|
158 | {
|
159 | LATDbits.LATD7 = 1;
|
160 | INTCONbits.TMR0IF = 0;
|
161 | }
|
162 |
|
163 | else
|
164 | {
|
165 | // LATD = 0;
|
166 | }
|
167 | }
|
168 |
|
169 | }
|