單片機(jī)多任務(wù)編程方法介紹_第1頁
單片機(jī)多任務(wù)編程方法介紹_第2頁
單片機(jī)多任務(wù)編程方法介紹_第3頁
單片機(jī)多任務(wù)編程方法介紹_第4頁
單片機(jī)多任務(wù)編程方法介紹_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(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 軟件定時(shí)器 4 系統(tǒng)架構(gòu) 5 例子 多任務(wù)簡介多任務(wù)簡介 對于單片機(jī)的多任務(wù)就是 CPU 處理多個(gè)任務(wù) 但是在同一個(gè)時(shí) 間 CPU 只能處理一個(gè)任務(wù) 在處理多任務(wù)的時(shí)候其實(shí)就是將 CPU 分 時(shí)復(fù)用 具體是在一個(gè)時(shí)間內(nèi)處理一個(gè)任務(wù) 在接下來的時(shí)間里處 理另一個(gè)任務(wù) 這個(gè)時(shí)間一般很短 在操作系統(tǒng)里就是指時(shí)間片 單片機(jī)因?yàn)橘Y源少的原因很少會(huì)帶操作系統(tǒng)來工作 但是可以從多 任務(wù)的基本原本出發(fā)模擬操作系統(tǒng)的多任務(wù) 為了一個(gè)任務(wù)不會(huì)獨(dú) 占 CPU 就將任務(wù)分成 N 個(gè)小任務(wù) 劃分原則是在任務(wù)需要等待的 地方劃分 每次運(yùn)行到這個(gè)任務(wù)的時(shí)候 CPU 只執(zhí)行其中的一個(gè)或 者多個(gè)小任務(wù) 任務(wù)分拆任務(wù)分拆 在一個(gè) LED 閃爍的小程序中原理是點(diǎn)亮 LED 延時(shí) 關(guān)閉 LED 延時(shí) 循環(huán) define LEDOn LED Port 0 define LEDOff LED Port 1 sbit LED Port P1 0 不精確延時(shí) void Delay unsigned int t while t LED 閃爍處理 void LEDFlash void LEDOn Delay 1000 LEDOff Delay 1000 主函數(shù) void main void LEDFlash 上例中的 LED 閃爍處理函數(shù)可以用一個(gè)進(jìn)程控制器 變量 將其 分成四個(gè)部分 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 上例對于這個(gè)小程序來說變得復(fù)雜了點(diǎn) step 就是將 LEDFlash 函數(shù)拆分成了 4 個(gè)小部分 每次進(jìn)入 LEDFlash 這個(gè)函數(shù)只執(zhí)行了一 個(gè)小部分 這是多任務(wù)編程的基礎(chǔ) 軟件定時(shí)器軟件定時(shí)器 在上例中的程序中加入另一個(gè)燈閃爍不同的頻率的時(shí)候就會(huì)出 現(xiàn)問題 因?yàn)楫?dāng)執(zhí)行 Delay 時(shí) CPU 不可以做其它的事情 為了解決這個(gè)問題就要引入定時(shí)器來處理延時(shí) 原理是程序判 斷定時(shí)是否到而決定是否往下執(zhí)行 那么上面的程序就變成 void LEDFlash void static unsigned char step 0 進(jìn)程控制器 switch step case 0 LEDOn step 定時(shí)器初始化 break case 1 if 定時(shí)未到 break step break case 2 LEDOff step 定時(shí)器初始化 break case 3 if 定時(shí)未到 break step 0 break 硬件的定時(shí)器是有限的 為了可以使用更多的定時(shí)器就需要用 軟件定時(shí)器 具體就是用變量做累加或者遞減 和定時(shí)器計(jì)脈沖的 原理是一樣的 為了使軟件定時(shí)器更精準(zhǔn) 就可以對硬件定時(shí)器的 溢出次數(shù)計(jì)數(shù) 那軟件定時(shí)器的定時(shí)時(shí)間就是硬件定時(shí)器溢出時(shí)間 的整數(shù)倍 unsigned char Tim 2 兩個(gè)軟件定時(shí)器 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 是延時(shí)的時(shí)間 break step break case 2 LEDOff step Tim 0 0 break case 3 if Tim 0 8 TL0 T0VALUE TMOD 0 x01 方式 1 16 位定時(shí)器 ET0 1 允許中斷 EA 1 TR0 1 起動(dòng)定時(shí)器 0 定時(shí)器 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í)器數(shù)量 define MAX T 2 軟件定時(shí)器 unsigned int Tim MAX T 定時(shí)器 0 初始化 void Tim0Init void TH0 T0VALUE 8 TL0 T0VALUE TMOD 0 x01 方式 1 16 位定時(shí)器 ET0 1 允許中斷 EA 1 TR0 1 起動(dòng)定時(shí)器 0 定時(shí)器 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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論