如果这样的话,可以这么算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标志位确认发送完成之后再进行下一步工作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)