国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機(jī)基于時(shí)間片輪轉(zhuǎn)的簡(jiǎn)單rtos

這篇具有很好參考價(jià)值的文章主要介紹了51單片機(jī)基于時(shí)間片輪轉(zhuǎn)的簡(jiǎn)單rtos。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

早就想寫寫這個(gè)了,正好趕上有點(diǎn)時(shí)間,寫了一下基于51單片機(jī)的時(shí)間片輪轉(zhuǎn)調(diào)度系統(tǒng),簡(jiǎn)單的rtos,呵呵。直接上代碼。


//基于51單片機(jī)時(shí)間片輪轉(zhuǎn)的簡(jiǎn)單rtos。
#include"reg52.h"
sbit led1 = P2^7;
sbit led2 = P2^0;
sbit key = P1^0;
#define MAX_TASKS     3       //定義任務(wù)個(gè)數(shù).必須和實(shí)際任務(wù)數(shù)一至 
#define PUSH_TIMES    3 	  //時(shí)間中斷中push使用的次數(shù)用debug看進(jìn)入時(shí)間中斷時(shí)的次數(shù)。
#define MAX_TASK_DEP  (PUSH_TIMES+4)  //任務(wù)槽深度;
//經(jīng)過實(shí)驗(yàn),看debug的push次數(shù),加上4就行了。//沒有考慮中斷嵌套。有嵌套的再大。
unsigned char idata task_stack[MAX_TASKS][MAX_TASK_DEP];      //任務(wù)堆棧.
unsigned char current_id;         //當(dāng)前活動(dòng)任務(wù)號(hào) 
unsigned char task_sp[MAX_TASKS];	//堆棧指針組,每個(gè)任務(wù)一個(gè)字節(jié),任務(wù)調(diào)度前指向入棧的pc高字節(jié)。
unsigned int cicle1,cicle2;
void Timer0_Init(void)		//10毫秒@11.0592MHz
{
	AUXR &= 0x7F;			//定時(shí)器時(shí)鐘12T模式
	TMOD &= 0xF0;			//設(shè)置定時(shí)器模式
	TL0 = 0x00;				//設(shè)置定時(shí)初始值
	TH0 = 0xDC;				//設(shè)置定時(shí)初始值
	TF0 = 0;				//清除TF0標(biāo)志
	ET0 = 1;				//使能定時(shí)器0中斷
	EA=1;					//開總中斷
}

//任務(wù)裝入函數(shù),將任務(wù)的首地址(參數(shù)1)裝入(參數(shù)2)指定的任務(wù)槽中.
void task_load(unsigned int func, unsigned char taskid)
{ 
        
        task_stack[taskid][0] = (unsigned int)func & 0xff;  //把任務(wù)地址的低八位裝入任務(wù)槽0號(hào)地址。
        task_stack[taskid][1] = (unsigned int)func >> 8;    //把任務(wù)地址的高八位裝入任務(wù)槽1號(hào)地址
        task_sp[taskid] = (unsigned char)&task_stack[taskid][0]; //把堆棧的首地址送給sp數(shù)組。
        task_sp[taskid]++;//先把保存的數(shù)組sp值加1,使它指向堆棧入棧pc的高位
//這里模擬了入棧過程,先把任務(wù)地址放在任務(wù)槽的最低位置,下次切換的時(shí)候就直接來這里找。
		   
		if(taskid!=0)									   //如果不是0號(hào)任務(wù);
		{
		task_sp[taskid]+= PUSH_TIMES;					   //給push和pop語句留下空間,用debuge看匯編進(jìn)入中斷后的push
		                                               //次數(shù),在文件首部改數(shù)字值;
		}
} 

void  os_start() 	 //啟動(dòng)程序
 {
 current_id = 0;	 //把0號(hào)sp當(dāng)作當(dāng)前的首個(gè)sp
 SP = task_sp[0];

 } 
void task1()	//任務(wù)1,循環(huán)夠5萬次燈閃動(dòng)一次
{ 
        while(1)
		{ 
			cicle1++;
				 if (cicle1>50000)
				 {
				  cicle1=0;
				  led1=!led1;
				 }
        } 
} 
void task2()  	//任務(wù)2,循環(huán)夠5萬次燈閃動(dòng)一次
{ 
        while(1)
		{ 
		 	cicle2++;
				 if (cicle2>30000)
				 {
				  cicle2=0;
				  led2=!led2; 
				 }
        } 
} 

void task3()
{ 
        while(1)
		{ 
		  if(key==0)
		   cicle2=10000;
	   //  cicle1=10000;
        } 
} 

