[技术讨论] 请教上下位机通信问题

[复制链接]
1237|7
 楼主| su27peng 发表于 2021-11-24 22:56 | 显示全部楼层 |阅读模式
请教一下各位,我用上位机对话框输入一个数值(电压),精度0.01,发送到dspic16位单片机,再通过can通信传给上位机显示出来。
输入三万以下,返回的值都正确,输入三万多以上返回的值就错了,比如说,输入30000返回300是对的,但是输入40000返回402,50000返回5021
请问是什么原因啊?万分感谢!
上位机部分代码:   

   int mv;
void CATSDlg::OnEnChangeMv()
{
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    char ch1[10];
    GetDlgItem(IDC_MV)->GetWindowText(ch1,10);
    mv=atoi(ch1);
    UpdateData(FALSE);
}

下位机部分代码:

    ByteA[5]=(int)(MV*100)%256;
    ByteA[6]=(int)(MV*100)/256;


 楼主| su27peng 发表于 2021-11-24 22:58 | 显示全部楼层
我猜是输入超过了32767导致的,但是不知道怎么改啊
QuakeGod 发表于 2021-11-25 12:50 | 显示全部楼层
你只有两个字节,所以最大能表示的数据才是 32767.
要不然就增加数据字节,要不然就降低精度。
w494143467 发表于 2021-11-25 13:10 | 显示全部楼层
改成无符号短整形就行。
sumoon_yao 发表于 2021-11-25 14:32 | 显示全部楼层
分段测试,你先不输入数据,在单片机端直接赋值40000,50000,看下CAN传回的结果.
diweo 发表于 2021-11-25 16:24 | 显示全部楼层
你自己都猜到原因了,还不知道怎么改?
cxz_00 发表于 2021-11-25 22:06 | 显示全部楼层
数据位数不够
R2D2 发表于 2021-11-25 23:10 | 显示全部楼层
输入30000返回300是对的,但是输入40000返回402,50000返回5021

这显然不是符号位的问题,楼主必须提供更详细的代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部