欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 注意了這些,才能更容易地寫好單片機(jī)中斷子程序 [打印本頁]

作者: yonko    時(shí)間: 2019-9-13 11:39
標(biāo)題: 注意了這些,才能更容易地寫好單片機(jī)中斷子程序
單片機(jī)里面有很多中斷資源,例如外部中斷、定時(shí)器中斷、串口中斷等,這些中斷資源應(yīng)當(dāng)用于處理相應(yīng)的緊急事件,而不是順序執(zhí)行的常規(guī)事件,所以在編寫中斷子程序的時(shí)候應(yīng)當(dāng)十分注意。
具體的事務(wù)處理語句不應(yīng)放在中斷函數(shù)里面,中斷子程序中的語句應(yīng)當(dāng)簡潔明了,不應(yīng)當(dāng)有太多的語句。假如你在編寫中斷子程序的時(shí)候像在main函數(shù)中那樣寫一大串處理具體事務(wù)的指令的話,會(huì)在此中斷中占用太多的時(shí)間,假如當(dāng)有其他低優(yōu)先級的中斷信號來臨的時(shí)候也可能導(dǎo)致中斷丟失,發(fā)生程序的邏輯錯(cuò)誤。所以,在中斷子程序中的指令語句應(yīng)當(dāng)做到最短。
中斷子程序中的語句不應(yīng)當(dāng)使用延時(shí)函數(shù),不使用whiledo-whiledo-until等有等待延時(shí)功能的指令。在中斷子程序中使用while、do-while、do-until等指令也會(huì)導(dǎo)致單片機(jī)在執(zhí)行過程中在該位置延時(shí)或者等待太長的時(shí)間,當(dāng)其他中斷信號來臨的時(shí)候同樣也可能導(dǎo)致中斷丟失。
那么應(yīng)該怎么做呢?
在編寫中斷子程序的時(shí)候,應(yīng)當(dāng)巧用全局狀態(tài)變量,在中斷子程序中只改變狀態(tài)變量值,在main函數(shù)中while(1)程序段內(nèi)部判斷該狀態(tài)變量的值,根據(jù)狀態(tài)變量的值再分別執(zhí)行對應(yīng)的事務(wù)處理語句。這就像你接到一個(gè)電話要你辦某事,你也不能在一直接著電話把這件事做完吧,你需要把事情記下來,掛了電話再安排時(shí)間處理。
舉個(gè)例子,一個(gè)串口觸摸屏需要根據(jù)觸屏中按鍵來執(zhí)行對應(yīng)的操作,需要使用到串口中斷。假設(shè)觸屏在觸摸按鍵1時(shí)會(huì)發(fā)送數(shù)據(jù)A,觸摸到按鍵2時(shí)會(huì)發(fā)送數(shù)據(jù)B,那么我們可以定義一個(gè)全局狀態(tài)變量command:
unsigned char command;
在串口中斷子程序中,根據(jù)接收到的不同串口數(shù)據(jù)改變command的值:
void 串口1中斷函數(shù)()
{
switch (收到的串口數(shù)據(jù))
{case A:  //假如收到按鍵1的動(dòng)作,command賦值x1
{command=x1;
break;
}
case B:  //假如收到按鍵2的動(dòng)作,command賦值x2
{command=x2;
break;
}
default: break;
}
}
在上面這個(gè)串口1的中斷子程序中,switch是一個(gè)條件選擇指令,當(dāng)串口收到數(shù)據(jù)A,那么給command賦值x1, 當(dāng)串口收到數(shù)據(jù)B,那么給command賦值x2。當(dāng)然,上面的程序段只是一個(gè)說明的示意,不能直接復(fù)制編譯到單片機(jī)中運(yùn)行,在實(shí)際工程中需要根據(jù)不同單片機(jī)程序的編寫規(guī)則進(jìn)行開發(fā)。
接著在main函數(shù)中根據(jù)command的值執(zhí)行不同的事務(wù)處理語句:
main函數(shù)()
{
while(1)
{
Switch(command)
{case x1:   //假如收到按鍵1的動(dòng)作,執(zhí)行事務(wù)處理1的程序
{事務(wù)處理1;
break;
}
case x2:  //假如收到按鍵2的動(dòng)作,執(zhí)行事務(wù)處理2的程序
{事務(wù)處理2;
break;
}
       default: break;
}
}
}
按照這樣的程序,單片機(jī)在接收到觸屏發(fā)出的代表不同按鍵的串口數(shù)據(jù)時(shí),在串口中斷子程序中改變?nèi)譅顟B(tài)變量的值command,這個(gè)語句很少,執(zhí)行時(shí)間也短。再到main函數(shù)中根據(jù)command的不同值分別執(zhí)行非常耗時(shí)間的具體事務(wù)處理程序。這樣的程序分配,將使單片機(jī)運(yùn)行高效而且合理。
中秋快樂!
沙鷗 樂山 2019.9.13


作者: 天使之淚雨揚(yáng)    時(shí)間: 2019-9-13 19:36
感謝樓主熱心分享,中秋佳節(jié)快樂!
作者: ttaniscy    時(shí)間: 2019-9-15 09:07
說得很好,值得大家注意這個(gè)問題,謝謝LZ
作者: bai_yun_123    時(shí)間: 2019-10-19 14:34
好文,自己對中斷和定時(shí)器理解特別不好,希望這篇文章能對我有很好的啟發(fā)




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1