void Timer0_Isr(void) interrupt 1	 //時(shí)間中斷。調(diào)度任務(wù)。
{
         EA=0; //進(jìn)入核心臨界區(qū)關(guān)中斷
         task_sp[current_id] = SP; 		//將進(jìn)入時(shí)鐘中斷時(shí)的sp存入任務(wù)槽。
         if(++current_id == MAX_TASKS) 	//當(dāng)前任務(wù)指向下一個(gè)任務(wù)號(hào)。如果任務(wù)號(hào)超過任務(wù)總數(shù)
			current_id=0;				//指向任務(wù)0;
		    SP = task_sp[current_id];	//把新任務(wù)的pc地址給sp,這樣在時(shí)間中斷出函數(shù)的時(shí)候系統(tǒng)自動(dòng)把sp指向的值作為pc高8位;并出棧。
		 EA=1; //開中斷。
}
void main()
{
	  
        //這里裝載了三個(gè)個(gè)任務(wù),因此在文件首部定義MAX_TASKS時(shí)也必須定義為3 
        task_load(task1, 0);//將task1函數(shù)裝入0號(hào)槽,任務(wù)可以裝入任意槽。 
        task_load(task2, 1);//將task2函數(shù)裝入1號(hào)槽 
		task_load(task3, 2);//將task3函數(shù)裝入2號(hào)槽 
	    Timer0_Init();		//定時(shí)器0初始化
	    key=1;				//口線置位。
		TR0 = 1;			//開始計(jì)時(shí)
        os_start();         //必須從任務(wù)在0號(hào)槽的任務(wù)開始;
		
 

}

雖然簡(jiǎn)單,也可以繼續(xù)學(xué)習(xí)了。文章來源地址http://www.zghlxwxcb.cn/news/detail-784015.html

