![單片機(jī)多任務(wù)編程方法介紹_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/31/9d763678-5688-4c98-920c-69812ab9a883/9d763678-5688-4c98-920c-69812ab9a8831.gif)
![單片機(jī)多任務(wù)編程方法介紹_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/31/9d763678-5688-4c98-920c-69812ab9a883/9d763678-5688-4c98-920c-69812ab9a8832.gif)
![單片機(jī)多任務(wù)編程方法介紹_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/31/9d763678-5688-4c98-920c-69812ab9a883/9d763678-5688-4c98-920c-69812ab9a8833.gif)
![單片機(jī)多任務(wù)編程方法介紹_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/31/9d763678-5688-4c98-920c-69812ab9a883/9d763678-5688-4c98-920c-69812ab9a8834.gif)
![單片機(jī)多任務(wù)編程方法介紹_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/31/9d763678-5688-4c98-920c-69812ab9a883/9d763678-5688-4c98-920c-69812ab9a8835.gif)
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單片機(jī)多任務(wù)編程方法介紹單片機(jī)多任務(wù)編程方法介紹 Edan Lee Email edan lee QQ 284622554 前言前言 從事單片機(jī)學(xué)習(xí)和工作已有多年 多年下來對單片機(jī)開發(fā)有一 點自己的認(rèn)識 想將自己的積累和大家分享 應(yīng)該對初學(xué)者有一點 幫助 還有很多不足的地方 歡迎來函探討 因為文學(xué)功底不行所 以直接進(jìn)入主題 主體內(nèi)容主體內(nèi)容 本文的主要目的是介紹在沒有操作系統(tǒng)的多任務(wù)編程方法 所 有例子都以 51 單片機(jī)為基礎(chǔ) 內(nèi)容編排 1 多任務(wù)簡介 2 任務(wù)分拆 3 軟件定時器 4 系統(tǒng)架構(gòu) 5 例子 多任務(wù)簡介多任務(wù)簡介 對于單片機(jī)的多任務(wù)就是 CPU 處理多個任務(wù) 但是在同一個時 間 CPU 只能處理一個任務(wù) 在處理多任務(wù)的時候其實就是將 CPU 分 時復(fù)用 具體是在一個時間內(nèi)處理一個任務(wù) 在接下來的時間里處 理另一個任務(wù) 這個時間一般很短 在操作系統(tǒng)里就是指時間片 單片機(jī)因為資源少的原因很少會帶操作系統(tǒng)來工作 但是可以從多 任務(wù)的基本原本出發(fā)模擬操作系統(tǒng)的多任務(wù) 為了一個任務(wù)不會獨 占 CPU 就將任務(wù)分成 N 個小任務(wù) 劃分原則是在任務(wù)需要等待的 地方劃分 每次運(yùn)行到這個任務(wù)的時候 CPU 只執(zhí)行其中的一個或 者多個小任務(wù) 任務(wù)分拆任務(wù)分拆 在一個 LED 閃爍的小程序中原理是點亮 LED 延時 關(guān)閉 LED 延時 循環(huán) 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 主函數(shù) void main void LEDFlash 上例中的 LED 閃爍處理函數(shù)可以用一個進(jìn)程控制器 變量 將其 分成四個部分 void LEDFlash void static unsigned char step 0 進(jìn)程控制器 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 上例對于這個小程序來說變得復(fù)雜了點 step 就是將 LEDFlash 函數(shù)拆分成了 4 個小部分 每次進(jìn)入 LEDFlash 這個函數(shù)只執(zhí)行了一 個小部分 這是多任務(wù)編程的基礎(chǔ) 軟件定時器軟件定時器 在上例中的程序中加入另一個燈閃爍不同的頻率的時候就會出 現(xiàn)問題 因為當(dāng)執(zhí)行 Delay 時 CPU 不可以做其它的事情 為了解決這個問題就要引入定時器來處理延時 原理是程序判 斷定時是否到而決定是否往下執(zhí)行 那么上面的程序就變成 void LEDFlash void static unsigned char step 0 進(jìn)程控制器 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 硬件的定時器是有限的 為了可以使用更多的定時器就需要用 軟件定時器 具體就是用變量做累加或者遞減 和定時器計脈沖的 原理是一樣的 為了使軟件定時器更精準(zhǔn) 就可以對硬件定時器的 溢出次數(shù)計數(shù) 那軟件定時器的定時時間就是硬件定時器溢出時間 的整數(shù)倍 unsigned char Tim 2 兩個軟件定時器 void Time0Irq void interupt 1 Tim 0 Tim 1 例子就可以變成 void LEDFlash void static unsigned char step 0 進(jìn)程控制器 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 進(jìn)程控制器 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 經(jīng)過優(yōu)化后可以變成下面的形式 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 軟件定時器數(shù)量 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 進(jìn)程控制器 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)殖買賣的合同范本
- 2025企業(yè)年金基金托管合同范本
- 2025江蘇省建設(shè)工程造價咨詢合同(示范文本)
- 油罐安全合同范本
- 2025企業(yè)管理資料范本福建勞動合同范本
- 2025衢州市衢江區(qū)高家鎮(zhèn)湖仁村物業(yè)用房及廠房租賃合同
- 汽車貨物運(yùn)輸合同協(xié)議書
- 2025【合同范本】農(nóng)村土地承包合同
- 2025“誰造誰有”林地使用合同書
- 貨物運(yùn)輸合同協(xié)議書模板
- 工程造價咨詢服務(wù)方案(技術(shù)方案)
- 整體租賃底商運(yùn)營方案(技術(shù)方案)
- 常用藥物作用及副作用課件
- 小學(xué)生作文方格紙A4紙直接打印版
- 老人心理特征和溝通技巧
- 幼兒阿拉伯?dāng)?shù)字描紅(0-100)打印版
- 標(biāo)桿地產(chǎn)集團(tuán) 研發(fā)設(shè)計 工程管理 品質(zhì)地庫標(biāo)準(zhǔn)研發(fā)成果V1.0
- TMS開發(fā)業(yè)務(wù)需求文檔
- 2023年1月浙江高考英語聽力試題及答案(含MP3+錄音原文)
- HI-IPDV10芯片產(chǎn)品開發(fā)流程V10宣課件
- 房產(chǎn)抵押注銷申請表
評論
0/150
提交評論