0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在PIC16F877A微控制器中使用中斷

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2023-01-25 15:32 ? 次閱讀

在本教程中,我們將學習如何 PIC微控制器中使用外部中斷 ,以及為什么/在哪里需要它們。

所需材料:

  1. PIC16F877A 性能板
  2. 16x2 液晶顯示屏
  3. 按鈕
  4. 連接線
  5. 面包板
  6. 圖片套件 3

什么是中斷以及在哪里使用它們:

在介紹如何對PIC微控制器中斷進行編程之前,讓我們了解中斷實際上是什么以及我們需要在哪里使用它們。此外,微控制器中有很多類型的中斷,PIC16F877A大約有15種中斷。讓我們暫時不要將它們全部混淆到我們的腦海中。

所以!什么是微控制器中的中斷?

眾所周知,微控制器用于執(zhí)行一組預定義(編程)激活,根據(jù)輸入觸發(fā)必要的輸出。但是,當您的微控制器忙于執(zhí)行一段代碼時,可能會出現(xiàn)需要立即關注另一段代碼的緊急情況。另一段需要立即注意的代碼應被視為中斷。

例如:讓我們考慮您正在手機上玩自己喜歡的游戲,而手機內的控制器(假設)正忙于拋出您享受游戲所需的所有圖形。但是,突然你的女朋友撥打了你的號碼?,F(xiàn)在,最糟糕的事情是您的手機控制器忽略了您的女朋友電話,因為您正忙于玩游戲。為了防止這種噩夢的發(fā)生,我們使用了一種稱為中斷的東西。

這些中斷將始終處于活動狀態(tài),列出某些特定操作的發(fā)生,當它們發(fā)生時,它們執(zhí)行一段代碼,然后返回正常功能。這段代碼稱為 中斷服務例程 (ISR)。 一個必須中斷的實際項目是“使用PIC微控制器的數(shù)字車速表和里程表電路

在微控制器中,有兩種主要 類型的中斷 。它們是外部中斷和內部中斷。內部中斷發(fā)生在微型控制器內部,用于執(zhí)行任務,例如定時器中斷、ADC 中斷等。這些中斷由軟件觸發(fā),分別完成定時器操作或ADC操作。

外部中斷是可以由用戶觸發(fā)的中斷。在這個程序中,我們將學習如何通過使用按鈕觸發(fā)中斷來 使用外部中斷 。我們將使用 LCD 顯示從 0 到 1000 遞增的數(shù)字,當觸發(fā)中斷時,我們應該從中斷服務例程 **ISR **通知它,然后繼續(xù)返回到遞增數(shù)字。

電路圖及說明:

1.png

使用PIC16F877中斷的電路圖如上圖所示。您只需將LCD連接到PIC,就像我們在接口LCD教程中所做的那樣。

現(xiàn)在要連接中斷引腳,我們應該查看數(shù)據(jù)表,以了解PIC的哪個引腳用于外部中斷。在我們的例子中,PIC16F877A 33^RD^引腳 RBO/INT 用于外部中斷。您不能使用此引腳以外的任何其他引腳。此電路圖的引腳連接如下表所示。

S.No: 引腳編號 引腳名稱 已連接到
1 21 RD2 液晶顯示器的 RS
2 22 RD3 液晶顯示器的E
3 27 RD4 液晶屏D4
4 28 RD5 液晶屏D5
5 29 太平洋地區(qū)技術 液晶屏D6
6 30 RD7 液晶屏D7
7 33 RBO/INT 按鈕

我們在端口 B 上啟用了內部上拉電阻,因此我們可以通過按鈕將 RB0 引腳直接接地。因此,每當該引腳變?yōu)榈碗娖綍r,就會觸發(fā)中斷。

可以在面包板上進行連接,如下所示。

PIC 微控制器 PIC16F877A 中斷試驗板連接

如果您一直在學習我們的教程,您應該已經熟悉我在這里使用的這個 Perf 板。如果沒有,你不需要考慮太多,只需按照電路圖,你就會讓事情正常。

PIC微控制器中的中斷仿真

該項目的模擬是使用Proteus進行的。

1.png

