單片機(jī)多任務(wù)編程方法介紹_第1頁
單片機(jī)多任務(wù)編程方法介紹_第2頁
單片機(jī)多任務(wù)編程方法介紹_第3頁
單片機(jī)多任務(wù)編程方法介紹_第4頁
單片機(jī)多任務(wù)編程方法介紹_第5頁
已閱讀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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論