OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机STC89C51单片机两个按键外部中断,按这两个按键都会执行int0 不知

共2条 1/1 1 跳转至

单片机STC89C51单片机两个按键外部中断,按这两个按键都会执行int0 不知道怎么回事啊 求大神给看看程序吧

菜鸟
2016-09-02 15:44:06    评分

P3.2 P3.3接两个按键 中断INT0控制变量ledmod INT1控制变量tk,为什么按这两个按键都会改变ledmod的值呢?

include <STC12C5A60S2.H>
#include <intrins.h>
sbit FN1=P3^2;
sbit FN2=P3^3;
unsigned int ledmod=1;  //LED模式标识
unsigned int tk=5;  //LED时间变量
unsigned char pwroff=0;  //掉电模式标识
void Fn1int(void);
void Fn2int(void);
void Ledmod1(void);
void Ledmod2(void);
void Ledmod3(void);
void Pwrdown(void);
void Delay(unsigned int n);
void Intsystemset(void)  //中断配置
{
	IT0=0;
	EX0=1;
	IT1=0;	
	EX1=1;
	EA=1; 	
}
void Delay(unsigned int n)  //延时程序
{
	unsigned int  i,j;
	for(i=0;i<n;i++)
		for(j=0;j<50;j++);
}
void Fn1int() interrupt 0  //INT0中断
{
	unsigned int m0=ledmod;
	EA=0;
	pwroff=0;	
	Delay(200);
		if(FN1==0)
		{
			while(FN1==0)
			{
			}
			if(m0>=3)
			{ledmod=1;}
			if((m0>=1)&&(m0<3))
			{ledmod=ledmod+1;}			
		}	
	EA=1;
}
void Fn2int() interrupt 2  //INT1中断
{
	unsigned int e1=tk;
	EA=0;
	pwroff=0;
	Delay(200);
		if(FN2==0)
		{
			while(FN2==0)
			{
			}
			if(e1<=1)
			{tk=10;}
			if((e1>1)&&(e1<11))
			{tk=tk-1;}			
		}
	EA=1;
}
void Pwrdown(void)  //掉电模式函数
{
	P4SW=0X70;
	P0=0X00;
	P1=0X00;
	P2=0X00;
	P4=0X00;  //进入掉电模式
	PCON=0X02; 
	_nop_();
	_nop_();
}
void main(void)  //主函数
{
	unsigned int  mi,mj;	
	P4SW=0X70;
	P0M1=0X00;
	P0M0=0X7F;
	P1M1=0X00;
	P1M0=0X7F;
	P2M1=0X00;
	P2M0=0X7F;
	P4M1=0X00;
	P4M0=0X3F;  //端口配置
	Intsystemset();//配置中断
	while(1)
	{
	if((ledmod=1)&&(pwroff==0))
		{Ledmod1();}
	if((ledmod=2)&&(pwroff==0))
		{Ledmod2();}
	if((ledmod=3)&&(pwroff==0))
		{Ledmod3();}
	if(pwroff==1)
		{
			P0=0X00;
	    P1=0X00;
	    P2=0X00;
	    P4=0X00;
			for(mi=0;(mi<600)&&(pwroff==1);mi++) //掉电模式等待
			{
				for(mj=0;mj<100;mj++)
				{
				Delay(100);		
				}				
			}
			if(pwroff==1)
			{Pwrdown();}  //进入掉电模式
		}
	}
}

 



菜鸟
2016-09-02 19:34:14    评分
2楼
已找到原因 主程序== 写成了=

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]