本帖最后由 一只耳朵怪 于 2018-6-7 10:26 编辑
file:///C:UsersdellDocumentsTencent Files1063759009ImageGroupF)%UY2G}JRF%NDN()BXWB)1.png我这个是labview上位机和单片机USB转串口实现通信,图片左边的部分,单片机的KEIL编程的程序中也有add0 add1 add2 是这么定义(uchar code Add[]={125,123,121};)的,就定义了一句 在别的地方没发现再写到add0 add1 add2 了,不过有用到这个数组在下面程序
,单片机程序也没有写到85,起始频率和步进频率,激励电压都有在程序中写到,这个左边的部分应该是加和的子VI,检查校验和的,然后加和上面那个应该是插入数组,只是不明白为什么这么做,还有85换别的数行不行,起始频率和步进频率都为什么要除256,就是2的8次方,求商和余数再插入到数组中
不知道有人懂吗
if( RI==1 )
{
Temp = SBUF;
for( i=0 ; i<Max_Rx-1 ; i++ )
{
UART_Rx_Buffer = UART_Rx_Buffer[i+1];
}
UART_Rx_Buffer[Max_Rx-1] = Temp; //ÒÆλÍê³É
if( Check_Key( UART_Rx_Buffer , Add ) ) //¼ì²âµØÖ· ½âÎöÊý¾Ý
{
Rx_OK =1;
UART_IT(1); //¹Ø±ÕUARTÖжÏ
}
RI = 0;
}
if( ti==1 )
{
TI = 0;
}
}
bit Check_Key( uchar *s , uchar *Key ) //¼ì²é¹Ø¼ü×Ö
{
if( (s[0]==Key[0])&&(s[1]==Key[1])&&(s[2]==Key[2]))
{
return 1;
}
else
{
return 0;
}
return 0;
}
uchar Check_And0( uchar *s , uchar Length ) //¼ì²éУÑéºÍ
{
uchar i;
uchar k=0;
for( i=0 ; i<Length ; i++ )
{
k = k + s;
}
return k;
}
uchar Add_And0( uchar *s , uchar Length ) //Ìí¼ÓУÑéºÍ
{
uchar i;
uchar k=0;
for( i=0; i<Length ; i++ )
{
k += s;
}
k = ~k + (uchar)(1);
s[Length] = k;
return (k);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
256在二进制里面是0000000100000000,16位整数用16进制表示16#0100.
你的case中,除以256后,结果是1:
二进制 0000000000000001, 16进制 16#0001
对比可知,除以256其实是把源整数做一个bit位的移位,高8位移位至第八位。
这个取决于对象设备的通讯协议中数据的表示方法,你的例子中最终的商和余数就是分离16进制整数的高八位和低8位,做个调换后传输到对象设备中。
Labview中有现成的高低字节转换功能块。
一周热门 更多>