項(xiàng)目盡量不要出現(xiàn)delay(uchar data),但是有些協(xié)議是需要使用延遲來實(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();//播放提示語音
Delay();//等待播放完畢
//讀取M1卡信息
Function2();
Delay();//等待讀卡數(shù)據(jù)返回
//播放提示語音
Function3();
Delay();//等待播放完畢
//M1卡數(shù)據(jù)交互,判定下一步操作及提示
Function4();
Delay();//等待數(shù)據(jù)處理完畢
……
……
}
提出“switch 外加定時(shí)中斷”理論,主要方便初學(xué)者理解單片機(jī)程序大概的“邏輯框架”。switch 是一個(gè)萬能語句,它外加 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開始計(jì)數(shù),到65535溢出
TL0 = (65536-50000)%256; //外部晶振為12MHz,對(duì)應(yīng)的延時(shí)時(shí)間為50ms
EA = 1; //總中斷打開
ET0 = 1; //定時(shí)器中斷打開
TR0 = 1; //定時(shí)器開關(guān)打開
}
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è)小程序說明這框架的主要思路,這框架可拓展性很強(qiáng),時(shí)效性有保證,可以滿足很多項(xiàng)目的需求,但是這框架最致命的是遇到需要長(zhǎng)時(shí)間關(guān)閉單片機(jī)所有中斷的項(xiàng)目,因?yàn)橛行﹨f(xié)議是不能被中斷打斷,有興趣的可以留意后續(xù)推文。
-
協(xié)議
+關(guān)注
關(guān)注
2文章
614瀏覽量
39816 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4367瀏覽量
64165 -
軟件架構(gòu)
+關(guān)注
關(guān)注
0文章
64瀏覽量
10460 -
Delay
+關(guān)注
關(guān)注
0文章
10瀏覽量
11051
發(fā)布評(píng)論請(qǐng)先 登錄
CAFrame單片機(jī)程序框架分享
PIC單片機(jī)程序結(jié)構(gòu)框架
原創(chuàng)分享:自制輕量級(jí)單片機(jī)UI框架

單片機(jī)裸機(jī)程序框架

51單片機(jī)如何跳出wile循環(huán)_基于proteus的51單片機(jī)開發(fā)實(shí)例(1)

單片機(jī)學(xué)習(xí)筆記————51單片機(jī)實(shí)現(xiàn)判斷數(shù)據(jù)尾來接收一串?dāng)?shù)據(jù)的串口通用程序框架

單片機(jī)學(xué)習(xí)筆記————51單片機(jī)實(shí)現(xiàn)在串口接收中斷里即時(shí)解析數(shù)據(jù)頭的特殊程序框架

單片機(jī)學(xué)習(xí)筆記————51單片機(jī)(利用return)實(shí)現(xiàn)判斷數(shù)據(jù)頭來接收一串?dāng)?shù)據(jù)的串口通用程序框架

評(píng)論