LABVIEW和单片机串口通信,协议,指令,请问起始频率和步进频率都为什么要除256?

2019-07-17 11:31发布

本帖最后由 一只耳朵怪 于 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 了,不过有用到这个数组在下面程序 串口通信 988.png ,单片机程序也没有写到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);        
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
imcu2007
1楼-- · 2019-07-17 16:33
举例:
256在二进制里面是0000000100000000,16位整数用16进制表示16#0100.

你的case中,除以256后,结果是1:  
二进制 0000000000000001, 16进制 16#0001

对比可知,除以256其实是把源整数做一个bit位的移位,高8位移位至第八位。

这个取决于对象设备的通讯协议中数据的表示方法,你的例子中最终的商和余数就是分离16进制整数的高八位和低8位,做个调换后传输到对象设备中。

Labview中有现成的高低字节转换功能块。

雾岛之樱
2楼-- · 2019-07-17 17:25
ile:///C:UsersdellDocumentsTencent Files1063759009ImageGroupF)%UY2G}JRF%NDN()BXWB)1.png我这个是LabVIEW上位机和单片机USB转串口实现通信,图片左边的部分,单片机的KEIL编程的程序中也有add0 add1 add2 是这么定义(uchar code  Add[]={125,123,121};)的,就定义了一句  在别的地方没发现再写到add0 add1 add2 了,不过有用到这个数组在下面程序

一周热门 更多>