模擬項目時,您應該會在LCD顯示屏上看到一系列數(shù)字遞增。這發(fā)生在主回路內,每當按下按鈕時,LCD都應顯示它已進入ISR。您可以在代碼中進行修改并嘗試在此處進行測試。

代碼說明:

可以在本教程末尾找到此項目的完整代碼。但是,該程序被分成重要的塊,并在下面解釋,以便您更好地理解。

像所有程序一樣,我們必須通過定義程序中使用的引腳的引腳配置來開始代碼。同樣在這里,我們需要定義我們使用RB0 / INT作為外部中斷引腳,而不是輸入或輸出引腳。下面的代碼行使能端口B上的內部上拉電阻,方法是使7^千^位為 0。

OPTION_REG = 0b00000000;

選項注冊

然后我們啟用全局/外設中斷,并聲明我們使用RB0作為外部中斷引腳。

GIE=1;          //Enable Global Interrupt

    PEIE=1;         //Enable the Peripheral Interrupt

    INTE = 1;       //Enable RB0 as external Interrupt pin

一旦RB0引腳被定義為外部中斷引腳,每次它變低時,外部中斷標志INTF將變?yōu)?,并且void中斷函數(shù)中的代碼將被執(zhí)行,因為將調用中斷服務例程(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();

        }

}

如您所見,我將中斷函數(shù)命名為 ISR_example。您可以根據(jù)自己的意愿命名。在中斷函數(shù)中,我們將檢查 INTF 標志是否為高并執(zhí)行所需的操作。完成例程后清除中斷標志非常重要。只有這樣,程序才會返回到 void 主函數(shù)。這種清算必須通過使用生產線的軟件來完成

INTF = 0;          // clear the interrupt flag after done with it

