专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机中断应用程序

作者:佚名   来源:本站原创   点击数:  更新时间:2010年10月06日   【字体:
/*单片机中断反应 */
//==声明区=====================================================================================================
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint a);
bit c,b;
//==主程序区===================================================================================================
void main()
{
 EA=1;//打开总中断
 EX0=1;//打开外部中断0
 IT0=0;//将中断0设置为电平触发
 IT1=0;//将中断0设置为电平触发

 EX1=1;//打开外部中断1
 while(1)
 {
  P1=0xfe;//关掉INT0里面的LED
  P0=0xff;//关掉INT1里面的数码管
  P0=0x00;
  P2=0xf8;
   P1=0xfe;
  while(1); 
 }
}
//=子程序区=====================================================================================================
void delay(uint a)
{
 uint b,c;
 for(b=a;b>0;b--)
  for(c=110;c>0;c--);
}
void Int0() interrupt 0//外部中断0的服务子程序不用在声明区声明的
{
 uint a;
 a=10;
  while(a--)//这里不能用while(1)如果不是的话当外部中断已经成了高电平,但无法跳出中断服务子程序
 {
  P0=0x00;
  P2=0xf8;
   P1=0xff;
  delay(1000);
  P1=0x00;
  delay(1000);
 }
}
void Int1() interrupt 2//外部中断1 的服务子程序也是不用在声明区声明的。 
{
 delay(1);
 c=P3^3;
 if(c==0)
 {
  delay(1);
  if(c==0)
  {
   uint a;
   a=10;
   while((a--))//这里不能用while(1)如果不是的话当外部中断已经成了高电平,但无法跳出中断服务子程序
   {
   
    P1=0xff;
    P2=0xf8;
    P0=0x3f;
    delay(1000);
    P2=0xf9;
    P0=0x00;
    delay(1000);
    P2=0xf8;
    P0=0x06;
    delay(1000);
    P2=0xf8;
    P0=0x5b;
    delay(1000);
    P2=0xf8;
    P0=0x4f;
    delay(1000);
    P2=0xf8;
    P0=0x66;
    delay(1000);
    P2=0xf8;
    P0=0x6d;
    delay(1000); 
    
   }
  } 
 }


}
/*程序功能是第一个LED亮的,P3^2口是低电平是进入中断程序,中断实现功能是八个LED一起闪烁。P3^3口是低电平是进入外部中断1,
外部中断1的程序实现是,第一个数码管显示0,1,2,3,4,5.但我还没有弄明白为什么0和1转换的时候有一个时间间隔而大家的延时
都是一样,但是在显示就不一样了。
程序实现在中断结束以后INT0的8个LED还是在点亮的,INT1的最后的一个数码管还是点亮的,因为没有在主程序里面关掉LED和数码管。
注意我的开发板P0口是接数码管(是共阴极的)P2口是74HC138,P1口是LED*/
关闭窗口

相关文章