单片机串口通信程序,返回数据有问题。具体程序如下,根据程序发送和输出的数据应该一样。

但十六进制发送数据时,只要末位数字为0~7,返回数据就不一样了。求指点
#include<reg51.h>
#define uchar unsigned char
void rece(void);
void init(void);
uchar re;
void main(void)
{
uchar temp;
init();
do
{
while(RI==0);
temp = SBUF;
RI = 0;
SBUF = temp;
while(TI == 0);
TI = 0;
}while(1);
}
void init(void)
{
TMOD = 0x20;
PCON = 0x80;
SCON = 0x50;
TL1 = 0xF3;
TH1 = 0xF3;
TR1 = 1;
}

第1个回答  2012-11-23
void init(void)
{
TMOD = 0x20;
PCON = 0x80;
SCON = 0x50;
TL1 = 0xE6;//改动
TH1 = 0xE6;
TR1 = 1;
}
即将波特率改为2400便可。
第2个回答  2012-11-22
TL1=0xf4;
TH1=0xf4;试试,0xf3时波特率误差很大的,所以数据出错很可能。
第3个回答  2012-11-22
晶振是11.0592的吗?
波特率是多少?

程序看上去没问题
太高的波特率偶尔会出错几个。

截图一下出错的数据追问

晶振是12M的

只有末位是0~7时数据显示不对

追答

把PCON改成
PCON = 0x00;

或者
TH1 = 0xE6;
TL1 = TH1;
就可以了

本回答被提问者采纳

单片机的串口通信过程问题,具体问题如下,求解。
如果从机要接收主机发来的数据帧,从机要把SM2清零。从机收完数据帧后,需要把SM2置1,以便下一次与主机通信。RB8就是主机发来的第9位数据。

如何用51串口接受和发送数据,具体程序。
给你一个我自己写的串口通信程序,上层软件用串口调试助手即可,单片机软件如下:include <reg52.h> define uchar unsigned char sbit k5=P2^1;uchar zf[]={'0','1','2','3','4','5','6','3','7','8','9','a','b','c','d','e','f',0x00};uchar code dis[]={0xc0...

STC单片机串口通信问题!
reg51.h里面是标准51的寄存器,是只有1个串口的,建议你去stc的官网把stc12系列的头文件下载下来进行包含,如果你的程序没错的话,应该就可以用了 欢迎追问

单片机串行通信程序调试原因
串口无法发送通常是指与此串口的TXD连接的对端设备RXD通道接收不到任何数据,总结如下:使用仪器对TXD通道进行实际测量,观察硬件波形,确定信号是否有输出以及是否正常。(串口电压、串口信号上升下降时间)短接设备的TXD和RXD通道回环测试,看自收发是否可以成功。排除是自身设备异常还是对端异常。确定应用软件...

单片机串口通信程序 PC发送一段任何数据到单片机,按一个按钮让原数据...
\/* PC发送数据必须以0XAA开头和以 0X55结束(帧头帧尾)*\/ void main(void){ int i=0;COM_Init();while(1){ if(MCU_RXD_FLG){ EA=0;TR0=0;if(dat[0]==0xAA && dat[num-1]==0x55)for(i=0;i<num;i++) printf("%0x ",dat[i]);num=0;MCU_RXD_FLG=0;EA=1;} } }...

单片机收发程序出现数据错位的现象?是什么原因呢?
把单片机两个口的波特率或数据格式设置相同,把PC串口的发送和接受波特率或数据格式设置相同,那么就可以了

51单片机通过串口实现数据的发送与接收程序
一般来说,过程如下:1,配置串口参数、波特率等,开启串口中断;void Init_UART(){ } 2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;程序一般为:void UART_ISR() interrupt x using y { ;串口中断处理函数 } x - 单片机的C51中断号 y - 指定使用的当前工作...

两个51单片机485串口通信接收数据出错原因?大概发送三、五次会有一次...
2.有人在发送数据之前,并没有关闭串口中断,当 TI = 1 时,是可以进入中断程序的。但是,却在中断函数中,将 TI 清零!这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收中断的程序。对此,做...

单片机通过串口和模块通信,数据串得到数据怎么处理?
你用计算机的串口与数据模块通信,数据模块给发过来20 32 33 30 30 20 70 70 6D 0D 0A;然后你用计算机把这组数据发给你的单片机,能正常返回32 33 30 30并显示;但是直接用模块接单片机不正常!---分析如下:串口是交叉通信的,也就是你看看,你的单片机接模块的时候是否用了“交叉线”?2--...

单片机串口通信,发送数据感觉不对,请大佬帮看看?
你的主循环转得太快,前一个数据还没发送完就把SBUF又填充新数值,这样很容易破坏发送的帧。既然你不开中断,就应当采用查询工作方式,查询TI标志位确认发送完成之后再进行下一步工作。

相似回答