一个简单的方法,设置两个标志,例如Flag0 、Flag1,初值为0
在主函数中配置置中断0和1并开启中断,再主程序查询Flag0 和Flag1,Flag0=1,是开始(注意查询到为1后记得清掉Flag0=1),中断0和1的服务程序就写上Flag0 和Flag1 为1 即可
仅提供一个思路,很简单的一个程序,还是不附上代码了,还有问题可以咨询。
按键一端接地,另一端接P3^2 就是外部中断0 ,,
sbit key = P3^2;
void main()
{
EX0 = 1;
IT0 = 1;
EA = 1;
while(1)
{
这里写你的功能;
}
}
void int0() interrupt 0
{
unsigned int i = 0;
while(1)
{
if(key == 0)
{
i++;
if(i >= 1000)
{
i=0;
flag = 1;
break;
}
}
else
{
i=0;
break;
}
}
}
这个程序包括了消抖部分,flag = 1的时候就表明 按键按下了。 flag的变量定义,还有头文件,自己加上,在主程序你检测flag的状态就可以了
51单片机的外部中断是有两种触发方式的,如外部中断0: IT0(TCON0) ,外部中断 0触发方式控制位。 当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。 51单片机中断系统初始化: 开相应中断源的中断; (IE) 设定中断优先级;(IP) 若为外部中断,设定外部中断的触发方式。 void Outside_Init(void) { EX0 = 1; //开外部中断0 IT0 = 1; //负边沿触发 EA = 1; //开总中断 } void Outside_Int(void) interrupt 0 //外部0中断函数 { EX0 = 0; //关中断 这里写要实现的功能 EX0 = 1; //开中断 }
跟外部的按键消抖一样处理就可以了。
void ext0() interrupt 0
{
delay(10);//
flag=0;//按键有效标志=0为无效
if(P3_2)
{
while(!P3_2);//等待按键抬起
flag=1;
}
}
中断处理函数感觉有些问题,for循环之前使用P1=0x0f;然后将for内的P1=0x0f;改为 P1= ~ P1; 同时for 循环中应该需要调用延时函数 Delay(10); 这里的值看你自己设置,保证能分辨闪烁即可
51?1、先初始化,设置外部中断、串口工作模式,开中断;2、写中断服务程序;//--------------------------------------------///初始化//--------------------------------------------/voidinit(void){TMOD|=0x20;//工作模式SCON=0x50;TH1=0xfd;//定时器1初值,设置波特率TL1=0xfd;//波特率为9600TR1=1;//启动定时器1ES=1;//串口中断允许工作于方式1IT0=1;//外部中断0下降沿触发方式IT1=1;//外部中断1下降沿触发方式EX0=1;//开外部中断0EX1=1;//开外部中断1EA=1;//开总中断}////中断服务程序//voidint0(void)interrupt0//外部0中断服务{}//--------------------------------------------//复位中断//--------------------------------------------voidint1(void)interrupt2//外部1中断服务{}//--------------------------------------------/voiduart(void)interrupt4//串口中断{uchar;if(RI)//接收{RI=0;ud=SBUF;//取收到的字节}elseTI=0;//发送完成}
以上就是关于如何利用单片机的外部中断int0与int1写暂停和启动程序全部的内容,包括:如何利用单片机的外部中断int0与int1写暂停和启动程序、单片机89c51外部摁键中断程序、51单片机中设置外部中断0为下降沿触发的语句怎么写啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)