打印
[技术讨论]

请教上下位机通信问题

[复制链接]
1035|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 | 只看该作者
改成无符号短整形就行。

使用特权

评论回复
5
sumoon_yao| | 2021-11-25 14:32 | 只看该作者
分段测试,你先不输入数据,在单片机端直接赋值40000,50000,看下CAN传回的结果.

使用特权

评论回复
6
diweo| | 2021-11-25 16:24 | 只看该作者
你自己都猜到原因了,还不知道怎么改?

使用特权

评论回复
7
cxz_00| | 2021-11-25 22:06 | 只看该作者
数据位数不够

使用特权

评论回复
8
R2D2| | 2021-11-25 23:10 | 只看该作者
输入30000返回300是对的,但是输入40000返回402,50000返回5021

这显然不是符号位的问题,楼主必须提供更详细的代码。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

0

粉丝