項(xiàng)目盡量不要出現(xiàn)delay(uchar data),但是有些協(xié)議是需要使用延遲來(lái)實(shí)現(xiàn)協(xié)議時(shí)序;前后臺(tái)框架在一定程度上提高了時(shí)效性,但是如果如果一個(gè)主函數(shù)中多次使用就會(huì)對(duì)整個(gè)軟件架構(gòu)的時(shí)效性大打折扣,給個(gè)反面教材......
//主循環(huán)
while(1)
{
//上電進(jìn)入主程序 或 觸發(fā)觸摸屏
Function1();//播放提示語(yǔ)音
Delay();//等待播放完畢
//讀取M1卡信息
Function2();
Delay();//等待讀卡數(shù)據(jù)返回
//播放提示語(yǔ)音
Function3();
Delay();//等待播放完畢
//M1卡數(shù)據(jù)交互,判定下一步操作及提示
Function4();
Delay();//等待數(shù)據(jù)處理完畢
……
……
}
提出“switch 外加定時(shí)中斷”理論,主要方便初學(xué)者理解單片機(jī)程序大概的“邏輯框架”。switch 是一個(gè)萬(wàn)能語(yǔ)句,它外加 while 與 for 循環(huán)就可以做任何復(fù)雜的算法,比如,搜索算法,運(yùn)動(dòng)算法,提取關(guān)鍵詞算法,等等。它外加定時(shí)中斷,就可以搭建一個(gè)系統(tǒng)的基本框架。比如,做通信的程序框架,人機(jī)界面的程序框架,按鍵服務(wù)的程序框架,等等。switch 的精髓在于“根據(jù)條件進(jìn)行步驟的靈活切換”。
#include
sbit led0 = P0^0;
uinsigned char time_500ms_flag = 0; //500ms標(biāo)志位
uinsigned char led_state = 0; //狀態(tài)緩存
void initT0()
{
TMOD |= 0x01; //使用方式1,16位定時(shí)器
TH0 = (65536-50000)/256; //給TH1和TL1初初值,計(jì)數(shù)器由15536開(kāi)始計(jì)數(shù),到65535溢出
TL0 = (65536-50000)%256; //外部晶振為12MHz,對(duì)應(yīng)的延時(shí)時(shí)間為50ms
EA = 1; //總中斷打開(kāi)
ET0 = 1; //定時(shí)器中斷打開(kāi)
TR0 = 1; //定時(shí)器開(kāi)關(guān)打開(kāi)
}
void main()
{
//初始化定時(shí)器
initT0();
initT1();
//初始化led燈
led0 = 0;
while(1)
{
switch(led_state)
{
case 0:
if( time_500ms_flag )
{
time_500ms_flag = 0;
led_state = 1;
//=========任務(wù)========
led0 = 1;
//---------------------
}
break;
case 1:
if( time_500ms_flag )
{
time_500ms_flag = 0;
led_state = 0;
//=========任務(wù)========
led0 = 0;
//---------------------
}
break;
default: break;
}
}
}
//===============================
//t0定時(shí)器中斷服務(wù)程序
//每隔50ms進(jìn)入一次該程序
//===============================
void t0Intr() interrupt 1
{
static unsigned int num;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
if( !time_500ms_flag )
{
num++;
if( num >= 10 )
{
num = 0;
time_500ms_flag = 0xff;
}
}
}
//--------------------------------
用個(gè)小程序說(shuō)明這框架的主要思路,這框架可拓展性很強(qiáng),時(shí)效性有保證,可以滿足很多項(xiàng)目的需求,但是這框架最致命的是遇到需要長(zhǎng)時(shí)間關(guān)閉單片機(jī)所有中斷的項(xiàng)目,因?yàn)橛行﹨f(xié)議是不能被中斷打斷,有興趣的可以留意后續(xù)推文。
-
協(xié)議
+關(guān)注
關(guān)注
2文章
592瀏覽量
39053 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4237瀏覽量
61973 -
軟件架構(gòu)
+關(guān)注
關(guān)注
0文章
64瀏覽量
10254 -
Delay
+關(guān)注
關(guān)注
0文章
10瀏覽量
10856
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論