Rev 1746 Rev 1747
Line 1... Line 1...
1 #include "main.h" 1 #include "main.h"
2   2  
3 #case 3 #case
4   4  
-   5 #define REVERS 2 // 2*256 ms = 0,5 s
-   6 #define GO 117 // 117*256 ms = 30 s
-   7 #define GO_ZALUZIE 5 // 5*256 ms = 1,25 s
-   8  
5 #define S105A PIN_A0 9 #define S105A PIN_A0
6 #define R105AU PIN_A1 10 #define R110AU PIN_A1
7 #define R105AD PIN_A2 11 #define R110AD PIN_A2
8 #define S104A PIN_A3 12 #define S104A PIN_A3
9 #define R104AU PIN_A4 13 #define R104AU PIN_A4
10 #define R104AD PIN_A5 14 #define R104AD PIN_A5
11 #define R104BU PIN_A6 15 #define R104BU PIN_A6
12 #define R104BD PIN_A7 16 #define R104BD PIN_A7
Line 79... Line 83...
79 #define PIN_J5 31813 83 #define PIN_J5 31813
80 #define PIN_J6 31814 84 #define PIN_J6 31814
81 #define PIN_J7 31815 85 #define PIN_J7 31815
82 */ 86 */
83   87  
-   88 #bit CREN = 0xFAB.4 // USART enable register
-   89  
84 #define LED1 PIN_J7 90 #define LED1 PIN_J7
85 #define LED2 PIN_J6 91 #define LED2 PIN_J6
86   92  
87 #define ON(port) output_low(port); 93 #define ON(port) output_low(port);
88 #define OFF(port) output_high(port); 94 #define OFF(port) output_high(port);
89   95  
90 typedef enum {UP, DOWN, NOTHING} request; 96 typedef enum {GO_UP, GO_DOWN, REVERS_UP, REVERS_DOWN, STOP} state;
-   97  
-   98 state r103A, r110A, r104A, r104B; // Stavy rolet
-   99 int8 tr103A, tr110A, tr104A, tr104B; // Casovace rolet
-   100  
-   101 #int_TIMER0
-   102 void TIMER0_isr(void)
-   103 {
-   104 if(tr103A>0) tr103A--;
-   105 if(tr110A>0) tr110A--;
-   106 if(tr104A>0) tr104A--;
-   107 if(tr104B>0) tr104B--;
-   108 output_toggle(LED2);
-   109 }
-   110  
-   111 void up(state *status, int8 *timer) // Zmena stavu rolety smer nahoru
-   112 {
-   113 switch (*status)
-   114 {
-   115 case STOP:
-   116 case GO_DOWN:
-   117 *status=REVERS_UP;
-   118 *timer=REVERS;
-   119 break;
-   120 case REVERS_UP:
-   121 case GO_UP:
-   122 *status=STOP;
-   123 *timer=0;
-   124 break;
-   125 }
-   126 }
-   127  
-   128 void down(state *status, int8 *timer) // Zmena stavu rolety smer dolu
-   129 {
-   130 switch (*status)
-   131 {
-   132 case STOP:
-   133 case GO_UP:
-   134 *status=REVERS_DOWN;
-   135 *timer=REVERS;
-   136 break;
-   137 case REVERS_DOWN:
-   138 case GO_DOWN:
-   139 *status=STOP;
-   140 *timer=0;
-   141 break;
-   142 }
-   143 }
-   144  
-   145 #define run(x) { \
-   146 switch(r##x) \
-   147 { \
-   148 case STOP: \
-   149 OFF(R##x##U); \
-   150 OFF(R##x##D); \
-   151 break; \
-   152 case GO_UP: \
-   153 ON(R##x##U); \
-   154 OFF(R##x##D); \
-   155 if(tr##x==0) {r##x=STOP;} \
-   156 break; \
-   157 case GO_DOWN: \
-   158 OFF(R##x##U); \
-   159 ON(R##x##D); \
-   160 if(tr##x==0) {r##x=STOP;} \
-   161 break; \
-   162 case REVERS_UP: \
-   163 OFF(R##x##U); \
-   164 OFF(R##x##D); \
-   165 if(tr##x==0) {r##x=GO_UP; tr##x=GO;} \
-   166 break; \
-   167 case REVERS_DOWN: \
-   168 OFF(R##x##U); \
-   169 OFF(R##x##D); \
-   170 if(tr##x==0) {r##x=GO_DOWN; tr##x=GO;} \
-   171 break; \
-   172 } \
-   173 }
91   174  
92 void main() 175 void main()
93 { 176 {
94 char c; 177 char c;
95 178
Line 98... Line 181...
98 setup_adc_ports(NO_ANALOGS|VSS_VDD); 181 setup_adc_ports(NO_ANALOGS|VSS_VDD);
99 setup_adc(ADC_CLOCK_DIV_2); 182 setup_adc(ADC_CLOCK_DIV_2);
100 setup_psp(PSP_DISABLED); 183 setup_psp(PSP_DISABLED);
101 setup_spi(SPI_SS_DISABLED); 184 setup_spi(SPI_SS_DISABLED);
102 setup_wdt(WDT_ON); 185 setup_wdt(WDT_ON);
103 setup_timer_0(RTCC_INTERNAL); 186 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
104 setup_timer_1(T1_DISABLED); 187 setup_timer_1(T1_DISABLED);
105 setup_timer_2(T2_DISABLED,0,1); 188 setup_timer_2(T2_DISABLED,0,1);
106 setup_timer_3(T3_DISABLED|T3_DIV_BY_1); 189 setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
107 setup_ccp1(CCP_OFF); 190 setup_ccp1(CCP_OFF);
108 setup_comparator(NC_NC_NC_NC); 191 setup_comparator(NC_NC_NC_NC);
109 setup_vref(FALSE); 192 setup_vref(FALSE);
110 193
111 OFF(S105A); 194 OFF(S105A); // Vsechno zhasni a zastav
112 OFF(R105AU); 195 OFF(R110AU);
113 OFF(R105AD); 196 OFF(R110AD);
114 OFF(S104A); 197 OFF(S104A);
115 OFF(R104AU); 198 OFF(R104AU);
116 OFF(R104AD); 199 OFF(R104AD);
117 OFF(R104BU); 200 OFF(R104BU);
118 OFF(R104BD); 201 OFF(R104BD);
Line 127... Line 210...
127 OFF(S102A); 210 OFF(S102A);
128 OFF(S110C); 211 OFF(S110C);
129 OFF(S108A); 212 OFF(S108A);
130 OFF(S201A); 213 OFF(S201A);
131 OFF(S110B); 214 OFF(S110B);
-   215  
-   216 r103A=STOP; // Rolety jsou zastaveny
-   217 r110A=STOP;
-   218 r104A=STOP;
-   219 r104B=STOP;
-   220  
-   221 enable_interrupts(INT_TIMER0);
-   222 enable_interrupts(GLOBAL);
132 } 223 }
133 224
-   225 CREN=0; CREN=1; // Reinitialise USART
-   226
134 while(TRUE) 227 while(TRUE)
135 { 228 {
136 if(kbhit()) 229 if(kbhit())
137 { 230 {
138 c=getc(); 231 c=getc();
139 if(c=='S') 232 if(c=='S')
140 { 233 {
141 getc(); -  
142 switch(getc()) 234 if(getc()=='1')
143 { 235 {
-   236 switch(getc())
-   237 {
144 case '1': 238 case '1':
145 output_toggle(S101A); 239 output_toggle(S101A);
146 break; 240 break;
147 case '2': 241 case '2':
148 output_toggle(S102A); 242 output_toggle(S102A);
149 break; 243 break;
150 case '3': 244 case '3':
151 output_toggle(S103A); 245 output_toggle(S103A);
152 break; 246 break;
153 case '4': 247 case '4':
154 output_toggle(S104A); 248 output_toggle(S104A);
155 break; 249 break;
156 case '5': 250 case '5':
157 c=getc(); 251 c=getc();
158 if(c=='A') {output_toggle(S105A);} 252 if(c=='A') {output_toggle(S105A);}
159 if(c=='D') {output_toggle(S105D);} 253 if(c=='D') {output_toggle(S105D);}
160 break; 254 break;
161 case '6': 255 case '6':
162 output_toggle(S106A); 256 output_toggle(S106A);
163 break; 257 break;
164 case '7': 258 case '7':
165 output_toggle(S107A); 259 output_toggle(S107A);
166 break; 260 break;
167 case '8': 261 case '8':
168 output_toggle(S108A); 262 output_toggle(S108A);
169 break; 263 break;
170 case '9': 264 case '9':
171 output_toggle(S109A); 265 output_toggle(S109A);
172 break; 266 break;
173 case 'a': 267 case 'a':
174 output_toggle(S110B); 268 output_toggle(S110B);
175 output_toggle(S110C); 269 output_toggle(S110C);
176 break; 270 break;
-   271 }
177 } 272 }
178 } 273 }
179 274
180 if(c=='R') 275 if(c=='R')
181 { 276 {
182 getc(); -  
183 switch(getc()) 277 if(getc()=='1')
184 { 278 {
185 case '3': 279 switch(getc())
186 getc(); 280 {
187 c=getc(); 281 case '3':
188 if((c=='U')) {}; 282 getc(); // A
-   283 if((getc()=='U')) {up(&r103A,&tr103A);} else {down(&r103A,&tr103A);}
189 break; 284 break;
190 case '4': 285 case '4':
191 c=getc(); 286 c=getc();
192 if(c=='A') {}; 287 if(c=='A') if((getc()=='U')) {up(&r104A,&tr104A);} else {down(&r104A,&tr104A);}
193 if(c=='B') {}; 288 if(c=='B') if((getc()=='U')) {up(&r104B,&tr104B);} else {down(&r104B,&tr104B);}
194 break; 289 break;
195 case '5': 290 case 'a':
196 getc(); 291 getc(); // A
-   292 if((getc()=='U')) {up(&r110A,&tr110A);} else {down(&r110A,&tr110A);}
197 getc(); 293 break;
198 break; 294 }
199 } 295 }
200 } 296 }
-   297  
201 output_toggle(LED1); 298 output_toggle(LED1); // Prijmuli jsme cely prikaz
202 } 299 }
203 else 300 else
204 { 301 {
-   302 run(103A);
-   303 run(104A);
-   304 run(104B);
-   305  
-   306 switch(r110A)
-   307 {
-   308 case STOP:
-   309 OFF(R110AU);
-   310 OFF(R110AD);
-   311 break;
-   312 case GO_UP:
-   313 ON(R110AU);
-   314 OFF(R110AD);
-   315 if(tr110A==0) {r110A=STOP;}
-   316 break;
-   317 case GO_DOWN:
-   318 OFF(R110AU);
-   319 ON(R110AD);
-   320 if(tr110A==0) {r110A=STOP;}
-   321 break;
-   322 case REVERS_UP:
-   323 OFF(R110AU);
-   324 OFF(R110AD);
-   325 if(tr110A==0) {r110A=GO_UP; tr110A=GO_ZALUZIE;}
-   326 break;
-   327 case REVERS_DOWN:
-   328 OFF(R110AU);
-   329 OFF(R110AD);
-   330 if(tr110A==0) {r110A=GO_DOWN; tr110A=GO_ZALUZIE;}
-   331 break;
-   332 }
-   333 /*
-   334 switch(r110A)
-   335 {
-   336 case GO_UP:
-   337 printf("U");
-   338 break;
-   339 case GO_DOWN:
-   340 printf("D");
-   341 break;
-   342 case REVERS_UP:
-   343 printf("R");
-   344 break;
-   345 case REVERS_DOWN:
-   346 printf("E");
-   347 break;
-   348 case STOP:
-   349 printf("S");
-   350 break;
-   351 }
-   352 */
205 restart_wdt(); 353 restart_wdt();
206 } 354 }
207 } 355 }
208 } 356 }