SOGO論壇
  登入   註冊   找回密碼
查看: 2247|回覆: 1
列印 上一主題 下一主題

[技術文章] Keil C RTOS 的使用 [複製連結]

Rank: 4

數位軟體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2014-7-11 17:11:52 |只看該作者 |倒序瀏覽
本帖最後由 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 人評分威望 收起 理由
紅塵孤鳥 + 2 您發表的文章內容豐富,無私分享造福眾人,.

總評分: 威望 + 2   查看全部評分

喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 3Rank: 3

狀態︰ 離線
2
發表於 2014-7-23 21:07:17 |只看該作者
謝謝大大讓我受益良多
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-4-27 02:06

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部