版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、51單片機(jī)匯編版的多任務(wù)實(shí)時(shí) 操作系統(tǒng)51單片機(jī)匯編版的多任務(wù)實(shí)時(shí)操作系統(tǒng)一個(gè)CPU核心是不可能同時(shí)處理多條指令的,只能是一 條一條的順序執(zhí)行。如果我們需要同時(shí)執(zhí)行多個(gè)任務(wù),但又 不能等一個(gè)任務(wù)執(zhí)行完了再執(zhí)行下一個(gè)任務(wù),有的任務(wù)還需 要等待一個(gè)信號(hào)觸發(fā)才能往下執(zhí)行,信號(hào)遲遲未來(lái)那就什么 也做不了了 ! !操作系統(tǒng)的出現(xiàn),就是為了解決這一問(wèn)題的。它的功能就是能讓CPU “同時(shí)處理多個(gè)任務(wù),當(dāng)然不是真 正的同時(shí),它只是把這些任務(wù)的分成不同的時(shí)間段來(lái)處理, 每個(gè)任務(wù)只執(zhí)行很短的的時(shí)間(只執(zhí)行一部分指令),然后 保存斷點(diǎn)就切換到下一個(gè)任務(wù)的指令去執(zhí)行,同樣只執(zhí)行很 短的的時(shí)間(只執(zhí)行一部分指令),再保
2、存斷點(diǎn)切換任務(wù)。等所有的任務(wù)都執(zhí)行一次后再回來(lái)從斷點(diǎn)處繼續(xù)執(zhí)行,時(shí)間 到,再保存斷點(diǎn)切換任務(wù),如此反復(fù)。因?yàn)镃PU的頻率高, 所以完成一次循環(huán)的時(shí)間極短,51單片機(jī)的頻率一般40MHz以?xún)?nèi),所需時(shí)間是ms、us級(jí)的,電腦的主頻是GHz 級(jí)別的,那更不用說(shuō),這樣短的時(shí)間對(duì)于我們來(lái)說(shuō)就是同時(shí) 的。學(xué)過(guò)C51的大都知道RTX51,它是單片機(jī)實(shí)時(shí)多任務(wù)系 統(tǒng),是kill51自帶的,但是還有很多匯編爰好者不能使用它, 因?yàn)樗荂語(yǔ)言的。為此本人設(shè)計(jì)了兩個(gè)個(gè)簡(jiǎn)單的匯編語(yǔ)言 版的多任務(wù)實(shí)時(shí)系統(tǒng),專(zhuān)為匯編爰好者提供一個(gè)參考。高手 勿噴!本程序使用定時(shí)器中斷的方法產(chǎn)生時(shí)間輪片,每個(gè)任務(wù)分配在一個(gè)時(shí)間輪片上。如
3、果一個(gè)時(shí)間輪片(定時(shí)器的時(shí)間)是250us,那每個(gè)任務(wù)執(zhí)行一次的時(shí)間就是250us(因?yàn)槿蝿?wù)切換的時(shí)間極短,所以里省略了);有4個(gè)任務(wù)要執(zhí)行,那么系統(tǒng)完成一次 循環(huán)的時(shí)間是250*4=1000us=lmso即先執(zhí)行任務(wù)一 250us ,然后保存任務(wù)一的斷 點(diǎn),切換到任務(wù)二執(zhí)行250us ,再保存任務(wù)二的斷點(diǎn),切換到任務(wù)三執(zhí)行250us ,接 著保存任務(wù)三的斷點(diǎn),切換到任務(wù)四執(zhí)行250us ,保存任務(wù)四的斷點(diǎn),再次切到任務(wù) 一斷點(diǎn)處繼續(xù)往下執(zhí)行250US ,再保存再切換到下一個(gè)任務(wù)的斷點(diǎn)處執(zhí)行,照此循環(huán)。 所以這些任務(wù)并不是同lus內(nèi)完成的,而是同1ms內(nèi)完成的,當(dāng)然更是同時(shí)同分同秒 完成的。程
4、序只是個(gè)演示程序,功能的開(kāi)發(fā)看個(gè)人要求而定!輕量四任務(wù)實(shí)時(shí)系統(tǒng)ORG 0000HRWl.SP DATA 20H;任務(wù)堆棧指針位置寄存器RW2_SP DATA 21HRW3_SP DATA 22HRW4_SP DATA 23HORG 0000HAJMP MAINORG OOOBHLJMP RWQHCXORG0076H;= = = = = = = = = = = = = = = =任務(wù)切換程序RWQHCX: JNB RSOfLOOP3JNB RSLLOOP4戶(hù)= = = = = = = = = = = = =任務(wù)4現(xiàn)場(chǎng)保護(hù)PUSH ACC;需注意與任務(wù)4現(xiàn)場(chǎng)還原對(duì)應(yīng)PUSH BPUSH PSWMO
5、V RW4_SPfSP ;保存任務(wù)4的堆棧指針尸= = = = = = = = = = = = =王務(wù)2現(xiàn)場(chǎng)還原MOV SP,RW1_SP ;取任務(wù)1的堆棧指針位 明,任務(wù)1使用寄存器。幺POP PSW;需注意與任務(wù)1現(xiàn)場(chǎng)保護(hù)對(duì)應(yīng)POP BPOP ACCRETILOOP2: 2= = = = = = = = = = = = =任務(wù)1現(xiàn)場(chǎng)保護(hù)PUSH ACC;需注意與任務(wù)1現(xiàn)場(chǎng)還原對(duì)應(yīng)PUSH BPUSH PSWMOV RWl_SPrSP ;保存任務(wù)1的堆棧指針2= = = = = = = = = = = = =任務(wù)3現(xiàn)場(chǎng)還原MOV SP,RW2_SP ;取任務(wù)2的堆棧指針位 力,任務(wù)2使用寄存
6、器工幺POP PSW濡注意與任務(wù)2現(xiàn)場(chǎng)保護(hù)對(duì)POP BPOP ACCRETILOOP3:JNB RSlfLOOP2戶(hù)= = = = = = = = = = = = "王務(wù)2現(xiàn)場(chǎng)保護(hù)PUSH ACC;需注意與任務(wù)2現(xiàn)場(chǎng)還原對(duì)應(yīng)PUSH BPUSH PSWMOV RW2_SPfSP ;保存任務(wù)2的堆棧指針(SlH尸= = = = = = = = = = = = =,王務(wù)4現(xiàn)場(chǎng)還原MOV SP,RW3_SP ;取任務(wù)3的堆棧指針位,任務(wù)3使用寄存器2 gPOP PSW應(yīng);需注意與任務(wù)3現(xiàn)場(chǎng)保護(hù)對(duì)POPPOP ACCRETILOOP4:任務(wù)3現(xiàn)場(chǎng)保護(hù)PUSH ACC;需注意與任務(wù)3現(xiàn)場(chǎng)還原對(duì)
7、應(yīng)PUSH BPUSHMOVPSWRW3_SP,SP ;保存任務(wù)4的堆棧指針= = = = = = = = = = = = = =任務(wù)1現(xiàn)場(chǎng)還原MOV SP,RW4_SP ;取任務(wù)4的堆棧指針位 力,任務(wù)4使用寄存器3 gPOP PSW濡注意與任務(wù)4現(xiàn)場(chǎng)保護(hù)對(duì)POPPOP ACCRETI戶(hù)= = = = = = =任務(wù)一程序RW1_KS:CLR RSOCLR RSI;任務(wù)一入口 (初始化);你的初始化程序戶(hù)=任務(wù)一程序RW1_MAIN:;任務(wù)一主程序;你的程序LJMP RW1_MAIN= = = = = = = = = = =任務(wù)一end=任務(wù)二程序RW2_KS:CLR RSO;任務(wù)二入口 (
8、初始化)SETB RS1;你的初始化程序;任務(wù)二主程序RW2_MAIN:;你的程序LJMP RW2_MAIN=任務(wù)二end=任務(wù)三程序RW3_KS:SETB RSO;任務(wù)三入口 (初始化)CLR RSI;你的初始化程序RW3_MAIN:M王務(wù)三主程序;你的程序LJMP RW3.MAIN=任務(wù)三end=任務(wù)四程序RW4,KS:;任務(wù)四入口(初始化)SETB RSOSETB RS1;你的初始化程序RW4_MAIN:;任務(wù)四主程序;你的程序LJMP RW4_MAIN=任務(wù)四end=初始化程序MAIN:MOV SP,#09FH;取任務(wù)2堆棧指針開(kāi)始位置MOV DPTR,#RW2 KSPUSH DPLP
9、USH DPHMOV RW2_SP,#0A4H;任務(wù)2堆棧指針寄存 器初值=09FH + 2+任務(wù)2現(xiàn)場(chǎng)保護(hù)入棧數(shù)MOV SP,#OBFH;取任務(wù)3堆棧指針開(kāi)始位置MOV DPTRf#RW3 KSPUSH DPLPUSH DPHMOV RW3_SP,#0C4H;任務(wù)3堆棧指針寄存 器初值=OBFH + 2+任務(wù)3現(xiàn)場(chǎng)保護(hù)入棧數(shù)MOV SP,#ODFH;取任務(wù)4堆棧指針開(kāi)始位MOV DPTRf#RW4 KSPUSH DPLPUSH DPHMOV RW4_SP,#0E4H;任務(wù)4堆棧指針寄存 器初值=ODFH + 2+任務(wù)4現(xiàn)場(chǎng)保護(hù)入棧數(shù)MOV SP,#7FH;取任務(wù)1堆棧指針開(kāi)始位置 SETB
10、EA ;開(kāi)啟維持個(gè)任務(wù)調(diào)度的定時(shí)器 SETB ETO MOV TMODf#02H SETB TROLJMP RW1_KSEND要求不嚴(yán)謹(jǐn)?shù)?0任務(wù)系統(tǒng)此程序結(jié)構(gòu)很空洞,使用請(qǐng)自己注意ORG 0000HRWJSQ data 7FHRWJSQ1 data 7EHORG 0000HAJMP MAIN ORG OOOBH LJMP RWDD ORG 0076H RWDD:;任務(wù)調(diào)度程序MOV ROfRWJSQ ;取任務(wù)地址寄存器地址 POP ACC MOV RO,A ;保存當(dāng)前任務(wù)斷點(diǎn) INC ROPOP ACC MOV RO,A INC ROMOV A,ROON EA,RWJSQ1,LOOP2;所有
11、需要進(jìn)行的任 務(wù)是否進(jìn)行完MOV R0f#216 ;任務(wù)地址寄存器起始地址LOOP2:INC R0MOVAf RO;取另一個(gè)任務(wù)斷點(diǎn)PUSH ACCDEC ROMOV A,ROPUSH ACCMOV RWJSQfRO ;保存任務(wù)地址寄存器地址CJNEROf#22OfXXX ;220是任務(wù)三的地址寄存器地址INC R4;延時(shí)基數(shù)XXX:RETI;前去執(zhí)行新任務(wù)MAIN:MOV RWJSQf#216 ;任務(wù)地址寄存器起始地 址(最多20個(gè)任務(wù),需40個(gè)寄存器)MOV RWJSQL#。;任務(wù)地址寄存器地址的最 后一個(gè)地址加一(取值218-0 ) MOVROfRWJSQ ;取各個(gè)任務(wù)的地址 MOV D
12、PTRf#RWl LCALL DZSZMOV DPTR,#RW2LCALL DZSZMOV DPTR,#RW3LCALL DZSZMOV DPTR,#RW4LCALL DZSZMOV DPTR,#RW5LCALL DZSZMOV DPTRf#RW6LCALL DZSZMOV DPTRf#RW7LCALL DZSZMOV DPTR,#RW8LCALL DZSZMOV DPTR,#RW9LCALL DZSZMOV DPTRf#RW10LCALL DZSZMOV DPTRf#RWllLCALL DZSZMOV DPTRf#RW12LCALL DZSZMOV DPTRf#RW13LCALL DZSZM
13、OV DPTRf#RW14LCALL DZSZMOV DPTRf#RW15LCALL DZSZMOV DPTRf#RW16LCALL DZSZMOV DPTRf#RW17LCALL DZSZMOV DPTRf#RW18LCALL DZSZMOV DPTRf#RW19LCALL DZSZMOV DPTRf#RW20LCALL DZSZSETB EA ;開(kāi)啟維持個(gè)任務(wù)調(diào)度的定時(shí)器SETB ETOMOV TMODf#02H ;MOV TH0,#6;定時(shí)器初值設(shè)置SETB TROLJMP RW1 ;跳到第一個(gè)任務(wù)DZSZ:MOVROfDPHINC ROMOV ROfDPLINC RORETRWl:;計(jì)
14、數(shù)任務(wù)一JB P1.0f$JNB P1.0f$INC R7LJMP RW1 ;死循環(huán)RW2:;計(jì)數(shù)任務(wù)二JB Pl.lf$JNB Pl.lf$DEC R7LJMP RW2 ;死循環(huán)RW3:;計(jì)數(shù)任務(wù)三MOV R4,#0CJNE R4,#250,$ ;準(zhǔn)確延時(shí)演示,延時(shí)時(shí)間= 250*任務(wù)數(shù)*定時(shí)器時(shí)間,CPL P1.5LJMP RW3 ;死循環(huán)RW4:;計(jì)數(shù)任務(wù)四MOV R6,#255 ;非準(zhǔn)確延時(shí),時(shí)間較難計(jì)算MOV R5,#255DJNZ R5f$DJNZ R6fBBBCPL Pl.6LJMP RW4 ;死循環(huán)RW5:;計(jì)數(shù)任務(wù)五JB P2.7f$JNB P2.7,$CPL Pl.7LJMP RW5 ;死循環(huán)RW6:;計(jì)數(shù)任務(wù)六JB P1.2f$JNB Pl.2,$CPL P2.2LJMP RW6 ;死循環(huán)RW7:;計(jì)數(shù)任務(wù)七LJMP RW7 ;死循環(huán)RW8:;計(jì)數(shù)任務(wù)八LJMP RW8 ;死循環(huán)RW9:;計(jì)數(shù)任務(wù)九LJMP RW9 ;死循環(huán)RW10:;計(jì)數(shù)任務(wù)十LJMP RW10 ;死循環(huán)RW11:;計(jì)數(shù)任務(wù)十一LJMP RW11 ;死循環(huán)RW12:;計(jì)數(shù)任務(wù)十二LJMP RW12 ;死循環(huán)RW13:CPL PO.OLJMP RW13RW14:CPL P0.1LJ
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同步優(yōu)化設(shè)計(jì)2024年高中數(shù)學(xué)第一章直線(xiàn)與圓1.4兩條直線(xiàn)的平行與垂直課后篇鞏固提升含解析北師大版選擇性必修第一冊(cè)
- 專(zhuān)題11 課外閱讀(講義+試題) -2023年三升四語(yǔ)文暑假銜接課(統(tǒng)編版)
- 2024貸款購(gòu)銷(xiāo)合同范本范文
- 2024養(yǎng)豬場(chǎng)轉(zhuǎn)讓合同(參考文本)
- 草藥基地合同范本(2篇)
- 2022年監(jiān)理合同(2篇)
- 關(guān)于試用期工作總結(jié)
- 頑固皮膚病康復(fù)經(jīng)驗(yàn)分享
- 國(guó)際會(huì)展中心建設(shè)總承包合同
- 跨境電商快遞租賃合同
- 2024版《隱患排查標(biāo)準(zhǔn)手冊(cè)》(附檢查依據(jù))
- DB11/1950-2021-公共建筑無(wú)障礙設(shè)計(jì)標(biāo)準(zhǔn)
- 鍍鋅線(xiàn)專(zhuān)業(yè)詞匯表
- 股權(quán)代持股東會(huì)決議
- 第17課 盼 六年級(jí)語(yǔ)文上冊(cè)同步分層作業(yè)設(shè)計(jì)系列(統(tǒng)編版)
- 文化旅游安全培訓(xùn)
- 數(shù)字技術(shù)在幼兒科學(xué)教育中的應(yīng)用與實(shí)踐
- 初中物理光學(xué)難題難度含解析答案
- 2024年中國(guó)民航科學(xué)技術(shù)研究院社會(huì)招聘工作人員16人歷年高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 公平競(jìng)爭(zhēng)審查制度實(shí)施細(xì)則
- 燃煤鍋爐作業(yè)安全操作規(guī)程
評(píng)論
0/150
提交評(píng)論