資源描述:
《51單片機(jī)匯編版的多任務(wù)實(shí)時(shí)操作系統(tǒng)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、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í)行很短的
2、的時(shí)間(只執(zhí)行一部分指令),再保存斷點(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自帶的,但是還有很多匯編愛(ài)好者不能使用它,因?yàn)樗荂語(yǔ)言的。為此本人設(shè)計(jì)了兩個(gè)個(gè)簡(jiǎn)單的匯編語(yǔ)言版的多任務(wù)實(shí)時(shí)系統(tǒng),專(zhuān)為匯編
3、愛(ài)好者提供一個(gè)參考。高手勿噴!????本程序使用定時(shí)器中斷的方法產(chǎn)生時(shí)間輪片,每個(gè)任務(wù)分配在一個(gè)時(shí)間輪片上。如果一個(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=1ms。即先執(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ù)
4、一斷點(diǎn)處繼續(xù)往下執(zhí)行250us,再保存再切換到下一個(gè)任務(wù)的斷點(diǎn)處執(zhí)行,照此循環(huán)。所以這些任務(wù)并不是同1us內(nèi)完成的,而是同1ms內(nèi)完成的,當(dāng)然更是同時(shí)同分同秒完成的。程序只是個(gè)演示程序,功能的開(kāi)發(fā)看個(gè)人要求而定!輕量四任務(wù)實(shí)時(shí)系統(tǒng)?ORG0000HRW1_SP?DATA??20H;任務(wù)堆棧指針位置寄存器RW2_SP?DATA??21HRW3_SP?DATA??22HRW4_SP?DATA??23H?ORG0000HAJMPMAINORG000BHLJMPRWQHCXORG0076H???;============
5、====任務(wù)切換程序===========================================RWQHCX:JNB??RS0,LOOP3JNB??RS1,LOOP4;==============任務(wù)4現(xiàn)場(chǎng)保護(hù)PUSH?ACC????????;需注意與任務(wù)4現(xiàn)場(chǎng)還原對(duì)應(yīng)PUSH?BPUSH?PSWMOV??RW4_SP,SP??;保存任務(wù)4的堆棧指針位置;==============任務(wù)2現(xiàn)場(chǎng)還原MOV??SP,RW1_SP??;取任務(wù)1的堆棧指針位置,任務(wù)1使用寄存器0組POP?PSW????????
6、??;需注意與任務(wù)1現(xiàn)場(chǎng)保護(hù)對(duì)應(yīng)POP?BPOP?ACCRETILOOP2:;==============任務(wù)1現(xiàn)場(chǎng)保護(hù)PUSH?ACC????????;需注意與任務(wù)1現(xiàn)場(chǎng)還原對(duì)應(yīng)PUSH?BPUSH?PSWMOV??RW1_SP,SP??;保存任務(wù)1的堆棧指針位置;==============任務(wù)3現(xiàn)場(chǎng)還原MOV??SP,RW2_SP??;取任務(wù)2的堆棧指針位置,任務(wù)2使用寄存器1組POP?PSW??????????;需注意與任務(wù)2現(xiàn)場(chǎng)保護(hù)對(duì)應(yīng)POP?BPOP?ACCRETILOOP3:JNB??RS1,LOO
7、P2;==============任務(wù)2現(xiàn)場(chǎng)保護(hù)PUSH?ACC????????;需注意與任務(wù)2現(xiàn)場(chǎng)還原對(duì)應(yīng)PUSH?BPUSH?PSWMOV??RW2_SP,SP??;保存任務(wù)2的堆棧指針位置;==============任務(wù)4現(xiàn)場(chǎng)還原MOV??SP,RW3_SP??;取任務(wù)3的堆棧指針位置,任務(wù)3使用寄存器2組POP?PSW???????????;需注意與任務(wù)3現(xiàn)場(chǎng)保護(hù)對(duì)應(yīng)POP?BPOP?ACCRETILOOP4:;==============任務(wù)3現(xiàn)場(chǎng)保護(hù)PUSH?ACC????????;需注意與任務(wù)3現(xiàn)
8、場(chǎng)還原對(duì)應(yīng)PUSH?BPUSH?PSWMOV??RW3_SP,SP??;保存任務(wù)4的堆棧指針位置;==============任務(wù)1現(xiàn)場(chǎng)還原MOV?SP,RW4_SP??;取任務(wù)4的堆棧指針位置,任務(wù)4使用寄存器3組POP?PSW?????????;需注意與任務(wù)4現(xiàn)場(chǎng)保護(hù)對(duì)應(yīng)POP?BPOP?ACCRETI?;========任務(wù)一程序==================