SOGO論壇

標題: Keil C RTOS 的使用 [列印本頁]

作者: if8051    時間: 2014-7-11 17:11:52     標題: Keil C RTOS 的使用

本帖最後由 if8051 於 2014-7-12 08:46 編輯

單晶片微電腦 8051 使用 Keil C compiler 是很普遍的情形,但很奇怪!
明明 Keil C 有內建的 RTX51 Tiny Real-Time Operating System
許多人就是不會好好的利用,可能是老師沒有教,所以不會運用!
簡單好用的 RTOS 不會使用,如同自廢武功!
如今在此提供一個昨日完工的案子 source code 供參考。
若要使用 RTOS 需要變更設定



RTX51TNY.H

Prototypes for RTX51 Tiny Real-Time Operating System Version 2.02
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.



完整 source code 如下:
  1. #include <at89x52.h>                          
  2. #include <rtx51tny.h>

  3. void startProgram( ) _task_ 0                // 程式進入點
  4. {
  5.         EA=1;                                        // 開啟總中斷
  6.         ET2=1;                                        // IE bit 5   T2 overflow interrupt   控制   enable
  7.         TH2=(65536-16300)/256;                // 設定 T2 初始值
  8.         TL2=(65536-16300)%256;
  9.         RCAP2H=(65536-16300)/256;        // 16 bit Auto-Reload Mode
  10.         RCAP2L=(65536-16300)%256;        // 溢位發生 TF2 = 1    RCAP2H 及 RCAP2L 值,分別被載入 TH2 及 TL2
  11.         TR2=1;                                        // 啟動 T2 開始計時
  12.         WDTRST=0x1e;                                // WDE 啟動看門狗計時器
  13.         WDTRST=0xe1;                                // 14 bit    3FFF    16384 uS
  14.                                                         // 啟動之後就無法停止,除非硬體 RESET 或是 WDT RESET 自動開機       
  15.         os_create_task(1);                           // CPU monitor 2S clock
  16.         os_create_task(2);                        // 主程式
  17.         os_create_task(3);                        // counter
  18.         os_delete_task(0);                        // 結束此 task
  19. }

  20. void cpuMonitor( ) _task_ 1                           // CPU 監督程式
  21. {                                                        // 用於監控  軟體是否當機,硬體是否故障(常 Low )
  22.         while(1)
  23.         {
  24.                 P2_2=!P2_2;                          // P2.2     ON 1 秒     OFF 1 秒
  25.                 os_wait2(K_IVL,100);                // 每間隔 1 秒
  26.         }
  27. }

  28. void controlProgram( ) _task_ 2                // motor 控制主程式
  29. {
  30.         while(1)
  31.         {
  32.                 while(P1_0)                        // 機械原點
  33.                         P0_6=0;                        // motor CCW
  34.                 while(!P1_1);                        // 確定開關放開
  35.                 P0_6=1;               
  36.                 os_wait2(K_TMO,20);                // delay 0.2S
  37.                 while(P1_1)
  38.                         P0_5=0;                        // motor CW
  39.                 while(!P1_0);                        // 確定開關放開
  40.                 P0_5=1;
  41.                 os_wait2(K_TMO,20);                // delay 0.2S       
  42.                 os_send_signal(3);                // 送個信號給 task 3
  43.         }
  44. }

  45. void counter( ) _task_ 3                        // counter function
  46. {
  47.         while(1)
  48.         {
  49.                 os_wait1(K_SIG);               // 等待接收信號
  50.                 P0_4=0;
  51.                 os_wait2(K_TMO,30);                //delay 0.3S
  52.                 P0_4=1;
  53.         }
  54. }

  55. void watchdogTimerReset() interrupt 5        // T2 interrupt subrouting
  56. {                                                        // 當機超過  16300 uS  自動開機,避免死當
  57.         WDTRST=0x1e;                                // WDT 上數到  16300 uS   WatchDog Timer Reset
  58.         WDTRST=0xe1;                                // 未當機之前  WatchDog Timer Reset
  59.         TF2=0;                                        // 硬體不會自動清除,必須以軟體清除
  60. }
複製代碼


附件: 1.jpg (2014-7-11 17:03:37, 69.09 KB) / 下載次數 2
https://oursogo.com/forum.php?mod=attachment&aid=ODM2Mzg2NXw4OTcxMDVhZXwxNzMyNTI0OTAwfDB8MA%3D%3D

附件: 2.jpg (2014-7-11 17:05:07, 99.37 KB) / 下載次數 4
https://oursogo.com/forum.php?mod=attachment&aid=ODM2Mzg2Nnw3YjA1NGJlNXwxNzMyNTI0OTAwfDB8MA%3D%3D
作者: zaq1234    時間: 2014-7-23 21:07:17

謝謝大大讓我受益良多




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM