?? plc51x.lst
字號:
314 2 if ((Ia & 0x8000) == 0) //先送高bit位數據
315 2 { HC595_SDATA = 0; }
316 2 else //送74HC595的數據
317 2 { HC595_SDATA = 1; }
318 2 Time_10ms();
319 2 Ia <<= 1;
320 2 HC595_SCLK = 1; //拉高74HC595時鐘
321 2 Time_10ms();
322 2 }
323 1 HC595_SDATA = 1; //釋放數據總線
324 1 Time_10ms();
325 1 HC595_RCLK = 0; //鎖存數據
326 1 Time_10ms();
327 1 HC595_RCLK = 1;
328 1 Time_10ms();
329 1 }
330
331 //-------------------------------------------------------------------------------------//
332 // 100ms 定時子函數 //
333 //-------------------------------------------------------------------------------------//
334
335 void _T100mS(void)
336 { unsigned char i;
337 1 if (Timer_100ms != 0)
338 1 { Timer_100ms--;
339 2 Pulse_val_Sec++;
340 2 if (Pulse_val_Sec == 5)
341 2 { Pulse_Sec = ~Pulse_Sec;
342 3 }
343 2 if (Pulse_val_Sec == 10)
344 2 { Pulse_Sec = ~Pulse_Sec;
345 3 Pulse_val_Min++;
346 3 Pulse_val_Sec = 0;
347 3 }
348 2 for (i=0; i<_T_num; i++ )
349 2 { if ((rTF[i/8].BYTE & (1 << (i%8))) != 0)
350 3 { if (_T[i][0] < _T[i][1]) { _T[i][0]++; }
351 4 }
352 3 }
353 2 }
354 1 }
355
356 //-------------------------------------------------------------------------------------//
357 // 1Set 定時子函數 //
358 //-------------------------------------------------------------------------------------//
359
360 void _T1Set(void)
361 { if ((Pulse_val_Min == 30) && (Pulse_val_Sec == 0))
362 1 { Pulse_Min = ~Pulse_Min;
363 2 }
364 1 if ((Pulse_val_Min == 60) && (Pulse_val_Sec == 0))
365 1 { Pulse_Min = ~Pulse_Min;
C51 COMPILER V8.16 PLC51X 10/10/2009 14:43:40 PAGE 7
366 2 Pulse_val_Min = 0;
367 2 }
368 1 }
369
370 //-------------------------------------------------------------------------------------//
371 // 5ms 定時中斷 子函數,使用定時器 0 //
372 //-------------------------------------------------------------------------------------//
373
374 void timer0(void) interrupt 1 using 1
375 { TH0 = (Value_T0_cons >> 8);
376 1 Pulse_10ms = ~Pulse_10ms;
377 1 if ((++Timer_5ms & 0x01) != 0) { Timer_10ms++; }
378 1 if (Timer_5ms == 10) { Pulse_100ms = ~Pulse_100ms; }
379 1 if (Timer_5ms == 20)
380 1 { Pulse_100ms = ~Pulse_100ms;
381 2 Timer_100ms++;
382 2 Timer_5ms = 0;
383 2 }
384 1 if(UartRxTimerStartFlag) // 接收超時...50ms
385 1 { if(UartWaitForCounter>=10)
386 2 { UartWaitForCounter=0;
387 3 UartRxTimerStartFlag=0;
388 3 UartDataReadyFlag=1;
389 3 REN=0; // 禁止UART接收器
390 3 }
391 2 else UartWaitForCounter++;
392 2 }
393 1 }
394
395
396 //-------------------------------------------------------------------------------------//
397 // 初始化,輸入輸出,內存處理 子函數 //
398 //-------------------------------------------------------------------------------------//
399 void input_IO(void) // X輸入,Y輸出刷新
400 { unsigned char i;
401 1 i = P2;
402 1 i = ((i << 1) & 0xaa) | ((i >> 1) & 0x55);
403 1 i = ((i << 2) & 0xcc) | ((i >> 2) & 0x33);
404 1 rX[0].BYTE = ~((P1 & 0x0f) | (i & 0xf0));
405 1 rX[1].BYTE = ~(i & 0x0f) & 0x0f;
406 1 rX[2].BYTE = ~Get_EX_BIT();
407 1 P0 = rY[0].BYTE;
408 1 Out_EY_BIT();
409 1 _M8011_ = Pulse_10ms;
410 1 _M8012_ = Pulse_100ms;
411 1 _M8013_ = Pulse_Sec;
412 1 _M8014_ = Pulse_Min;
413 1 }
414
415 void reset_IO(void) // I,O口初始化
416 { P0M0 = 0x00;
417 1 P0M1 = 0xff;
418 1 P0 = 0x00;
419 1 P1 = 0xff;
420 1 P2 = 0xff;
421 1 P3 = 0xff;
422 1 Value = 0; // 變頻顯示器LED顯示緩沖區
423 1 Va0 = 0; // 變頻顯示器F/R指示顯示緩沖區
424 1 Va1 = 0; // 變頻顯示器 Hz指示顯示緩沖區
425 1 Va2 = 0; // 變頻顯示器 V 指示顯示緩沖區
426 1 Va3 = 0; // 變頻顯示器 A 指示顯示緩沖區
427 1 Va4 = 0; // 變頻顯示器RUN指示顯示緩沖區
C51 COMPILER V8.16 PLC51X 10/10/2009 14:43:40 PAGE 8
428 1 Vb0 = 0; // 變頻顯示器LED個位小數點顯示緩沖區
429 1 Vb1 = 0; // 變頻顯示器LED十位小數點顯示緩沖區
430 1 Vb2 = 0; // 變頻顯示器LED百位小數點顯示緩沖區
431 1 Vb3 = 0; // 變頻顯示器LED千位小數點顯示緩沖區
432 1 Vc0 = 0; // 變頻顯示器LED個位數熄滅標志
433 1 Vc1 = 0; // 變頻顯示器LED十位數熄滅標志
434 1 Vc2 = 0; // 變頻顯示器LED百位數熄滅標志
435 1 Vc3 = 0; // 變頻顯示器LED千位數熄滅標志
436 1 }
437
438 void reset_M8xxx(void) // RUN 后輸出一個掃描周期初始化
439 { rM8xxx[0].BYTE = 0x09;
440 1 }
441
442 void reset_RAM(void)
443 { unsigned char i;
444 1 for (i=0; i<_T_num; i++) { _T[i][0] = 0; }
445 1 for (i=0; i<_T_num; i++) { _T[i][1] = 0x7fff; }
446 1 for (i=0; i<_C_num; i++) { _C[i] = 0; }
447 1 for (i=0; i<_T_BYTE; i++) { rT[i].BYTE = 0; rT1[i].BYTE = 0; rTF[i].BYTE = 0; }
448 1 for (i=0; i<_C_BYTE; i++) { rC[i].BYTE = 0; rT1[i].BYTE = 0; rCF[i].BYTE = 0; }
449 1 for (i=0; i<_Y_BYTE; i++) { rY[i].BYTE = 0; rY1[i].BYTE = 0; }
450 1 for (i=0; i<_M_BYTE; i++) { rM[i].BYTE = 0; rM1[i].BYTE = 0; }
451 1 for (i=0; i<_S_BYTE; i++) { rS[i].BYTE = 0; rS1[i].BYTE = 0; }
452 1 for (i=0; i<_M8xxx_BYTE; i++) { rM8xxx[i].BYTE = 0; rM8xxx1[i].BYTE = 0; }
453 1 rM8xxx[0].BYTE = 0x05;
454 1 rM8xxx1[0].BYTE = 0x05;
455 1 Timer_5ms = 0; // 5ms時基計數器,5ms Timer0中斷計數
456 1 Timer_10ms = 0; // 10ms時基計數器,5ms Timer0中斷計數
457 1 Timer_100ms = 0; // 100ms時基計數器,5ms Timer0中斷計數
458 1 Pulse_val_Sec = 0; // 1s時基計數器
459 1 Pulse_val_Min = 0; // 1min時基計數器
460 1 CODE_ERROR = 0;
461 1 input_IO();
462 1 for (i=0; i<_X_BYTE; i++) { rX1[i].BYTE = rX[i].BYTE; }
463 1 }
464
465 void reset_interrupt(void)
466 { IP = 0x00;
467 1 IE = 0x00;
468 1 TCON = 0x00; // 定時器控制寄存器, 注意:TCON只需操作一次
469 1 TMOD = 0x01;
470 1 T0 = Value_T0_cons; // 裝入5ms Timer0中斷常數
471 1 PT0 = 1;
472 1 ET0 = 1;
473 1 TR0 = 1;
474 1 }
475
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -