找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 9682|回復(fù): 3
收起左側(cè)

[已解決]一個關(guān)于用鍵盤實現(xiàn)外部中斷的問題

[復(fù)制鏈接]
ID:7020 發(fā)表于 2008-11-20 12:19 | 顯示全部樓層 |閱讀模式
小弟最近初學單片機,用C語言編程,買了一塊板子,想用單片機的外部中斷做幾個試驗,我想實現(xiàn)的效果是當  單片機上電之后,小燈閃爍,然后當按下一個按鍵之后產(chǎn)生外部中斷,小燈停止閃爍一段時間之后,另外一個小燈閃爍, 就是這么一個簡單的功能,可是無奈我對單片機的中斷執(zhí)行過程不是很清楚,寫出的程序,上電之后發(fā)現(xiàn)單片機并不響應(yīng)鍵盤的外部中斷!還是上電時的初始狀態(tài),哪位大哥(大姐也行)能貼一下代碼幫我解決一下這個問題么?(我的單片機獨立鍵盤由P1.0-P1.3口控制,8個LED燈由P0口控制)下面是我寫的代碼

#include <reg52.h>
sbit key0=P1^0; //按鍵位
sbit D=P3^2; //外部中斷口
void keydelay(int z)//消抖延時函數(shù)
{
 int x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
 }

void delaytime(int ms)//控制小燈的閃爍
{
 int x,y;
 for(x=ms;x>0;x--)
 for(y=200;y>0;y--);
}

void main()
{
 IT0=0; 
 EA=1;
 EX0=1;
 P1=0xff; //獨立鍵盤位置1
 while(1)
 {
  if(key0==0) // 判斷鍵盤是否按下
  keydelay(15);//消抖
  if(key0==0)
  {
   D=0;//產(chǎn)生外部中斷
  while(!key0); 
  }

 while(1)//上電時小燈閃爍
   {
    P0=0xfe;
    delaytime(10);
    P0=0xff;
    delaytime(10);
   } 
  } 
}

void extinter() interrupt 0 //中斷處理

P0=0xff; //燈滅
delaytime(5);
while(1)
 {
  P0=0x7f;
  delaytime(10);
  P0=0xff;
  delaytime(10);
 }

}

[此貼子已經(jīng)被作者于2008-11-21 12:38:58編輯過]
回復(fù)

使用道具 舉報

ID:7040 發(fā)表于 2008-11-20 17:42 | 顯示全部樓層
你的中斷沒有打開,所以單片機是不會響應(yīng)中斷的,將主程序改為下面就可以了.
 
void main()
{
 IT0=1; 
 EA=1;
 EX0=1; 
   //開中斷
 P1=0xff; //獨立鍵盤位置1
 while(1)
 {
  if(key0==0) // 判斷鍵盤是否按下
  keydelay(15);//消抖
  if(key0==0)
  {
   D=0;//產(chǎn)生外部中斷
  while(!key0); 
  }
 while(1)//上電時小燈閃爍
   {
    P0=0xfe;
    delaytime(10);
    P0=0xff;
    delaytime(10);
   } 
  } 
}

回復(fù)

使用道具 舉報

ID:7020 發(fā)表于 2008-11-21 11:22 | 顯示全部樓層

那個的確是一個錯誤(大意了!不好意思!)但是改過以后運行還是不行��!老師對我說是由于INT0口不能通過軟件置0來響應(yīng)中斷!不知道是不是這個原因...

回復(fù)

使用道具 舉報

ID:7020 發(fā)表于 2008-11-21 12:38 | 顯示全部樓層

問題解決了!就是那個原因,我換了一種觸發(fā)外部中斷方式就可以了

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表