标题: C语言如何将48位数据,高位写入拆分成3个16位依次高位写入? [打印本页]

作者: Kevinpost    时间: 2021-3-18 21:31
标题: C语言如何将48位数据,高位写入拆分成3个16位依次高位写入?
新手请教,一个48位的数据,要从高位依次写入,如何拆分成3段,每段16位 还是高位依次写入。16位的用以下方法我理解了,不想用long,请老师们指教。例如48位2进制 1000 0000 1000 0000 1000 0000 高位写入。

unsigne int i_data;

for (i=0;i<16;i++)      
        {
        
                PGA_SCLK = 0;
               if(i_data&0x8000)  
              PGA_SDI=1;
              else
               PGA_SDI=0;               
               PGA_SCLK = 1;
                i_data <<= 1;   

}



作者: Kevinpost    时间: 2021-3-18 22:08
举例错了,48位是1000 0000 1000 0000 1000 0000 1000 0000 1000 0000 1000 0000
作者: mengzhixinheng    时间: 2021-3-19 01:43
你用的64位芯片吗!这个就是分解一个48位数据的事,你准备用什么数据类型表示这个48位数据呢?
作者: Kevinpost    时间: 2021-3-19 08:24
mengzhixinheng 发表于 2021-3-19 01:43
你用的64位芯片吗!这个就是分解一个48位数据的事,你准备用什么数据类型表示这个48位数据呢?

用的89c51芯片,想用16位的unsigned int 数据,想把一串48位的数据变量高位优先写另一个芯片里。
作者: Kevinpost    时间: 2021-3-19 08:25
mengzhixinheng 发表于 2021-3-19 01:43
你用的64位芯片吗!这个就是分解一个48位数据的事,你准备用什么数据类型表示这个48位数据呢?

i_data是要送出去的48位的变量
作者: hsl32    时间: 2021-3-19 08:42
i_data你准备用什么数据类型表示?我的话就3个int,分3次循环发送,或6个char,分6次循环发送。
作者: 张天师    时间: 2021-3-19 08:58
看看这样,能否帮到你
unsigned int  i_data[3];unsigned char i,j;
for(j=0;j<3;j++)
{
      for (i=0;i<16;i++)      

        {
                PGA_SCLK = 0;
               if(i_data[j]&0x8000)  
               PGA_SDI=1;
               else
               PGA_SDI=0;               
               PGA_SCLK = 1;
                i_data[j] <<= 1;   
         }}

作者: 黄youhui    时间: 2021-3-19 09:03
hsl32 发表于 2021-3-19 08:42
i_data你准备用什么数据类型表示?我的话就3个int,分3次循环发送,或6个char,分6次循环发送。

0做个2维数组也行
作者: Kevinpost    时间: 2021-3-19 09:13
张天师 发表于 2021-3-19 08:58
看看这样,能否帮到你
unsigned int  i_data[3];unsigned char i,j;
for(j=0;j

感谢!我新学51,对于语句运用还很初级,您帮到我了!这样子做个套嵌就解决问题了,学到了。
作者: Kevinpost    时间: 2021-3-19 09:14
黄youhui 发表于 2021-3-19 09:03
0做个2维数组也行

感谢提供另一种方法,我消化一下。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1