请高手帮忙分析单片机发送的一组串口间通讯数据的校验方式

请高手帮忙分析单片机发送的一组串口间通讯数据的校验方式,第1张

单单从这几个命令上很难准确判断出是怎么计算的,不过应该是3各算法一致。我推算应该是以求和为基础,就是所有字节求和。
如果这样的话,可以这么算A到C校验
校验=16A-字节和
至少这个符合A到C的校验规律
A到B可能也类似
为什么知道他的校验么?
你可以在测一下,你可以用串口直接发类似的命令,看看串口能收到什么。
比如你可以发送
E000000900100000079

如果没有对方回送数据,是无法判断的。找你所说,可以用如下程序验证。
#include<reg51h>
sbit led=P1^0;
unsigned char dat;
void delay(int a)
{
unsigned char i;
while(a--)for(i=0;i<120;i++);
}
void uart() interrupt 4
{
if(RI)
{
RI=0;
if(SBUF==dat)led=0;
}
}
main()
{
TMOD=0x20;
TH0=0xfd;
TL0=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
led=1;
SBUF=dat;
while(TI==0);
TI=0;
delay(5000);
}
}

答:
1 判断你的硬件有没有问题;方法是 用跳线讲串口的pin2 和pin3短接,用串口调试助手发送数据看调试助手能不 能自己收到,能就说明是单片机程序有问题
2 你检查你的波特率是生成程序是否正确, 中断和主程序用 1楼给你程序,我看了 没问题。
这样就可以实现串口通信了

哥们先好好学学C语言吧,短短三行代码就至少有两处错误。
单片机的串口接收数据是有个字节一个字节的接收到串口相应的数据寄存器中,可以是查询、中断、或者DMA(可以设置接收的地址和长度),接收完之后再把每个字节拼成字符串或者放到数组中。

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13387876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存