27,374
社区成员
发帖
与我相关
我的任务
分享
#include<reg52.h>
sbit cs=P3^3;
void main()
{
REN=1;
SM0=0; //8位
SM1=1; //串行口工作方式1
SM2=0;
PCON=0;
TMOD=0x20; //设置定时器1为工作方式2
TH1=0xfd; //9600
TL1=0xfd;
TR1=1;
cs=1;
while(1)
{
SBUF='a';
while(TI==0);
TI=0;
}
}
楼主误导他人,以楼主的程序,串口应是工作方式2,这时,SM2为0,单片机为11位为一帧的UART;SCON中的TB8默认值未知,故发送出数据的奇偶校验位也是未知,楼主请详细设置TB8试试。
碰巧了。当采用偶校验的时候,'a' (0x61) 的校验位恰好是 1,与停止位相同。而 Idle 状态下,通讯线又是高电平。 实际上,接收端将你发送的停止位当作奇偶位接收了,而将紧接着的 Idle 电平解释为停止位。 开始要将收发两端的协议设置一致。