在主功能中,我們只需每 500 毫秒增加一個數(shù)字并將其顯示在 LCD 屏幕上。我們沒有任何特定的線路來檢查RB0引腳的狀態(tài)。中斷將始終保持活動狀態(tài),每當按下按鈕時,它都會跳出空主線并執(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 的工作中斷:

一旦您了解了 中斷的工作原理 ,您就可以在硬件上嘗試并擺弄它。這里給出的這個程序是一個非?;镜耐獠恐袛嗍纠?,它只是在檢測到中斷時改變LCD屏幕的顯示。

PIC16F877A 中斷的工作

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • PIC16F877A
    +關注

    關注

    2

    文章

    43

    瀏覽量

    21762
  • PIC微控制器
    +關注

    關注

    0

    文章

    17

    瀏覽量

    7388
  • 外部中斷
    +關注

    關注

    1

    文章

    131

    瀏覽量

    15790
收藏 人收藏

    評論

    相關推薦

    將繼電器與PIC微控制器PIC16F877A連接的教程

    在本項目中,我們將繼電器與PIC微控制器PIC16F877A連接。繼電器是一種機械設備,用于從較低的電壓電平控制高電壓、大電流電器的“ON”或“OFF”。繼電器在兩個電壓電平之間提供隔
    的頭像 發(fā)表于 11-14 16:20 ?3282次閱讀
    將繼電器與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b><b class='flag-5'>PIC16F877A</b>連接的教程

    如何使用PIC微控制器旋轉步進電機

    在本教程中,我們將步進電機與PIC微控制器PIC16F877A連接。
    發(fā)表于 11-15 17:25 ?1425次閱讀
    如何使用<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b>旋轉步進電機

    如何使用PIC微控制器構建一個線路跟隨機器人

    線路跟隨機器人是一個簡單而迷人的機器人,適合大多數(shù)學生/業(yè)余愛好者建造。在本教程中,我們將學習線路跟隨機器人的工作原理以及如何使用 PIC 微控制器 PIC16F877A 構建一個。PIC16
    發(fā)表于 11-30 17:17 ?1525次閱讀
    如何使用<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b>構建一個線路跟隨機器人

    PIC16F877A中斷優(yōu)先級問題

    現(xiàn)在我需要通過串口來接收指令控制PIC16F877A的捕獲脈沖行為,可以做到的是:接收到開捕獲指令后,能正常開始捕獲脈沖,但是再發(fā)送關閉指令卻不能讓它停下來,通過KIT3發(fā)現(xiàn),在捕獲的時候,串口不能
    發(fā)表于 06-06 21:18

    pic16f877a中文資料pdf

    pic16f877a中文資料
    發(fā)表于 07-15 13:20 ?4548次下載
    <b class='flag-5'>pic16f877a</b>中文資料pdf

    基于PIC16F877A的太陽能與市電互補照明系統(tǒng)控制器的設

    基于PIC16F877A的太陽能與市電互補照明系統(tǒng)控制器的設計 介紹了一款以單片機PIC16F877A控制核心的太陽能與市電互補照明系統(tǒng)控制器
    發(fā)表于 04-10 22:06 ?1343次閱讀
    基于<b class='flag-5'>PIC16F877A</b>的太陽能與市電互補照明系統(tǒng)<b class='flag-5'>控制器</b>的設

    PIC16F877A串口發(fā)送查詢方式

    PIC16F877A串口發(fā)送,查詢方式,就為了調出這個費了我一天時間,原來是串口芯片電壓問題,現(xiàn)總結如下
    發(fā)表于 09-01 11:03 ?10次下載
    <b class='flag-5'>PIC16F877A</b>串口發(fā)送查詢方式

    PIC16F877A串口芯片電壓問題

    PIC16F877A串口發(fā)送,查詢方式,就為了調出這個費了我一天時間,原來是串口芯片電壓問題,現(xiàn)總結如下
    發(fā)表于 09-01 11:15 ?9次下載
    <b class='flag-5'>PIC16F877A</b>串口芯片電壓問題

    PIC16F877A的T0定時制作的電子鐘程序

    經過努力,利用PIC16F877A的T0定時制作的電子鐘實驗成功!
    發(fā)表于 05-15 09:42 ?1869次閱讀

    PIC16F877A開發(fā)板 數(shù)碼管動態(tài)掃描實驗

    //****************電子園PIC16F877A開發(fā)板 數(shù)碼管動態(tài)掃描實驗****************//////mcu: PIC16F877A 4MHz //2010年12月
    發(fā)表于 11-16 19:51 ?13次下載
    <b class='flag-5'>PIC16F877A</b>開發(fā)板 數(shù)碼管動態(tài)掃描實驗

    PIC16F877A開發(fā)板 普通IO驅動74595實驗

    //*****************電子園PIC16F877A開發(fā)板 普通IO驅動74595實驗***************////PIC16F877A 實驗板////mcu
    發(fā)表于 11-16 19:51 ?13次下載
    <b class='flag-5'>PIC16F877A</b>開發(fā)板 普通IO驅動74595實驗

    PIC16F877A 看門狗定時實驗

    //*******************PIC16F877A 看門狗定時實驗******************* // //PORTA,PORTB,PORTC,PORTD,PORTE
    發(fā)表于 11-16 20:06 ?8次下載
    <b class='flag-5'>PIC16F877A</b> 看門狗定時<b class='flag-5'>器</b>實驗

    使用熱敏打印機連接PIC16F877A并使用輕觸開關實現(xiàn)打印的教程

    在本教程中,我們將熱敏打印機 CSN A1 與廣泛使用的 PIC 微控制器 PIC16F877A 連接。在本項目中,熱敏打印機連接在PIC16F87
    的頭像 發(fā)表于 11-04 15:10 ?2695次閱讀
    使用熱敏打印機連接<b class='flag-5'>PIC16F877A</b>并使用輕觸開關實現(xiàn)打印的教程

    何在PIC16F877A微控制器中使用EEPROM保存數(shù)據(jù)

    在本教程中,我們將了解使用 **PIC16F877A 微控制器中的 EEPROM** 保存數(shù)據(jù)是多么容易。在大多數(shù)實時項目中,我們可能必須保存一些數(shù)據(jù),即使關閉電源也不應刪除這些數(shù)據(jù)。這聽起來像是一
    的頭像 發(fā)表于 01-25 15:39 ?2423次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>PIC16F877A</b><b class='flag-5'>微控制器</b><b class='flag-5'>中使</b>用EEPROM保存數(shù)據(jù)

    PIC16F877A開發(fā)板原理圖

    PIC16F877A開發(fā)板原理圖免費下載。
    發(fā)表于 03-21 15:47 ?12次下載