精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

中斷流程分析與示例

田豐 ? 來源:jf_35235301 ? 作者:jf_35235301 ? 2023-11-25 12:30 ? 次閱讀

中斷的概念:
CPU在處理某一事件A時,發生了另一事件B的請求(中斷請求);CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務);待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續處理事件A(中斷返),這一過程稱為中斷。

wKgaomVhd2qAfwCeAAczh1MgDBc191.png中斷執行過程圖

如何執行如上圖所示:先執行主程序,到達斷點的地方出現中斷請求,此時執行中斷響應,執行中斷處理程序,執行完中斷返回斷點,再繼續執行主程序。

中斷源:
引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請求。CPU暫時中斷原來的事務A,轉去處理事件B。對事件B處理完畢后,再回到原來被中斷的地方(即斷點),稱為中斷返回。實現上述中斷功能的部件稱為中斷系統(中斷機構)。
中斷的優點:
分時操作:CPU可以分時為多個外設服務,提高了計算機的利用率;
實時響應:CPU能夠及時處理應用系統的隨機事件,系統的實時性大大增強;
可靠性高:CPU具有處理設備故障及掉電等突發性事件能力,從而使系統可靠性提高。

定義中斷函數的一般形式:
viod 函數名() interrupt n
(1) interrupt必須要加,表示定義成中斷服務函數。
(2)后面n是中斷號,中斷號是編譯器識別不同中斷的唯一編號.
中斷服務函數和普通函數的異同:
同:函數的形式非常類似,中斷響應過程和普通函數調用過程也非常相似。
異:①中斷服務函數不需要聲明,普通函數一般需要聲明。②普通函數的執行是可預測的;而中斷服務函數的執行是不可預測的。③普通函數的跳轉是軟件(函數調用語句)完成的;中斷的跳轉(中斷響應)是由硬件完成的,只要發生了中斷事件,并且中斷被允許,硬件自動會幫我們完成中斷的跳轉(中斷響應)。④普通函數:通過函數名找到被調用函數;中斷服務函數:通過中斷號找到中斷服務函數。所以我們可以知道,中斷服務函數中的函數名其實并沒有什么作用。
使用中斷函數時應遵循以下規則:
(1)中斷函數不能進行參數轉遞;
(2)在任何情況下,都不能直接調用中斷函數。

那么我們如何通過keil使用51單片機外部中斷0觸發數碼管顯示三位數字呢?

下面給予chatGPT示例

#include

sbit LED = P1^0; //定義LED連接的IO口
sbit KEY = P3^2; //定義KEY連接的IO口

unsigned int num = 0; //定義計數器

