在本教程中,我們將學(xué)習(xí)如何 在PIC微控制器中使用外部中斷 ,以及為什么/在哪里需要它們。
所需材料:
- PIC16F877A 性能板
- 16x2 液晶顯示屏
- 按鈕
- 連接線
- 面包板
- 圖片套件 3
什么是中斷以及在哪里使用它們:
在介紹如何對(duì)PIC微控制器中斷進(jìn)行編程之前,讓我們了解中斷實(shí)際上是什么以及我們需要在哪里使用它們。此外,微控制器中有很多類型的中斷,PIC16F877A大約有15種中斷。讓我們暫時(shí)不要將它們?nèi)炕煜轿覀兊哪X海中。
所以!什么是微控制器中的中斷?
眾所周知,微控制器用于執(zhí)行一組預(yù)定義(編程)激活,根據(jù)輸入觸發(fā)必要的輸出。但是,當(dāng)您的微控制器忙于執(zhí)行一段代碼時(shí),可能會(huì)出現(xiàn)需要立即關(guān)注另一段代碼的緊急情況。另一段需要立即注意的代碼應(yīng)被視為中斷。
例如:讓我們考慮您正在手機(jī)上玩自己喜歡的游戲,而手機(jī)內(nèi)的控制器(假設(shè))正忙于拋出您享受游戲所需的所有圖形。但是,突然你的女朋友撥打了你的號(hào)碼?,F(xiàn)在,最糟糕的事情是您的手機(jī)控制器忽略了您的女朋友電話,因?yàn)槟τ谕嬗螒?。為了防止這種噩夢(mèng)的發(fā)生,我們使用了一種稱為中斷的東西。
這些中斷將始終處于活動(dòng)狀態(tài),列出某些特定操作的發(fā)生,當(dāng)它們發(fā)生時(shí),它們執(zhí)行一段代碼,然后返回正常功能。這段代碼稱為 中斷服務(wù)例程 (ISR)。 一個(gè)必須中斷的實(shí)際項(xiàng)目是“使用PIC微控制器的數(shù)字車速表和里程表電路”
在微控制器中,有兩種主要 類型的中斷 。它們是外部中斷和內(nèi)部中斷。內(nèi)部中斷發(fā)生在微型控制器內(nèi)部,用于執(zhí)行任務(wù),例如定時(shí)器中斷、ADC 中斷等。這些中斷由軟件觸發(fā),分別完成定時(shí)器操作或ADC操作。
外部中斷是可以由用戶觸發(fā)的中斷。在這個(gè)程序中,我們將學(xué)習(xí)如何通過(guò)使用按鈕觸發(fā)中斷來(lái) 使用外部中斷 。我們將使用 LCD 顯示從 0 到 1000 遞增的數(shù)字,當(dāng)觸發(fā)中斷時(shí),我們應(yīng)該從中斷服務(wù)例程 **ISR **通知它,然后繼續(xù)返回到遞增數(shù)字。
電路圖及說(shuō)明:

使用PIC16F877中斷的電路圖如上圖所示。您只需將LCD連接到PIC,就像我們?cè)?a href="http://m.makelele.cn/outside?redirect=https://circuitdigest.com/microcontroller-projects/16x2-lcd-interfacing-with-pic-microcontroller" target="_blank">接口LCD教程中所做的那樣。
現(xiàn)在要連接中斷引腳,我們應(yīng)該查看數(shù)據(jù)表,以了解PIC的哪個(gè)引腳用于外部中斷。在我們的例子中,PIC16F877A 33^RD^引腳 RBO/INT 用于外部中斷。您不能使用此引腳以外的任何其他引腳。此電路圖的引腳連接如下表所示。
| S.No: | 引腳編號(hào) | 引腳名稱 | 已連接到 |
|---|---|---|---|
| 1 | 21 | RD2 | 液晶顯示器的 RS |
| 2 | 22 | RD3 | 液晶顯示器的E |
| 3 | 27 | RD4 | 液晶屏D4 |
| 4 | 28 | RD5 | 液晶屏D5 |
| 5 | 29 | 太平洋地區(qū)技術(shù) | 液晶屏D6 |
| 6 | 30 | RD7 | 液晶屏D7 |
| 7 | 33 | RBO/INT | 按鈕 |
我們?cè)?a target="_blank">端口 B 上啟用了內(nèi)部上拉電阻,因此我們可以通過(guò)按鈕將 RB0 引腳直接接地。因此,每當(dāng)該引腳變?yōu)榈碗娖綍r(shí),就會(huì)觸發(fā)中斷。
可以在面包板上進(jìn)行連接,如下所示。

如果您一直在學(xué)習(xí)我們的教程,您應(yīng)該已經(jīng)熟悉我在這里使用的這個(gè) Perf 板。如果沒(méi)有,你不需要考慮太多,只需按照電路圖,你就會(huì)讓事情正常。
PIC微控制器中的中斷仿真:
該項(xiàng)目的模擬是使用Proteus進(jìn)行的。