到了這里,關(guān)于51單片機(jī)基于時(shí)間片輪轉(zhuǎn)的簡(jiǎn)單rtos的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【51單片機(jī)】利用【時(shí)間延遲】的原理規(guī)避【按鍵抖動(dòng)問題】

    【51單片機(jī)】利用【時(shí)間延遲】的原理規(guī)避【按鍵抖動(dòng)問題】

    前言 大家好吖,歡迎來到 YY 滴單片機(jī)系列 ,熱烈歡迎! 本章主要內(nèi)容面向接觸過單片機(jī)的老鐵 本章是51LCD單片機(jī)設(shè)計(jì)的一個(gè)環(huán)節(jié),完整可前往相應(yīng)博客查看完整 傳送門 歡迎訂閱 YY 滴C++專欄!更多干貨持續(xù)更新!以下是傳送門! YY的《C++》專欄 YY的《C++11》專欄 YY的《Lin

    2024年02月20日
    瀏覽(21)
  • 51單片機(jī)項(xiàng)目(9)——基于51單片機(jī)的電子琴設(shè)計(jì)

    51單片機(jī)項(xiàng)目(9)——基于51單片機(jī)的電子琴設(shè)計(jì)

    簡(jiǎn)易電子琴設(shè)計(jì)設(shè)計(jì)內(nèi)容: 1.用矩陣鍵盤代表琴鍵,至少能彈出8個(gè)音符,分別是:音符1.23.4.,5,6,? 2.鍵按下的時(shí)間長(zhǎng)短表征節(jié)拍的長(zhǎng)短,用蜂鳴器發(fā)出聲音 3.數(shù)碼管顯示出當(dāng)前音符 4.音量可調(diào) (代碼及其工程文件放在最后) 電路圖如下: 51單片機(jī)電子琴是一種基于51單片機(jī)(

    2024年02月09日
    瀏覽(27)
  • 51單片機(jī)項(xiàng)目(7)——基于51單片機(jī)的溫濕度測(cè)量仿真

    51單片機(jī)項(xiàng)目(7)——基于51單片機(jī)的溫濕度測(cè)量仿真

    本次做的設(shè)計(jì),是利用DHT11傳感器,測(cè)量環(huán)境的溫度以及濕度,同時(shí)具備溫度報(bào)警的功能:利用兩個(gè)按鍵,設(shè)置溫度閾值的加和減,當(dāng)所測(cè)溫度大于溫度閾值的時(shí)候,蜂鳴器就會(huì)響起,進(jìn)行報(bào)警提示。 同時(shí)系統(tǒng)還有一個(gè)LCD1602屏幕,用于顯示實(shí)時(shí)的溫度濕度,還可以顯示溫度閾

    2024年02月10日
    瀏覽(27)
  • 單片機(jī)和RTOS

    單片機(jī)和RTOS

    單片機(jī)是一種集成了處理器、內(nèi)存、輸入輸出接口和外圍設(shè)備控制器等功能的微型計(jì)算機(jī)系統(tǒng)。它通常用于控制簡(jiǎn)單的嵌入式系統(tǒng),如家電、汽車電子、工業(yè)控制等。單片機(jī)具有低功耗、低成本和高可靠性等特點(diǎn)。 而RTOS(Real-Time Operating System)是一種實(shí)時(shí)操作系統(tǒng),專門設(shè)計(jì)

    2024年02月20日
    瀏覽(24)
  • 51單片機(jī)實(shí)驗(yàn)三:數(shù)碼管顯示時(shí)鐘 按鍵調(diào)節(jié)時(shí)間時(shí)閃爍提示

    51單片機(jī)實(shí)驗(yàn)三:數(shù)碼管顯示時(shí)鐘 按鍵調(diào)節(jié)時(shí)間時(shí)閃爍提示

    功能效果:1.時(shí)分秒的動(dòng)態(tài)顯示。2.用三個(gè)按鍵實(shí)現(xiàn)時(shí)分秒的修改,調(diào)節(jié)的數(shù)字閃爍提示。 ?

    2024年02月11日
    瀏覽(31)
  • 51單片機(jī)簡(jiǎn)單計(jì)算器實(shí)現(xiàn)(100行)附源碼

    51單片機(jī)簡(jiǎn)單計(jì)算器實(shí)現(xiàn)(100行)附源碼

    ?不引流,項(xiàng)目最后附上本項(xiàng)目百行源碼??! 如果對(duì)你有幫助不妨點(diǎn)個(gè)贊! 本項(xiàng)目使用: 51單片機(jī) , 矩陣鍵盤 , 四位數(shù)碼管 使用LCD顯示的思路相差不大,由于是仿真,包容性比較強(qiáng),所以還有很大優(yōu)化空間 ????????實(shí)際上有一定編程基礎(chǔ)的同學(xué)借助代碼里的注釋應(yīng)該

    2024年02月03日
    瀏覽(63)
  • 基于51單片機(jī)的單片機(jī)倒車?yán)走_(dá)報(bào)警系統(tǒng)

    基于51單片機(jī)的單片機(jī)倒車?yán)走_(dá)報(bào)警系統(tǒng)

    ? 前言 至今世界汽車工業(yè)通過了近122年的進(jìn)展,今世汽車已經(jīng)超級(jí)成熟和普遍了。汽車已經(jīng)滲透于國防建設(shè)、國民經(jīng)濟(jì)和人類生活的各個(gè)領(lǐng)域當(dāng)中,成為人類生存必不可少的、最要緊的交通工具,盡管每輛車都有后視鏡,但不可幸免地都存在一個(gè)后視盲區(qū),倒車?yán)走_(dá)那么能夠

    2024年02月04日
    瀏覽(37)
  • 51單片機(jī)實(shí)現(xiàn)簡(jiǎn)單的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)

    51單片機(jī)實(shí)現(xiàn)簡(jiǎn)單的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)

    (1)設(shè)計(jì)一個(gè)洗衣機(jī)控制系統(tǒng),用直流電機(jī)的轉(zhuǎn)速表征三種不同洗衣方式:弱洗、強(qiáng)洗、漂洗; (2)用三個(gè)獨(dú)立按鍵設(shè)置待洗衣物的不同洗滌方式,實(shí)現(xiàn)最長(zhǎng)10分鐘定時(shí): ????絲質(zhì)衣服: 漂洗 定時(shí)3分鐘 棉質(zhì)衣服:弱洗 2分鐘;強(qiáng)洗 5分鐘;漂洗 3分鐘; 化纖衣服: 強(qiáng)洗

    2023年04月19日
    瀏覽(27)
  • C51單片機(jī) 簡(jiǎn)單的交通紅綠燈設(shè)計(jì)一

    C51單片機(jī) 簡(jiǎn)單的交通紅綠燈設(shè)計(jì)一

    各位讀者朋友們你們好,感謝你們能點(diǎn)開這篇文章,作為一個(gè)非硬件專業(yè)的學(xué)生,我沒有扎實(shí)的硬件基礎(chǔ),很擔(dān)心自己所寫內(nèi)容沒有理論基礎(chǔ)或者存有漏洞,如果有不對(duì)的地方,期待您能指正,一起學(xué)習(xí)。交通紅綠燈的設(shè)計(jì)算是51的小入門。涉及僅有數(shù)碼管,LED交通燈,Dela

    2023年04月27日
    瀏覽(26)
  • 簡(jiǎn)單的C51單片機(jī)項(xiàng)目之LCD1602時(shí)鐘

    簡(jiǎn)單的C51單片機(jī)項(xiàng)目之LCD1602時(shí)鐘

    一,實(shí)驗(yàn)現(xiàn)象 實(shí)驗(yàn)項(xiàng)目現(xiàn)象如下: ? ? 這個(gè)項(xiàng)目需要用到51單片機(jī)板上的功能如下: 1.獨(dú)立按鍵 2.LCD1602 3.定時(shí)器中斷 功能介紹 1.獨(dú)立按鍵實(shí)現(xiàn)三個(gè)功能,選擇鍵,增大鍵,減小鍵。 2.lcd1602顯示時(shí)間 3.定時(shí)器中斷確定時(shí)間 代碼如下: ? ?

    2024年02月11日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包