void delay(unsigned int x) //延時函數
{
unsigned int i, j;
for(i=0; i for(j=0; j<125; j++);
}

void display(unsigned int n) //數碼管顯示函數
{
unsigned char code table[] = { //數碼管顯示表
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};
unsigned int i, j;
for(i=0; i<3; i++)
{
P2 = 0xff; //關閉所有數碼管
switch(i) //選擇要顯示的數位
{
case 0:
P0 = 0xfe; //第一位數碼管
break;
case 1:
P0 = 0xfd; //第二位數碼管
break;
case 2:
P0 = 0xfb; //第三位數碼管
break;
}
P2 = table[n%10]; //顯示個位數字
delay(1); //延時一段時間
P2 = 0xff; //關閉所有數碼管
switch(i) //選擇要顯示的數位
{
case 0:
P0 = 0xfd; //第二位數碼管
break;
case 1:
P0 = 0xfb; //第三位數碼管
break;
case 2:
P0 = 0xf7; //第四位數碼管
break;
}
P2 = table[n/10%10]; //顯示十位數字
delay(1); //延時一段時間
P2 = 0xff; //關閉所有數碼管
switch(i) //選擇要顯示的數位
{
case 0:
P0 = 0xfb; //第三位數碼管
break;
case 1:
P0 = 0xf7; //第四位數碼管
break;
case 2:
P0 = 0xef; //第五位數碼管
break;
}
P2 = table[n/100%10]; //顯示百位數字
delay(1); //延時一段時間
P2 = 0xff; //關閉所有數碼管
switch(i) //選擇要顯示的數位
{
case 0:
P0 = 0xf7; //第四位數碼管
break;
case 1:
P0 = 0xef; //第五位數碼管
break;
case 2:
P0 = 0xdf; //第六位數碼管
break;
}
P2 = table[n/1000%10]; //顯示千位數字
delay(1); //延時一段時間
}
}

void main()
{
EA = 1; //開啟總中斷
EX0 = 1; //開啟外部中斷0
IT0 = 1; //設置外部中斷0為下降沿觸發
while(1)
{
display(num%1000); //顯示后三位數字
}
}

void Interrupt0() interrupt 0 //外部中斷0中斷服務函數
{
num++; //計數器加1
LED = ~LED; //LED翻轉
}
在上面的代碼中,我們定義了一個計數器num,并在外部中斷0中斷服務函數中將其加1。同時,在main函數中,我們使用display函數來顯示num的后三位數字。display函數中使用了一個數碼管顯示表來將數字轉換為數碼管的顯示碼,然后通過控制數碼管的選擇位和段選位來實現數碼管的顯示。在每次顯示完一個數位后,我們都會延時一段時間,以控制數碼管的亮度和顯示效果。最后,我們在main函數的無限循環中不斷調用display函數,以實現數碼管的動態顯示。

需要注意的是,在使用外部中斷0時,我們需要先開啟總中斷(EA=1),然后再開啟外部中斷0(EX0=1)。同時,我們還需要設置外部中斷0的觸發方式,可以選擇下降沿觸發(IT0=1)或者上升沿觸發(IT0=0),具體根據實際情況而定。在外部中斷0中斷服務函數中,我們可以進行一些需要立即響應的操作,比如計數器加1、LED翻轉等。

我覺得還是太復雜了(主要是太多了不想看又看不懂emmm),下面是我通過keil使用51單片機外部中斷0觸發數碼管顯示后三位學號的示例代碼:

#include
#define duan P0
#define uchar unsigned char
sbit wei1 = P2^4;//定義第一位數碼管
sbit wei2 = P2^5;//定義第二位數碼管
sbit wei3 = P2^6;//定義第三位數碼管
sbit wei4 = P2^7;//定義第四位數碼管

uchar code sz[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay (unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--) //i=xms即延時xms
for(j=112;j>0;j--);
}

void main()
{
EX0 = 1;//INT0中斷允許
EA = 1;//全局中斷打開
IT0 = 0;//觸發方式為低電平觸發

while(1)
{
duan = sz[8];
wei1 = 0;
wei2 = 0;
wei3 = 0;
wei4 = 1;
delay(0);
duan = sz[2];//0111 1100 "b"
wei1 = 0;
wei2 = 0;
wei3 = 1;
wei4 = 0;
delay(0);
duan = sz[6];
wei1 = 0;
wei2 = 1;
wei3 = 0;
wei4 = 0;
delay(0);
duan = sz[7];
wei1 = 1;
wei2 = 0;
wei3 = 0;
wei4 = 0;
delay(0);
}
}

void low()interrupt 0
{
wei1 = 0;
delay(0);
}

wKgaomVjGM-APz5EAADIZdO7cxQ736.png運行結果

wKgZomVjGWGADNLKAAhz7ubzg1w506.png硬件顯示效果

顯示效果:顯示4位學號7628,通過外部中斷0使第一位數碼管不亮,從而顯示學號后三位。

總結:P3.2由ITO(TCON.0)選擇其為低電平有效。當CPU檢測到P3.2引腳上出現有效的中斷信號時,中斷標志 IEO(TCON.1)置1,向CPU申請中斷。

審核編輯 黃宇

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

    關注

    6023

    文章

    44376

    瀏覽量

    628384
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10702

    瀏覽量

    209367
收藏 人收藏

    評論

    相關推薦

    stm32中斷怎么處理的

    中斷是指在程序執行過程中,由硬件或軟件的觸發而打斷正常的程序執行流程,暫時轉去執行特定的處理程序,并在完成后返回原來的程序流程中斷可以分為硬件
    的頭像 發表于 01-02 17:35 ?2171次閱讀

    實戰經驗 | 數據意外變化導致條件判斷流程異常

    關鍵詞:數據意外變化導致條件判斷流程異常 目錄預覽 1、問題描述 2、問題分析 3、小結 01 問題描述 用戶使用的 MCU 型號是 STM32H750VB。? 在客戶的代碼中有多個條件語句,在條件
    的頭像 發表于 12-07 10:00 ?400次閱讀

    中斷流程分析示例筆記

    中斷流程分析示例 一、用圖文并茂的方式闡述中斷的基本概念 對于單片機來講,中斷是指 CPU
    發表于 12-05 10:23

    51單片機中斷流程分析

    51單片機中斷系統
    發表于 12-05 09:37 ?1次下載

    中斷流程分析示例學習筆記

    中斷基本概念: CPU在處理某一事件A時,另一事件B發出請求(中斷請求);CPU暫時中斷當前的工作,轉去 處理實踐B(中斷響應和中斷服務);
    發表于 12-04 21:27

    C51單片機中斷流程分析示例

    一,闡述中斷的基本概念 1.中斷流程示意圖及過程說明: (1)流程示意圖: (2)執行過程描述說明: 當CPU在處理事件A時,另一事件B發出請求(中斷請求); CPU暫時
    發表于 12-01 17:09

    FIQ為例說明其中斷處理流程

    可能是其它的,但是肯定關于此時CPU狀態的。)然后跳轉到異常向量 表入口處執行中斷處理流程 。 2-執行中斷處理流程 fiq_aarch64 函數主要
    的頭像 發表于 11-07 17:48 ?1015次閱讀

    RK3568外部IO中斷示例

    ?外部IO中斷介紹本篇文章以萬象奧科HD-RK3568-IOT評估板中GPIO30為例,介紹Linux內核中斷的注冊方法,使用中斷的方式檢測GPIO30是否出現上升沿信號。中斷在lin
    的頭像 發表于 11-03 13:56 ?782次閱讀
    RK3568外部IO<b class='flag-5'>中斷</b><b class='flag-5'>示例</b>

    中斷的完整流程是什么樣子

    如何從軟件與硬件的角度去看一個中斷,一個中斷的完整流程應該是什么樣子? ?創建對應的中斷服務函數(軟件):在編寫操作系統或應用程序時,需要為每個中斷
    的頭像 發表于 10-30 17:12 ?993次閱讀

    STM32的完整啟動流程分析

    STM32的完整啟動流程分析
    的頭像 發表于 10-25 16:00 ?1186次閱讀
    STM32的完整啟動<b class='flag-5'>流程</b><b class='flag-5'>分析</b>

    FAQ0133外設事件中斷響應流程及注意事項

    外設事件中斷響應流程及注意事項介紹一種保障回調任務可被精確響應的方法
    發表于 10-23 07:47

    CAN總線關閉故障的診斷流程

    汽車CAN總線關閉故障發生時,應分析物理層包括CAN線路、CAN控制器及收發器、CAN信號干擾等外在因素,同時分析CAN寄存器及軟件處理,重新初始化CAN驅動和恢復正常后,定時嘗試往外發送報文。
    發表于 10-16 15:36 ?1323次閱讀
    CAN總線關閉故障的診<b class='flag-5'>斷流程</b>

    GIC驅動的執行流程是什么

    驅動流程分析 GIC驅動的執行流程如下圖所示: 首先需要了解一下鏈接腳本 vmlinux.lds ,腳本中定義了一個 __irqchip_of_table 段,該段用于存放中斷控制器信
    的頭像 發表于 09-28 15:09 ?417次閱讀
    GIC驅動的執行<b class='flag-5'>流程</b>是什么

    Linux設備模型流程分析示例

    流程分析 kobject/kset 的相關代碼比較簡單,畢竟它只是作為一個結構體嵌入其他high-level的結構中,充當紐帶的作用。不過,我還是簡單的上一張圖吧: 完成的工作基本就是分配結構體
    的頭像 發表于 09-28 14:51 ?339次閱讀
    Linux設備模型<b class='flag-5'>流程</b><b class='flag-5'>分析</b>和<b class='flag-5'>示例</b>

    PLC中斷功能詳解

    plc這樣理解中斷功能,在理解中斷時,首先要清楚plc的運算周期或者說是掃描周期,有必要說下plc順控循環執行的流程,這是理解中斷的前提,必須要掌握,分為三部分,輸入處理、程序處理、輸
    發表于 09-28 11:12 ?892次閱讀
    PLC<b class='flag-5'>中斷</b>功能詳解