求一个单片机外部中断程序,要求用按键模拟单片机外部中断输入源,当按键按下时产生中断,进行中断处理

P1口连接8个发光二极管,用来反映中断程序处理过程.中断未发生时,LED做闪烁状态,当有中断产生,LED呈流水灯操作

1、打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。

2、首先要导入51单片机的头文件,否则后续使用的端口都会出现未定义的情况,然后在主函数中,使得EA=1,即总中断允许,打开中断的总开关。

3、然后分别打开外部中断0和外部中断1的分开关,即EX0=1和EX1=1。

4、编写完主函数后,我们要为两个中断分别编写对应的中断服务函数,才能在中断发生后产生相应的响应,注意外部中断0和外部中断1的中断号分别是0和2。

5、然后到Project菜单中的output项目中勾选Create Hex  File,OK后点击编译按钮,如果没有错误,即可生成可以烧录或者仿真的.hex文件。

6、最后把生成出的.hex烧入进51单片机进行运行或者装载入Proteus仿真系统进行仿真。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-07

你要的连接在P1口上,写的时候没注意,用了p2口,不过都是一样。如果有什么不明白的地方,可以再问。

 

 

/*P2口连接8个发光二极管,用来反映中断程序处理过程.
 中断未发生时,LED做闪烁状态,当有中断产生,LED呈流水灯操作
*/
#include<reg52.h>  //52单片机头文件
#include<intrins.h>    //单片机内部子函数
#define uint unsigned int  //定义uint为无符号整型
#define uchar unsigned char
//延时函数
void delay()
{
 uint a=30000;
 while(a--)_nop_();
}
//主函数
void main()
{
  P2=0xff; //P2口初始化
  do
  { 
     P2=~P2;  //让LED闪烁
     delay();  //调用延时函数
  }while(INT0==1); 
     EA=1;   //开总中断
     EX0=1;   //允许外部中断0
 }
//中断服务程序 
void srv_INT0() interrupt 0   
{
 uchar a=0xfe;    //定义中间变量
 while(INT0==0)    //开关闭合,产生中断
 { 
     P2=a;
  a=_crol_(a,1);    //循环左移
  delay();

 }
 P2=0xff;     //关闭所有的led,避免干扰
}

第2个回答  推荐于2017-09-03
#include<reg51.h>
void main()
{
EX0=1;
EA=1;
IT0=1;
while(1)
{
P1=0x00;
//延时
P=0xff;
//延时
}
}
void T() interrupt 0
{
P=0xfe;延时;P=0xfd;延时;P=0xfb;延时;P=0xf7;延时;P=0xef;延时;P=0xdf;延时;P=0xbf;延时;P=0x7f;延时;
}

延时程序自己写一个。本回答被网友采纳
相似回答