51单片机的串口通信问题。。
时间:10-02
整理:3721RD
点击:
发送数据里到底要不要关闭中断?
如果先关闭了串口中断的话,等待发送完毕后,再打开串口中断,那么在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。
如果发送数据之前,没有关闭串口中断的话,反而让发送引起的中断,执行了接收中断的程序。
所以这个到底要怎么办。求大神讲解一番。看郭天祥的是直接把串口中断关掉了。
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
如果先关闭了串口中断的话,等待发送完毕后,再打开串口中断,那么在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。
如果发送数据之前,没有关闭串口中断的话,反而让发送引起的中断,执行了接收中断的程序。
所以这个到底要怎么办。求大神讲解一番。看郭天祥的是直接把串口中断关掉了。
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
太久没看51居然给忘得差不多了。不好意思手头没资料,帮顶先
发送和接收两者触发的中断是可以通过寄存器判断的
帮顶!
怎么判断?。
TI:发送中断标志,RI:接收中断标志位。
