RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)外部中斷的好處

CHANBAEK ? 來源:電子開發(fā)之家 ? 作者:小樹 ? 2023-10-31 15:58 ? 次閱讀

圖片
圖1外部中斷及矩陣鍵盤中斷信號示意圖

外部中斷是單片機(jī)實(shí)時(shí)地處理外部事件的一種內(nèi)部機(jī)制。當(dāng)外部事件發(fā)生時(shí),單片機(jī)的中斷系統(tǒng)將迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進(jìn)行中斷事件的處理,中斷完畢后返回被中斷的程序處,繼續(xù)執(zhí)行下去。

中斷過程:

1.中斷當(dāng)前程序并保護(hù)斷點(diǎn)

2.轉(zhuǎn)入中斷服務(wù)入口

3.保護(hù)現(xiàn)場

4.執(zhí)行中斷服務(wù)程序

5.恢復(fù)現(xiàn)場

6.中斷返回

中斷的好處:

1、 提高了CPU的效率

CPU 是計(jì)算機(jī)的指揮中心,它與外圍設(shè)備(如按鍵、顯示器等)通訊的方法有查詢和中斷 2 種。

查詢的方法是無論外圍IO 是否需要服務(wù),CPU 每隔一段時(shí)間都要依次查詢一遍,這種方法 CPU 需要花費(fèi)一些時(shí)間在做查詢服務(wù)工作。

而中斷則是在外圍設(shè)備需要通訊服務(wù)時(shí)主動(dòng)告訴 CPU, CPU 停下當(dāng)前工作去處理中斷程序, 從而提高了CPU 效率。

2、 可以實(shí)現(xiàn)實(shí)時(shí)處理

外設(shè)任何時(shí)刻都可能發(fā)出請求中斷信號,CPU 接到請求后及時(shí)處理,以滿足實(shí)時(shí)系統(tǒng)的需要。

3、 可以及時(shí)處理故障

計(jì)算機(jī)系統(tǒng)運(yùn)行過程中難免會出現(xiàn)故障,有許多事情是無法預(yù)料的,如電源掉電、存儲器出錯(cuò)、外圍設(shè)備工作不正常等,這時(shí)可以通過中斷系統(tǒng)向中斷源 CPU 發(fā)送中斷請求,由 CPU 及時(shí)轉(zhuǎn)到相應(yīng)的出錯(cuò)處理程序,從而提高計(jì)算機(jī)的可靠性。

圖片
圖2中斷名稱

IE 中斷允許控制寄存器

圖片
圖3IE中斷允許控制寄存器

EA:EA = 0 時(shí),所有中斷禁止(即不產(chǎn)生中斷)。

EA = 1 時(shí),各中斷的產(chǎn)生由個(gè)別的允許位決定。

EX1:外部中斷INT1中斷允許。

EX0:外部中斷INT0中斷允許。

中斷程序格式:

圖片
圖4外部中斷程序格式

矩陣鍵盤中斷掃描程序:

#include< reg52.h > //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義#define KeyPort  P0
sbit dula=P2^1;
sbit wela=P2^0;

unsigned char code  DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
		                  	         0x77,0x7c,0x39,0x5e,0x79,0x71};// 顯示段碼值0~F
unsigned char num; 

void DelayUs2x(unsigned char t);//us級延時(shí)函數(shù)聲明
void DelayMs(unsigned char t); //ms級延時(shí)
unsigned char KeyScan(void);//鍵盤掃描
unsigned char KeyPro(void);

void display(unsigned char aa);
/*------------------------------------------------
                    主函數(shù)
------------------------------------------------*/
void main (void)
{ 
	dula=1;
	P1=0xff;
	dula=0;
	wela=1;
	P1=0x00;
	wela=0;                 


	EA=1;          //全局中斷開
	EX0=1;         //外部中斷0開
	IT0=1;         //邊沿觸發(fā)

while (1)         //主循環(huán)
  {
	display(num);
	KeyPort=0xf0;// 賦值用于中斷檢測		
 }
}

