串口中断与定时中断同时开存在的问题,请教大侠 我通过AD转化采集外部信号值并显示在LCD上,每1ms采集一次,采用定时中断
1;同时需要显示串行口发来的数据,采用9600波特率(无多机通信)。结果是定时中断1显示正常,串行数据却接收不到。程序如下,请大侠们帮忙看看指正,我实在不知道原因了,只好贴出编的一段程序来请各位指教:
初始化:
IE=0x92;
TMOD=0x21;
TH1=0xf4;
TL1=0XF4;//6时钟单片机,9600bps
SCON=0x50;
TCON=0x50;
TH0=0xf1;
TL0=0x9a;//定时中断1ms
IP=0x00;
定时中断
void disp(void) interrupt 1{//定时中断1
TH0=0xf1;
TL0=0x9a; //重新赋值,定时1ms
StaticShow(LineNo);//将数据送LCD显示,运行时间约0.1ms
LineNo++; //全局变量,计算定时中断次数
if (LineNo==16)LineNo=0;
}
串口中断:
void receive(void) interrupt 4{
uchar i,j;
RI=0;
if (SBUF!=0XCC)return;//侦头字节
RI=0;
if (_getkey!=0x55)return;//侦头字节
if (_getkey!=0x01)return;//类型
ES=0;//这里可考虑去掉,但是效果一样
for (i=0;i <128;i++){
Buffer[i]=_getkey();//接收128字节数据
}
ES=1;//重新开中断
}
语法没任何问题(手输入错误除外),串形中断单独使用也没有问题,现在情况是定时中断正常,不进入串行中断,搞了两天了,没有结果,郁闷中。。。。。。请大侠救命,谢谢
请改用52芯片的T2资源!
我看你先把定时中断理的显示函数去掉,再执行,看串口是不是好的。
应该是显示运行时间太长的缘故
T1中断运行正常,结果是引不起串口中断
在串行中断里面关掉ES,还怎么接收数据?
在串行中断里关掉串行中断只是为了在中断过程中不在引发新的中断,但是接受照样
还有,你在中断里调用了子函数,你把该函数所有内容放到中断里再试!?
这样试一试:
在51单片机中(非52),如果你使用了串
void receive(void) i
你将串口改为高优先级看看,。
谢谢各位大侠的热心
调好了没?调好了说一声,让我们也知道是什么原因。