項目盡量不要出現delay(uchar data),但是有些協議是需要使用延遲來實現協議時序;前后臺框架在一定程度上提高了時效性,但是如果如果一個主函數中多次使用就會對整個軟件架構的時效性大打折扣,給個反面教材......
//主循環
while(1)
{
//上電進入主程序 或 觸發觸摸屏
Function1();//播放提示語音
Delay();//等待播放完畢
//讀取M1卡信息
Function2();
Delay();//等待讀卡數據返回
//播放提示語音
Function3();
Delay();//等待播放完畢
//M1卡數據交互,判定下一步操作及提示
Function4();
Delay();//等待數據處理完畢
……
……
}
提出“switch 外加定時中斷”理論,主要方便初學者理解單片機程序大概的“邏輯框架”。switch 是一個萬能語句,它外加 while 與 for 循環就可以做任何復雜的算法,比如,搜索算法,運動算法,提取關鍵詞算法,等等。它外加定時中斷,就可以搭建一個系統的基本框架。比如,做通信的程序框架,人機界面的程序框架,按鍵服務的程序框架,等等。switch 的精髓在于“根據條件進行步驟的靈活切換”。
#include
sbit led0 = P0^0;
uinsigned char time_500ms_flag = 0; //500ms標志位
uinsigned char led_state = 0; //狀態緩存
void initT0()
{
TMOD |= 0x01; //使用方式1,16位定時器
TH0 = (65536-50000)/256; //給TH1和TL1初初值,計數器由15536開始計數,到65535溢出
TL0 = (65536-50000)%256; //外部晶振為12MHz,對應的延時時間為50ms
EA = 1; //總中斷打開
ET0 = 1; //定時器中斷打開
TR0 = 1; //定時器開關打開
}
void main()
{
//初始化定時器
initT0();
initT1();
//初始化led燈
led0 = 0;
while(1)
{
switch(led_state)
{
case 0:
if( time_500ms_flag )
{
time_500ms_flag = 0;
led_state = 1;
//=========任務========
led0 = 1;
//---------------------
}
break;
case 1:
if( time_500ms_flag )
{
time_500ms_flag = 0;
led_state = 0;
//=========任務========
led0 = 0;
//---------------------
}
break;
default: break;
}
}
}
//===============================
//t0定時器中斷服務程序
//每隔50ms進入一次該程序
//===============================
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;
}
}
}
//--------------------------------
用個小程序說明這框架的主要思路,這框架可拓展性很強,時效性有保證,可以滿足很多項目的需求,但是這框架最致命的是遇到需要長時間關閉單片機所有中斷的項目,因為有些協議是不能被中斷打斷,有興趣的可以留意后續推文。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
協議
+關注
關注
2文章
602瀏覽量
39223 -
函數
+關注
關注
3文章
4331瀏覽量
62618 -
軟件架構
+關注
關注
0文章
64瀏覽量
10287 -
Delay
+關注
關注
0文章
10瀏覽量
10893
發布評論請先 登錄
相關推薦
CAFrame單片機程序框架分享
CAFrame單片機程序框架簡介程序運行優先級CAFrame配置通用事件應用FLowchart流程圖簡介CAFrame 單片機C語言程序開發框架可用于不同的
發表于 11-24 07:18
原創分享:自制輕量級單片機UI框架
原創分享:自制輕量級單片機UI框架框架元素用戶接口代碼開源平時常看csdn,但是從來沒有自己寫過。正好這幾天需要用單片機做一個簡易的ui界面,于是自己寫了一個輕量級的ui
發表于 11-05 15:20
?29次下載
單片機裸機程序框架
單片機裸機程序框架##單片機裸機開發時,要處理多個任務程序框架:輪詢系統int main(void){ init_something(); while(
發表于 11-13 19:21
?12次下載
51單片機如何跳出wile循環_基于proteus的51單片機開發實例(1)
的基本框架;4、了解LED發光二極管的特性。1.2. 設計思路電路設計思路:將一個發光二極管的一端連接到51單片機的一個I/O端口(P1端口)上,發光二極管的另一端連接到電源正極。程序設計思路:編寫程序...
發表于 11-23 16:23
?4次下載
單片機學習筆記————51單片機實現判斷數據尾來接收一串數據的串口通用程序框架
單片機學習筆記————51單片機實現判斷數據尾來接收一串數據的串口通用程序框架
發表于 11-23 17:06
?8次下載
單片機學習筆記————51單片機實現在串口接收中斷里即時解析數據頭的特殊程序框架
單片機學習筆記————51單片機實現在串口接收中斷里即時解析數據頭的特殊程序框架
發表于 11-23 17:06
?16次下載
單片機學習筆記————51單片機(利用return)實現判斷數據頭來接收一串數據的串口通用程序框架
單片機學習筆記————51單片機(利用return)實現判斷數據頭來接收一串數據的串口通用程序框架
發表于 11-23 17:06
?17次下載
從單片機基礎到程序框架
單片機應用的核心技術是什么?是按鍵,數碼管,流水燈,串口。是它們的程序框架。按鍵和數碼管是
輸入是人機界面,把它們的程序框架研究透了,以后做彩屏或者更花銷的顯示界面,程序框架也可以通
發表于 09-07 14:45
?9次下載
在單片機中使用的RTOS代碼框架
在這次開發中,也是遇到了很多的問題,主要的感想是關于代碼的框架。在單片機開發中,特別是使用了RTOS的時候,一個良好的代碼框架真的是相當的必要的。
評論