如题.
不管是在软件上调试(奇校验),还是在硬件上,RB8总是零.比如我发9,RB8==0,发7也是0
请各位帮帮忙。谢谢
void STR_int(void) interrupt 4 using 2
{
if(RI)
{
on=0;
ES=0;
ACC=SBUF;
if(P==RB8)
{
save=SBUF;
i++;
}
if(i>=80)
{
bit1=0;
bit2=1;
i=0;
}
RI=0;
ES=1;
on=1;
return;
}
if(TI)
{
j++;
if(j>=V)
{
bit1=1;
bit2=1;
j=0;
}
else
{
_nop_();
ACC=save[j];
TB8=P;
SBUF=save[j];
}
TI=0;
}
}
一般来说哈
单片机和PC通信,不用那个位
还不如自己做个加和校验或是异或和校验来得实在
因为:
1。系统中,单字节通信的可能性很少。基本上都是多字节一帧地发
2。如果真的有干扰,这样的去干扰的办法还不如一整帧做来得实在
3。在系统灵活性上,有了限制,能用通用的就用通用的吧,会体会到它的好处的。呵呵
我只是小流量通讯:一小时一次通讯不超80字节只作记录用;
我是用虚拟串口和Keil捆绑在一起,用串口调试软件调试的,在虚拟通讯下也是零;
过两天和你一起抓一下这个问题看
偶,好像之前没有太关心这个
谢谢LZ
你看我用你的CODE调试的.也是这样.不知道我这里.那里设置不对.我已把调试情况录成了图片.
你看一下.
不好意思.不知道怎样上附图片.你能给邮箱吗.麻烦你看一下.谢谢!!
邮箱:lbing7@gmail.com
那LZ你说说你怎么送进那个标志位的?
你的调试方法,流程是什么?
我已发了.看一下吧.
除了图片上的那些.其它的地方.什么也没设置.
LZ我看到你发的图了
也看了你的串口工具了
呵呵
232口里面的标志位,不是自动生成的
而是通过软件设置(在串口工具里就是手动设置)
你“人工”计算你要发的数据的校验位后
在你的串口工具中:校验位:0DD这一个一拉框里选择对应的值
再发送看
呵呵
如果要改动这个,需要自动地修正这个位
那只能重写串口工具来实现
好像问题就只在这里吧
上面的高手们,你们误导楼主了吧
PC与51通讯RB8不可能全是零啊?!
PC的串口有多种设置的,可以是校验码,也可以发指定码
不然PC与51的多机通讯如何识别地址与数据呀?!
我没用C,所以搞不明白楼主是代码问题,还是设置问题,不敢胡说
只是不想有人被误导“你是接收哪里来的数据,如果是PC机来那肯定总是0”
没误导哈
我都说了,我这边都正常的,可以响应RB8
只是PC上的那个RB8位怎么修改的方式问题
呵呵