hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下
1. 基于proteus的51單片機(jī)開發(fā)實(shí)例(13)-LED指示那個(gè)按鍵被按下
1.1. 實(shí)驗(yàn)?zāi)康?/strong>
本實(shí)例將實(shí)現(xiàn)兩路外部中斷的檢測(cè)和識(shí)別,讓我們能夠更好地理解51單片機(jī)的外部中斷以及中斷優(yōu)先級(jí)的概念。在上一實(shí)例中,我們利用下降沿觸發(fā)外部中斷,在本實(shí)例中,使用低電平觸發(fā)外部中斷。通發(fā)光二極管分別指示那一路外部中斷被觸發(fā)。
圖1 兩路外部中斷電路圖
1.2. 設(shè)計(jì)思路
本實(shí)例通過(guò)判斷連接在單片機(jī)的兩個(gè)外部中斷引腳P3.2和P3.3上的按鍵那個(gè)被按下,然后控制相應(yīng)的連接在單片機(jī)P1.0和P1.4引腳上的發(fā)光二極管閃爍來(lái)指示電路及程序的運(yùn)行情況。
1.3. 基礎(chǔ)知識(shí)
單片機(jī)與外部設(shè)備之間的數(shù)據(jù)交換有兩種方式:查詢方式和中斷方式。
查詢方式也稱為條件判斷,通過(guò)查詢外設(shè)的狀態(tài)(一般是判斷端口的電平狀態(tài)),如果外設(shè)狀態(tài)滿足要求,則單片機(jī)會(huì)控制執(zhí)行相應(yīng)的流程。查詢方式的優(yōu)點(diǎn)是通用性強(qiáng)、直觀性好,缺點(diǎn)是需要單片機(jī)有一個(gè)等待查詢的過(guò)程。CPU在查詢期間不能進(jìn)行其它操作,從而導(dǎo)致單片機(jī)的工作效率低下。(為什么查詢器件不能進(jìn)行其它操作呢?因?yàn)橛袝r(shí)候外設(shè)的狀態(tài)變化是很快的,很多都是毫秒級(jí)或者微秒級(jí)、甚至更短的時(shí)間,如果在這么短的時(shí)間內(nèi)單片機(jī)剛好去處理別的事情了,那么就錯(cuò)過(guò)了這個(gè)變化)。
中斷方式則可以有效地提高單片機(jī)的工作效率,非常適合實(shí)時(shí)控制,因而在單片機(jī)系統(tǒng)中,中斷用途非常廣泛,基本上每個(gè)單片機(jī)系統(tǒng)都會(huì)用到中斷。
查詢方式是單片機(jī)主動(dòng)檢測(cè)外設(shè)狀態(tài),而中斷則是外設(shè)主動(dòng)向單片機(jī)發(fā)出請(qǐng)求處理的信號(hào)。CPU在收到中斷信號(hào)之前,一直在執(zhí)行其它程序,只有在收到外設(shè)觸發(fā)的中斷信號(hào)后,才中斷正在執(zhí)行的程序,暫時(shí)去執(zhí)行外設(shè)的請(qǐng)求,執(zhí)行完后,立即又返回主程序繼續(xù)執(zhí)行剛才中斷的程序。中斷方式完全消除了CPU在查詢方式中需要一直等待的現(xiàn)象,極大地提高了CPU的工作效率。
下圖是中斷處理的流程。
圖2 中斷處理流程
下圖是51單片機(jī)的中斷系統(tǒng)結(jié)構(gòu),從圖中可以看出,兩個(gè)外部中斷源分別從P3.2和P3.3引腳輸入。外部中斷請(qǐng)求信號(hào)有兩種方式:電平觸發(fā)方式、負(fù)邊沿觸發(fā)方式。如果是電平觸發(fā)方式,則只要在引腳上檢測(cè)到低電平就會(huì)產(chǎn)生有效的中斷請(qǐng)求。如果是負(fù)邊沿觸發(fā)方式,則需要在引腳上檢測(cè)到從1到0(高電平到低電平的跳變)才會(huì)產(chǎn)生中斷申請(qǐng)。
圖3 51單片機(jī)中斷結(jié)構(gòu)
單片機(jī)在復(fù)位后,IE寄存器中各位的狀態(tài)都是0,所以CPU是處于總中斷關(guān)閉的狀態(tài)。
1.4. 電路設(shè)計(jì)
本實(shí)例的電路圖如圖1所示。電路中兩個(gè)按鍵分別接單片機(jī)的兩個(gè)外部中斷引腳P3.2和P3.3。單片機(jī)P1.0和P1.4通過(guò)灌電流的方式連接兩個(gè)發(fā)光二極管。
1.5. 程序設(shè)計(jì)
本實(shí)例的程序代碼如下。程序中有兩個(gè)中斷服務(wù)程序,注意中斷服務(wù)程序的書寫方法。
#include//宏定義#define ON0#define OFF 1//LED開、閉定義//端口定義sbit LED1=P1^3;sbit LED2=P1^7; //LED驅(qū)動(dòng)引腳定義int main(void){IT0=0; //設(shè)置外部中斷0觸發(fā)方式為低電平IT1=0; //設(shè)置外部中斷1觸發(fā)方式為低電平EX0=1; //使能外部中斷0EX1=1; //使能外部中斷1EA=1;//使能總中斷LED1=OFF;LED2=OFF;while(1){}}//EX_INT0() interrupt 0 using 1 //外部中斷0服務(wù)函數(shù){LED1=~LED1; //進(jìn)入中斷之后LED1翻轉(zhuǎn)}//EX_INT1() interrupt 2 using 2//外部中斷1服務(wù)函數(shù){LED2=~LED2; //進(jìn)入中斷之后LED2翻轉(zhuǎn)}1.6. 實(shí)例仿真
將程序編譯后生成hex文件,然后本例的proteus電路中,將程序裝入單片機(jī)中。運(yùn)行仿真,如下面視頻所示。
1.7. 總結(jié)
通過(guò)本實(shí)例,我們學(xué)習(xí)了單片機(jī)中多中斷服務(wù)函數(shù)的編寫方法。更加熟悉了51單片機(jī)的外部中斷。
總結(jié)
以上是生活随笔為你收集整理的hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ups容量计算和配置方法_干货 | up
- 下一篇: java开发cs项目_本硕机械转行cs(