資源描述:
《51單片機匯編版的多任務實時操作系統(tǒng)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、51單片機匯編版的多任務實時操作系統(tǒng)????一個CPU核心是不可能同時處理多條指令的,只能是一條一條的順序執(zhí)行。如果我們需要同時執(zhí)行多個任務,但又不能等一個任務執(zhí)行完了再執(zhí)行下一個任務,有的任務還需要等待一個信號觸發(fā)才能往下執(zhí)行,信號遲遲未來那就什么也做不了了??!操作系統(tǒng)的出現(xiàn),就是為了解決這一問題的。它的功能就是能讓CPU“同時”處理多個任務,當然不是真正的同時,它只是把這些任務的分成不同的時間段來處理,每個任務只執(zhí)行很短的的時間(只執(zhí)行一部分指令),然后保存斷點就切換到下一個任務的指令去執(zhí)行,同樣只執(zhí)行很短的
2、的時間(只執(zhí)行一部分指令),再保存斷點切換任務。等所有的任務都執(zhí)行一次后再回來從斷點處繼續(xù)執(zhí)行,時間到,再保存斷點切換任務,如此反復。因為CPU的頻率高,所以完成一次循環(huán)的時間極短,51單片機的頻率一般40MHz以內(nèi),所需時間是ms、us級的,電腦的主頻是GHz級別的,那更不用說,這樣短的時間對于我們來說就是同時的。???學過C51的大都知道RTX51,它是單片機實時多任務系統(tǒng),是kill51自帶的,但是還有很多匯編愛好者不能使用它,因為它是C語言的。為此本人設計了兩個個簡單的匯編語言版的多任務實時系統(tǒng),專為匯編
3、愛好者提供一個參考。高手勿噴!????本程序使用定時器中斷的方法產(chǎn)生時間輪片,每個任務分配在一個時間輪片上。如果一個時間輪片(定時器的時間)是250us,那每個任務執(zhí)行一次的時間就是250us(因為任務切換的時間極短,所以里省略了);有4個任務要執(zhí)行,那么系統(tǒng)完成一次循環(huán)的時間是250*4=1000us=1ms。即先執(zhí)行任務一250us,然后保存任務一的斷點,切換到任務二執(zhí)行250us,再保存任務二的斷點,切換到任務三執(zhí)行250us,接著保存任務三的斷點,切換到任務四執(zhí)行250us,保存任務四的斷點,再次切到任務
4、一斷點處繼續(xù)往下執(zhí)行250us,再保存再切換到下一個任務的斷點處執(zhí)行,照此循環(huán)。所以這些任務并不是同1us內(nèi)完成的,而是同1ms內(nèi)完成的,當然更是同時同分同秒完成的。程序只是個演示程序,功能的開發(fā)看個人要求而定!輕量四任務實時系統(tǒng)?ORG0000HRW1_SP?DATA??20H;任務堆棧指針位置寄存器RW2_SP?DATA??21HRW3_SP?DATA??22HRW4_SP?DATA??23H?ORG0000HAJMPMAINORG000BHLJMPRWQHCXORG0076H???;============
5、====任務切換程序===========================================RWQHCX:JNB??RS0,LOOP3JNB??RS1,LOOP4;==============任務4現(xiàn)場保護PUSH?ACC????????;需注意與任務4現(xiàn)場還原對應PUSH?BPUSH?PSWMOV??RW4_SP,SP??;保存任務4的堆棧指針位置;==============任務2現(xiàn)場還原MOV??SP,RW1_SP??;取任務1的堆棧指針位置,任務1使用寄存器0組POP?PSW????????
6、??;需注意與任務1現(xiàn)場保護對應POP?BPOP?ACCRETILOOP2:;==============任務1現(xiàn)場保護PUSH?ACC????????;需注意與任務1現(xiàn)場還原對應PUSH?BPUSH?PSWMOV??RW1_SP,SP??;保存任務1的堆棧指針位置;==============任務3現(xiàn)場還原MOV??SP,RW2_SP??;取任務2的堆棧指針位置,任務2使用寄存器1組POP?PSW??????????;需注意與任務2現(xiàn)場保護對應POP?BPOP?ACCRETILOOP3:JNB??RS1,LOO
7、P2;==============任務2現(xiàn)場保護PUSH?ACC????????;需注意與任務2現(xiàn)場還原對應PUSH?BPUSH?PSWMOV??RW2_SP,SP??;保存任務2的堆棧指針位置;==============任務4現(xiàn)場還原MOV??SP,RW3_SP??;取任務3的堆棧指針位置,任務3使用寄存器2組POP?PSW???????????;需注意與任務3現(xiàn)場保護對應POP?BPOP?ACCRETILOOP4:;==============任務3現(xiàn)場保護PUSH?ACC????????;需注意與任務3現(xiàn)
8、場還原對應PUSH?BPUSH?PSWMOV??RW3_SP,SP??;保存任務4的堆棧指針位置;==============任務1現(xiàn)場還原MOV?SP,RW4_SP??;取任務4的堆棧指針位置,任務4使用寄存器3組POP?PSW?????????;需注意與任務4現(xiàn)場保護對應POP?BPOP?ACCRETI?;========任務一程序==================