标题: [求助] [打印本页]

作者: 卡忆    时间: 2012-4-6 09:20
标题: [求助]
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit d2=P2;   		 	//定义P2口LED。
sbit n1=P1^3;  			//定义P1^3口的LED灯。
void delay(int);
uint num;
uint table[]={
				0xc0,0xf9,0xa4,0xb0,
				0x99,0x92,0x82,0xf8,
				0x80,0x98,0x88,0x83,
				0xc6,0xa1,0x86,0x8e
};							//控制数码管段码从0——F亮。
void main(void) { EA=1; //开总中断开关 EX0=1; //开外部中断0 IT0=0; //设置中断触发方式 while(1) { for(num=0;num<16;num++) {
				d2=0; 		  //点亮数码管
				P0=table[num];
				delay(12450);     //延时闪烁。
				d2=1; 		  //关闭数码管。
			 }

	 }
}
void delay(int z)				//延时程序。
{
	uint i,j;
	 for(i=z;i>0;i--)
	  for(j=2;j>0;j--);
}
            
void exter0() interrupt 0       //中断程序。
     {
      n1=0;			//打开P1^3口
	  delay(1);		//延时。
     }   
  

 

我用的单片机是没有锁存器的,数码管是共阳极的。与外部中断相关的是P3.2口。

我用线把P3.2接地。按理来说,如果不拔掉这个线,中断就没有停止,也就回不了主程序中去。但是没有,单片机还会回到主程序中去执行数码管的闪烁,一顿饭时间,数码管就从6变为C,只是数码管闪烁得慢了很多,但并没有停止。

我不明白这个程序哪里出错了?


作者: cuijinjunh    时间: 2012-4-6 09:46

void exter0() interrupt 0       //中断程序。
     {
      n1=0; //打开P1^3口
  delay(1); //延时。
     }   
 

 

你试试 把这个段 改成

 

void exter0() interrupt 0       //中断程序。
{
while(1)     

{

   n1=0; //打开P1^3口
   delay(1); //延时。

}
}   
 


作者: 卡忆    时间: 2012-4-6 21:20
谢谢您!我试试看。
作者: 卡忆    时间: 2012-4-13 09:20
很感谢您的建议!我试过了,这样好像行不通的。我把程序烧进去,按下P3.2口的按键(我单片机外部中断的接口是P3.2口),然后松开手,数码管的数字就一直瓮中保持不变了,也就是说它跳不出中断程序,回不到主程序了。所以这样写也不行的。不过还是很感谢您的建议。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1