void display(unsigned char aa)
{
	dula=1;
	P1=DuanMa[aa];
	dula=0;		
}
/*------------------------------------------------
 uS延時(shí)函數(shù),含有輸入參數(shù) unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時(shí)請使用匯編,大致延時(shí)
 長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
	while(--t);
}
/*------------------------------------------------
 mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時(shí)請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{

	while(t--)
	{
		//大致延時(shí)1mS
		DelayUs2x(245);
		DelayUs2x(245);
	}
}


/*------------------------------------------------
按鍵掃描函數(shù),返回掃描鍵值
------------------------------------------------*/
unsigned char KeyScan(void)  //鍵盤掃描函數(shù),使用行列逐級掃描法
{
 unsigned char Val;
 KeyPort=0xf0;//高四位置高,低四位拉低
 if(KeyPort!=0xf0)//表示有按鍵按下
   {
    DelayMs(10);  //去抖
	if(KeyPort!=0xf0)
	  {           //表示有按鍵按下
    	KeyPort=0xfe; //檢測第一行
		if(KeyPort!=0xfe)
	  		{
			  Val=KeyPort&0xf0;
	  	      Val+=0x0e;
	  		  while(KeyPort!=0xfe);
			  DelayMs(10); //去抖
			  while(KeyPort!=0xfe);
	     	  return Val;
	        }
        KeyPort=0xfd; //檢測第二行
		if(KeyPort!=0xfd)
	  		{
			  Val=KeyPort&0xf0;
	  	      Val+=0x0d;
	  		  while(KeyPort!=0xfd);
			  DelayMs(10); //去抖
			  while(KeyPort!=0xfd);
	     	  return Val;
	        }
    	KeyPort=0xfb; //檢測第三行
		if(KeyPort!=0xfb)
	  		{
			  Val=KeyPort&0xf0;
	  	      Val+=0x0b;
	  		  while(KeyPort!=0xfb);
			  DelayMs(10); //去抖
			  while(KeyPort!=0xfb);
	     	  return Val;
	        }
    	KeyPort=0xf7; //檢測第四行
		if(KeyPort!=0xf7)
	  		{
			  Val=KeyPort&0xf0;
	  	      Val+=0x07;
	  		  while(KeyPort!=0xf7);
			  DelayMs(10); //去抖
			  while(KeyPort!=0xf7);
	     	  return Val;
	        }
     }
   }
  return 0xff;
}
/*------------------------------------------------
按鍵值處理函數(shù),返回掃鍵值
------------------------------------------------*/
unsigned char KeyPro(void)
{
 switch(KeyScan())
 {
  case 0x7e:return 0;break;//0 按下相應(yīng)的鍵顯示相對應(yīng)的碼值
  case 0x7d:return 1;break;//1
  case 0x7b:return 2;break;//2
  case 0x77:return 3;break;//3
  case 0xbe:return 4;break;//4
  case 0xbd:return 5;break;//5
  case 0xbb:return 6;break;//6
  case 0xb7:return 7;break;//7
  case 0xde:return 8;break;//8
  case 0xdd:return 9;break;//9
  case 0xdb:return 10;break;//a
  case 0xd7:return 11;break;//b
  case 0xee:return 12;break;//c
  case 0xed:return 13;break;//d
  case 0xeb:return 14;break;//e
  case 0xe7:return 15;break;//f
  default:return 0xff;break;
 }
}
/*------------------------------------------------
                 外部中斷0程序
------------------------------------------------*/
void ISR_INT0(void) interrupt 0 
{ 
	num=KeyPro();  
	IE0=0;
}

接線方式:

杜邦線連接(用杜邦線連接<單片機(jī) IO>和<模塊接口>)

圖片
表6.1接線

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

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634629
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10854

    瀏覽量

    211574
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    898

    瀏覽量

    41470
  • 矩陣鍵盤
    +關(guān)注

    關(guān)注

    7

    文章

    206

    瀏覽量

    31454
  • 外部中斷
    +關(guān)注

    關(guān)注

    1

    文章

    131

    瀏覽量

    15816
