TMOD没有设置,定时器1的工作方式没有确定,是按照方式0运行的,不是方式2的自动重装模式,波特率对不上,数据不会正确。
另外,REN(SCON.4)应该为1,否则不允许接收,自然收不到数了。
你这是仿真还是实物开发板?这串口通信是单片机与电脑吗?电脑上只能用串口调试助手,才能发送0x01,那接收的数据为什么用0x01?换个字母或数字的ASCII码,电脑上或仿真才方便发送。
程序简化一下,如下
#include reg51.h
void main()
{
SCON=0x50;
TH1=0xFD;//晶振11.0592M,波特率9600
TL1=0xFD;
TMOD=0x20;
TR1=1;
while(1)
{
if(RI==1)
{
RI=0;
if(SBUF=='A')//接收字母A
{
SBUF='B';//发送字母B
while(!TI);
TI=0;
SBUF=13;//回车
while(!TI);
TI=0;
}
}
}
}
仿真结果如下,可以接收和发送,都正常。请及时采纳。
你定义的接收数组Rec_Buf[100]; 这已经超过了内存容量,编译是不能通过的。为了能编译,估计存储模式你是选的外部数据存储器了吧。这要求必须外部扩展数据存储器,可实际上却没有,那接收数据就等于存放在空虚的存储器了,当然就不会保存下来了,就等于没有接收到数据。其实也没必要定义那么大的数组。10~20个单元就够了。如果,单片机是52的,就可以用高128字节的内部RAM存储空间了,但需要定义成间址存储区idata。
unsigned char idata Rec_Buf[100];
51单片机串口只发送不接收的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:51单片机串口只发送不接收