




已閱讀5頁,還剩15頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單片機多任務編程方法介紹單片機多任務編程方法介紹 Edan Lee Email edan lee QQ 284622554 前言前言 從事單片機學習和工作已有多年 多年下來對單片機開發有一 點自己的認識 想將自己的積累和大家分享 應該對初學者有一點 幫助 還有很多不足的地方 歡迎來函探討 因為文學功底不行所 以直接進入主題 主體內容主體內容 本文的主要目的是介紹在沒有操作系統的多任務編程方法 所 有例子都以 51 單片機為基礎 內容編排 1 多任務簡介 2 任務分拆 3 軟件定時器 4 系統架構 5 例子 多任務簡介多任務簡介 對于單片機的多任務就是 CPU 處理多個任務 但是在同一個時 間 CPU 只能處理一個任務 在處理多任務的時候其實就是將 CPU 分 時復用 具體是在一個時間內處理一個任務 在接下來的時間里處 理另一個任務 這個時間一般很短 在操作系統里就是指時間片 單片機因為資源少的原因很少會帶操作系統來工作 但是可以從多 任務的基本原本出發模擬操作系統的多任務 為了一個任務不會獨 占 CPU 就將任務分成 N 個小任務 劃分原則是在任務需要等待的 地方劃分 每次運行到這個任務的時候 CPU 只執行其中的一個或 者多個小任務 任務分拆任務分拆 在一個 LED 閃爍的小程序中原理是點亮 LED 延時 關閉 LED 延時 循環 define LEDOn LED Port 0 define LEDOff LED Port 1 sbit LED Port P1 0 不精確延時 void Delay unsigned int t while t LED 閃爍處理 void LEDFlash void LEDOn Delay 1000 LEDOff Delay 1000 主函數 void main void LEDFlash 上例中的 LED 閃爍處理函數可以用一個進程控制器 變量 將其 分成四個部分 void LEDFlash void static unsigned char step 0 進程控制器 switch step case 0 LEDOn step break case 1 Delay 1000 step break case 2 LEDOff step break case 3 Delay 1000 step 0 break 上例對于這個小程序來說變得復雜了點 step 就是將 LEDFlash 函數拆分成了 4 個小部分 每次進入 LEDFlash 這個函數只執行了一 個小部分 這是多任務編程的基礎 軟件定時器軟件定時器 在上例中的程序中加入另一個燈閃爍不同的頻率的時候就會出 現問題 因為當執行 Delay 時 CPU 不可以做其它的事情 為了解決這個問題就要引入定時器來處理延時 原理是程序判 斷定時是否到而決定是否往下執行 那么上面的程序就變成 void LEDFlash void static unsigned char step 0 進程控制器 switch step case 0 LEDOn step 定時器初始化 break case 1 if 定時未到 break step break case 2 LEDOff step 定時器初始化 break case 3 if 定時未到 break step 0 break 硬件的定時器是有限的 為了可以使用更多的定時器就需要用 軟件定時器 具體就是用變量做累加或者遞減 和定時器計脈沖的 原理是一樣的 為了使軟件定時器更精準 就可以對硬件定時器的 溢出次數計數 那軟件定時器的定時時間就是硬件定時器溢出時間 的整數倍 unsigned char Tim 2 兩個軟件定時器 void Time0Irq void interupt 1 Tim 0 Tim 1 例子就可以變成 void LEDFlash void static unsigned char step 0 進程控制器 switch step case 0 LEDOn step Tim 0 0 break case 1 if Tim 0 x x 是延時的時間 break step break case 2 LEDOff step Tim 0 0 break case 3 if Tim 0 8 TL0 T0VALUE TMOD 0 x01 方式 1 16 位定時器 ET0 1 允許中斷 EA 1 TR0 1 起動定時器 0 定時器 0 中斷處理 void Time0Irq void interrupt 1 unsigned char i TH0 T0VALUE 8 TL0 T0VALUE for i 0 i Tim 0 break step break case 2 LED0Off step Tim 0 0 break case 3 if MS 500 Tim 0 break step 0 break 每秒閃 5 2 次 void LED1Flash void static unsigned char step 0 進程控制器 switch step case 0 LED1On step Tim 1 0 break case 1 if MS 200 Tim 1 break step break case 2 LED1Off step Tim 1 0 break case 3 if MS 200 Tim 1 break step 0 break void main void Tim0Init while 1 LED0Flash LED1Flash 經過優化后可以變成下面的形式 include define T0VALUE 65536 1000000 200 5ms define LED0On LED0 0 define LED0Off LED0 1 define LED1On LED1 0 define LED1Off LED1 1 define S 1 200 define S 2 400 sbit LED0 P1 0 sbit LED1 P1 1 軟件定時器數量 define MAX T 2 軟件定時器 unsigned int Tim MAX T 定時器 0 初始化 void Tim0Init void TH0 T0VALUE 8 TL0 T0VALUE TMOD 0 x01 方式 1 16 位定時器 ET0 1 允許中斷 EA 1 TR0 1 起動定時器 0 定時器 0 中斷處理 void Time0Irq void interrupt 1 unsigned char i TH0 T0VALUE 8 TL0 T0VALUE for i 0 i Tim 0 break step break endif case 2 LED0Off step 0 Tim 0 S 1 break if 0 case 3 if S 1 Tim 0 break step 0 break endif 間隔兩秒閃爍 void LED1Flash void static unsigned char step 0 進程控制器 if 0 Tim 1 return switch step case 0 LED1On step 2 Tim 1 S 2 break if 0 case 1 if S 2 Tim 1 b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國加密貨幣ATM行業市場全景分析及前景機遇研判報告
- 設計現金管理管理制度
- 評估機構業務管理制度
- 診所污水污物管理制度
- 試劑供應應急管理制度
- 財務管理薪金管理制度
- 財政加強日常管理制度
- 賬戶開銷風險管理制度
- 貨源倉庫現場管理制度
- 貨車進廠閉環管理制度
- Unit2HealthylifestyleProjectDoahealthsurvey教學設計高中英語人教版選擇性
- 2024年山西省中考歷史試題卷(含答案解析)
- 2024年中考地理模擬試題(共6套有答案)
- 江蘇省蘇州市2024-2025學年高一歷史下學期期末考試試題含解析
- 安徽省馬鞍山市2024-2025學年高一生物下學期期末考試試題
- 蔬菜農藥殘留檢測合同
- YY 0117.1-2024外科植入物骨關節假體鍛、鑄件第1部分:Ti6Al4V鈦合金鍛件
- 勞務施工合同協議書范本(2024版)
- 任務6.4 IBP盤認知與操作課件講解
- 2024年首屆全國“紅旗杯”班組長大賽考試題庫800題(含答案)
- JT-T-891-2014道路車輛清障救援操作規范
評論
0/150
提交評論