收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)實(shí)驗(yàn)_外部0中斷

    基于偉幅實(shí)驗(yàn)箱的單片機(jī)中斷實(shí)驗(yàn) ,外部中斷
    發(fā)表于 12-07 18:23 ?3次下載

    基于單片機(jī)外部中斷的設(shè)計(jì)

    外部中斷單片機(jī)中占有很重要的作用。而且外部中斷的優(yōu)先級默認(rèn)是最高的。平臺單片機(jī)一般有兩個(gè)
    發(fā)表于 09-15 15:14 ?9次下載
    基于<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>的設(shè)計(jì)

    單片機(jī)外部中斷程序下載

    單片機(jī)外部中斷程序和電路圖,通過按鍵控制計(jì)數(shù)和清零操作
    發(fā)表于 05-21 10:57 ?0次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>程序下載

    51單片機(jī)外部中斷應(yīng)該如何觸發(fā)

    51單片機(jī)外部中斷有兩種觸發(fā)方式可選:電平觸發(fā)和邊沿觸發(fā)。選擇電平觸發(fā)時(shí),單片機(jī)在每個(gè)機(jī)器周期檢查中斷源口線,檢測到低電平,即置位
    發(fā)表于 09-04 17:27 ?5次下載
    51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>應(yīng)該如何觸發(fā)

    51單片機(jī)外部中斷有哪些觸發(fā)方式

    51單片機(jī)有兩個(gè)外部中斷申請輸入端:INT0 和 INT1。 51單片機(jī)外部中斷,分為低電平
    發(fā)表于 08-13 17:32 ?3次下載
    51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>有哪些觸發(fā)方式

    使用單片機(jī)外部中斷的使用C語言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)外部中斷的使用C語言程序免費(fèi)下載。
    發(fā)表于 04-02 16:01 ?9次下載

    51單片機(jī)外部中斷0實(shí)例詳解

    今天就以51單片機(jī)外部中斷0為例,來簡單講解一下單片機(jī)中斷的用法。1 51單片機(jī)
    發(fā)表于 11-11 12:51 ?19次下載
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>0實(shí)例詳解

    基于51單片機(jī)外部中斷設(shè)計(jì)

    基于51單片機(jī)外部中斷(嵌套)選用芯片AT89S52/***********************************************************此中斷函數(shù)
    發(fā)表于 11-20 18:06 ?10次下載
    基于51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>設(shè)計(jì)

    51單片機(jī)外部中斷拓展(兩個(gè)以上的外部中斷

    在很多單片機(jī)中,外部中斷的個(gè)數(shù)都是有限的,而很多現(xiàn)實(shí)場景需要有多個(gè)外部中斷同時(shí)進(jìn)行,這時(shí)候單片機(jī)
    發(fā)表于 11-22 11:36 ?27次下載
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>拓展(兩個(gè)以上的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>)

    51單片機(jī)外部中斷方式 ——— INT0 中斷

    51單片機(jī)外部中斷方式 ——— INT0 中斷
    發(fā)表于 11-22 11:51 ?153次下載
    51<b class='flag-5'>單片機(jī)</b>之<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>方式 ———  INT0 <b class='flag-5'>中斷</b>

    11.51單片機(jī)外部中斷實(shí)驗(yàn)

    利用51單片機(jī)完成一系列中斷的操作,檢驗(yàn)中斷相關(guān)知識。文章目錄題目重述問題分析以及求解思路程序代碼問題1代碼問題2代碼題目重述實(shí)驗(yàn)前準(zhǔn)備:51單片機(jī)的實(shí)驗(yàn)連線圖如下所示1.編程實(shí)現(xiàn)無
    發(fā)表于 11-22 12:06 ?13次下載
    11.51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>實(shí)驗(yàn)

    STM32單片機(jī)外部中斷配置講解

    STM32單片機(jī)外部中斷配置講解01單片機(jī)外部中斷簡介所謂
    發(fā)表于 11-22 12:36 ?14次下載
    STM32<b class='flag-5'>單片機(jī)</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>配置講解

    單片機(jī)系統(tǒng)設(shè)計(jì)技術(shù)——外部中斷

    外部中斷一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)內(nèi)容三、實(shí)驗(yàn)步驟四、C代碼如下五、實(shí)驗(yàn)結(jié)果六、實(shí)驗(yàn)體會一、實(shí)驗(yàn)?zāi)康恼莆?b class='flag-5'>單片機(jī)外部中斷的基本使用方法 了解
    發(fā)表于 11-23 17:51 ?15次下載
    <b class='flag-5'>單片機(jī)</b>系統(tǒng)設(shè)計(jì)技術(shù)——<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    51單片機(jī)外部中斷實(shí)驗(yàn)

    前面,我們講了51單片機(jī)的輸入和輸出功能,今天講點(diǎn)不一樣的,外部中斷測試。
    發(fā)表于 07-11 11:41 ?1166次閱讀
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>實(shí)驗(yàn)

    STM32單片機(jī)外部中斷簡介 STM32單片機(jī)外部中斷的配置過程

    STM32 單片機(jī)是一款高性能、低功耗的 32 位微控制器,具有強(qiáng)大的計(jì)算能力、靈活的外設(shè)模塊以及優(yōu)秀的擴(kuò)展性,開發(fā)周期短、成本低。在單片機(jī)應(yīng)用中,外部中斷是一種重要的硬件觸發(fā)方式,本
    發(fā)表于 08-15 18:21 ?3032次閱讀
    RM新时代网站-首页