关于串口通信的问题

2019-07-15 22:19发布

先上程序
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;  //方式2
TH1=0xfd; //初值
TL1=0xfd;
TR1=1;
REN=1;    //接受允许
SM0=0;
SM1=1;    //方式2
EA=1;    //开总中断
ES=1; //串口中断
while(1)
{
  if(flag==1)
  {
   ES=0;   //关中断
   flag=0;
   P0=SBUF;   //将接收到的值给P0,(我的板子中P0为LED)
   ti=0;    //发送停止,清0
   ES=1;    //开中断
  }
}
}
void ser() interrupt 4
{
RI=0;  //接受停止,清0
a=SBUF;
flag=1;
}


1:先想请问一下那个放大加粗的ES=1;,在我调程序的时候,去掉那句后LED无任何反映,而在加上时LED按照程序走,这是为什么?
2:放大的TI=0;,如果我没记错应该是发送完数据内部硬件将TI置1,进入中断,在中断中应该用软件将TI=0。但是这个程序中发送完数据后是否还进入了SER()中断?又为什么在主程序中TI=0。这部分程序是怎么跑的?
谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
你敢信
1楼-- · 2019-07-16 23:09
在输出是要关闭ES,就是串口中断,因为,如果不关闭串口中断,当发送完数据后,单片机同样会申请中断,便再次进入中断程序,flag又被置一,主程序检测到flag为1后,又回到这里再次发送,如此循环,我也是新手,不知道是不是这个原因

一周热门 更多>