




已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀
版權(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ā)有一 點(diǎn)自己的認(rèn)識 想將自己的積累和大家分享 應(yīng)該對初學(xué)者有一點(diǎn) 幫助 還有很多不足的地方 歡迎來函探討 因?yàn)槲膶W(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ù)的時候其實(shí)就是將 CPU 分 時復(fù)用 具體是在一個時間內(nèi)處理一個任務(wù) 在接下來的時間里處 理另一個任務(wù) 這個時間一般很短 在操作系統(tǒng)里就是指時間片 單片機(jī)因?yàn)橘Y源少的原因很少會帶操作系統(tǒng)來工作 但是可以從多 任務(wù)的基本原本出發(fā)模擬操作系統(tǒng)的多任務(wù) 為了一個任務(wù)不會獨(dú) 占 CPU 就將任務(wù)分成 N 個小任務(wù) 劃分原則是在任務(wù)需要等待的 地方劃分 每次運(yùn)行到這個任務(wù)的時候 CPU 只執(zhí)行其中的一個或 者多個小任務(wù) 任務(wù)分拆任務(wù)分拆 在一個 LED 閃爍的小程序中原理是點(diǎn)亮 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ù)雜了點(diǎn) step 就是將 LEDFlash 函數(shù)拆分成了 4 個小部分 每次進(jìn)入 LEDFlash 這個函數(shù)只執(zhí)行了一 個小部分 這是多任務(wù)編程的基礎(chǔ) 軟件定時器軟件定時器 在上例中的程序中加入另一個燈閃爍不同的頻率的時候就會出 現(xiàn)問題 因?yà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 硬件的定時器是有限的 為了可以使用更多的定時器就需要用 軟件定時器 具體就是用變量做累加或者遞減 和定時器計(jì)脈沖的 原理是一樣的 為了使軟件定時器更精準(zhǔn) 就可以對硬件定時器的 溢出次數(shù)計(jì)數(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025電視劇廣告贊助合作合同
- 浙江省寧波市2023-2024學(xué)年高一9月第一次階段考試生物 無答案
- 教研學(xué)期工作部署計(jì)劃
- 秋季教學(xué)評價標(biāo)準(zhǔn)計(jì)劃
- 挖掘員工潛力與創(chuàng)新能力計(jì)劃
- 2023屆四川省瀘州市瀘縣一中高三二模語文試題 含解析
- 2025-2030中國獸醫(yī)醫(yī)藥藥品行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 加強(qiáng)數(shù)字資源的開發(fā)與利用計(jì)劃
- 數(shù)據(jù)驅(qū)動的決策制定計(jì)劃
- 急救隊(duì)伍值班輪崗計(jì)劃
- 期中模擬卷(新疆專用)-2024-2025學(xué)年八年級英語下學(xué)期核心素養(yǎng)素質(zhì)調(diào)研模擬練習(xí)試題(考試版)A4
- 甲狀旁腺切除術(shù)后的護(hù)理措施
- 2024慢性鼻竇炎診斷和治療指南解讀課件
- (T8聯(lián)考)2025屆高三部分重點(diǎn)中學(xué)3月聯(lián)合測評生物試卷(含答案詳解)河北版
- 員工入職申請表(完整版)
- T-GDEIIA 56-2024 垂直起降低空航空器起降場基礎(chǔ)設(shè)施配置技術(shù)要求
- 整本書閱讀《林海雪原》【知識精研】六年級語文下冊 (統(tǒng)編版五四制2024)
- 9《我的戰(zhàn)友邱少云》說課稿-2024-2025學(xué)年六年級語文上冊統(tǒng)編版
- 亞朵酒店前臺培訓(xùn)
- 大學(xué)假期安全主題班會課件
- 創(chuàng)業(yè)培訓(xùn)講師手冊
評論
0/150
提交評論