學(xué)過C51的大都知道RTX51,它是單片機(jī)實(shí)時多任務(wù)系統(tǒng),是kill51自帶的,但是還有很多匯編愛好者不能使用它,因?yàn)樗荂語言的。為此本人設(shè)計了兩個個簡單的匯編語言版的多任務(wù)實(shí)時系統(tǒng),專為匯編愛好者提供一個參考。高手勿噴!
本程序使用定時器中斷的方法產(chǎn)生時間輪片,每個任務(wù)分配在一個時間輪片上。如果一個時間輪片(定時器的時間)是250us,那每個任務(wù)執(zhí)行一次的時間就是250us(因?yàn)?/font>任務(wù)切換的時間極短,所以里省略了);有4個任務(wù)要執(zhí)行,那么系統(tǒng)完成一次循環(huán)的時間是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ù)一斷點(diǎn)處繼續(xù)往下執(zhí)行250us,再保存再切換到下一個任務(wù)的斷點(diǎn)處執(zhí)行,照此循環(huán)。所以這些任務(wù)并不是同1us內(nèi)完成的,而是同1ms內(nèi)完成的,當(dāng)然更是同時同分同秒完成的。
程序只是個演示程序,功能的開發(fā)看個人要求而定! 輕量四任務(wù)實(shí)時系統(tǒng)
ORG 0000H
RW1_SP DATA 20H;任務(wù)堆棧指針位置寄存器
RW2_SP DATA 21H
RW3_SP DATA 22H
RW4_SP DATA 23H
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP RWQHCX
ORG0076H
;================任務(wù)切換程序===========================================
RWQHCX:
JNB RS0,LOOP3
JNB RS1,LOOP4
;==============任務(wù)4現(xiàn)場保護(hù)
PUSH ACC ;需注意與任務(wù)4現(xiàn)場還原對應(yīng)
PUSH B
PUSH PSW
MOV RW4_SP,SP ;保存任務(wù)4的堆棧指針位置
;==============任務(wù)1現(xiàn)場還原
MOV SP,RW1_SP ;取任務(wù)1的堆棧指針位置,任務(wù)1使用寄存器0組
POP PSW ;需注意與任務(wù)1現(xiàn)場保護(hù)對應(yīng)
POP B
POP ACC
RETI
LOOP2:
;==============任務(wù)1現(xiàn)場保護(hù)
PUSH ACC ;需注意與任務(wù)1現(xiàn)場還原對應(yīng)
PUSH B
PUSH PSW
MOV RW1_SP,SP ;保存任務(wù)1的堆棧指針位置
;==============任務(wù)2現(xiàn)場還原
MOV SP,RW2_SP ;取任務(wù)2的堆棧指針位置,任務(wù)2使用寄存器1組
POP PSW ;需注意與任務(wù)2現(xiàn)場保護(hù)對應(yīng)
POP B
POP ACC
RETI
LOOP3:
JNB RS1,LOOP2
;==============任務(wù)2現(xiàn)場保護(hù)
PUSH ACC ;需注意與任務(wù)2現(xiàn)場還原對應(yīng)
PUSH B
PUSH PSW
MOV RW2_SP,SP ;保存任務(wù)2的堆棧指針位置
;==============任務(wù)3現(xiàn)場還原
MOV SP,RW3_SP ;取任務(wù)3的堆棧指針位置,任務(wù)3使用寄存器2組
POP PSW ;需注意與任務(wù)3現(xiàn)場保護(hù)對應(yīng)
POP B
POP ACC
RETI
LOOP4:
;==============任務(wù)3現(xiàn)場保護(hù)
PUSH ACC ;需注意與任務(wù)3現(xiàn)場還原對應(yīng)
PUSH B
PUSH PSW
MOV RW3_SP,SP ;保存任務(wù)4的堆棧指針位置
;==============任務(wù)4現(xiàn)場還原
MOV SP,RW4_SP ;取任務(wù)4的堆棧指針位置,任務(wù)4使用寄存器3組
POP PSW ;需注意與任務(wù)4現(xiàn)場保護(hù)對應(yīng)
POP B
POP ACC
RETI