模擬項(xiàng)目時(shí),您應(yīng)該會(huì)在LCD顯示屏上看到一系列數(shù)字遞增。這發(fā)生在主回路內(nèi),每當(dāng)按下按鈕時(shí),LCD都應(yīng)顯示它已進(jìn)入ISR。您可以在代碼中進(jìn)行修改并嘗試在此處進(jìn)行測(cè)試。
代碼說(shuō)明:
可以在本教程末尾找到此項(xiàng)目的完整代碼。但是,該程序被分成重要的塊,并在下面解釋,以便您更好地理解。
像所有程序一樣,我們必須通過(guò)定義程序中使用的引腳的引腳配置來(lái)開(kāi)始代碼。同樣在這里,我們需要定義我們使用RB0 / INT作為外部中斷引腳,而不是輸入或輸出引腳。下面的代碼行使能端口B上的內(nèi)部上拉電阻,方法是使7^千^位為 0。
OPTION_REG = 0b00000000;

然后我們啟用全局/外設(shè)中斷,并聲明我們使用RB0作為外部中斷引腳。
GIE=1; //Enable Global Interrupt
PEIE=1; //Enable the Peripheral Interrupt
INTE = 1; //Enable RB0 as external Interrupt pin
一旦RB0引腳被定義為外部中斷引腳,每次它變低時(shí),外部中斷標(biāo)志INTF將變?yōu)?,并且void中斷函數(shù)中的代碼將被執(zhí)行,因?yàn)閷⒄{(diào)用中斷服務(wù)例程(ISR)。
void interrupt ISR_example()
{
if (INTF==1) //External Interrupt detected
{
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Print_String(" Entered ISR");
INTF = 0; // clear the interrupt flag after done with it
__delay_ms(2000);
Lcd_Clear();
}
}
如您所見(jiàn),我將中斷函數(shù)命名為 ISR_example。您可以根據(jù)自己的意愿命名。在中斷函數(shù)中,我們將檢查 INTF 標(biāo)志是否為高并執(zhí)行所需的操作。完成例程后清除中斷標(biāo)志非常重要。只有這樣,程序才會(huì)返回到 void 主函數(shù)。這種清算必須通過(guò)使用生產(chǎn)線的軟件來(lái)完成
INTF = 0; // clear the interrupt flag after done with it
在主功能中,我們只需每 500 毫秒增加一個(gè)數(shù)字并將其顯示在 LCD 屏幕上。我們沒(méi)有任何特定的線路來(lái)檢查RB0引腳的狀態(tài)。中斷將始終保持活動(dòng)狀態(tài),每當(dāng)按下按鈕時(shí),它都會(huì)跳出空主線并執(zhí)行 ISR 中的行。
Lcd_Set_Cursor(2,1);
Lcd_Print_String("Inside Main Loop");
Lcd_Set_Cursor(1,1);
Lcd_Print_String("Number: ");
Lcd_Print_Char(ch1+'0');
Lcd_Print_Char(ch2+'0');
Lcd_Print_Char(ch3+'0');
Lcd_Print_Char(ch4+'0');
__delay_ms(500);
number++;
PIC16F877A 的工作中斷:
一旦您了解了 中斷的工作原理 ,您就可以在硬件上嘗試并擺弄它。這里給出的這個(gè)程序是一個(gè)非?;镜耐獠恐袛嗍纠?,它只是在檢測(cè)到中斷時(shí)改變LCD屏幕的顯示。

-
PIC16F877A
+關(guān)注
關(guān)注
2文章
43瀏覽量
22384 -
PIC微控制器
+關(guān)注
關(guān)注
0文章
17瀏覽量
7684 -
外部中斷
+關(guān)注
關(guān)注
1文章
135瀏覽量
16605
發(fā)布評(píng)論請(qǐng)先 登錄
將繼電器與PIC微控制器PIC16F877A連接的教程
如何使用PIC微控制器旋轉(zhuǎn)步進(jìn)電機(jī)
如何使用PIC微控制器構(gòu)建一個(gè)線路跟隨機(jī)器人
PIC16F877A的中斷優(yōu)先級(jí)問(wèn)題
基于PIC16F877A的太陽(yáng)能與市電互補(bǔ)照明系統(tǒng)控制器的設(shè)
PIC16F877A串口發(fā)送查詢方式
PIC16F877A串口芯片電壓?jiǎn)栴}
PIC16F877A的T0定時(shí)器制作的電子鐘程序
PIC16F877A開(kāi)發(fā)板 數(shù)碼管動(dòng)態(tài)掃描實(shí)驗(yàn)
PIC16F877A開(kāi)發(fā)板 普通IO驅(qū)動(dòng)74595實(shí)驗(yàn)
PIC16F877A 看門狗定時(shí)器實(shí)驗(yàn)
使用熱敏打印機(jī)連接PIC16F877A并使用輕觸開(kāi)關(guān)實(shí)現(xiàn)打印的教程
如何在PIC16F877A微控制器中使用EEPROM保存數(shù)據(jù)
如何在PIC16F877A微控制器中使用中斷
評(píng)論