标题:
单片机中断问题,下面这段程序不知道为什么只进一次中断,就没有反应了
[打印本页]
作者:
rxjrlsq
时间:
2011-10-25 23:03
标题:
单片机中断问题,下面这段程序不知道为什么只进一次中断,就没有反应了
#include<reg51.h> // 包含51单片机寄存器定义的头文件 #define uint unsigned int
sbit key1=P1^4;
sbit key2=P1^5;
void delay1ms(uint i)
{ uchar j;
while(i--)
{
for(j=0;j<125;j++) //1ms基准延时程序
{ ; }
}
}
void init()
{
EA=1; //开总中断
ES=1; //开串口中断
TMOD= 0x21; //定时器1定时方式2,定时器1工作于8位自动重载模式, 用于产生波特率
SCON = 0x50; // 设定串行口工作方式1 允许接收
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1= 0xfd; //11.0592M 波特率9600
TL1= 0xfd; PCON =0x00; // 波特率不倍增
TR1= 1; //启动定时器T1
TR0=1; //启动定时器T0
ET0=1; //打开T0中断
}
void key()
{
if(key2==0)
P0=0x3f;
delay1ms(5000);
P0=0xf3;
}
void mainxh()
{
while(1)
{
key();
P0=0x32;
}
}
void keybreak()
{
P0=0xf1;
delay1ms(5000);
P0=0x1f;
mainxh();
}
void main(void)
{
init();
mainxh();
}
void Time0(void) interrupt 1
{
TH0=(65536-50000)/256; //定时器T0的高8位重新赋初值
TL0=(65536-50000)%256; //定时器T0的高8位重新赋初值
if(key1==0)
keybreak();
}
这个程序上电后P0口显示0x32;按下key2显示0x3f;key1用于中断,每20ms检测是否有按下key1键,有的话,P0口显示0xf1。但我试验的时候发下第一次按下key1,P0口灯有反应,在按下就没有反应了,请问是什么原因那?
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0