嵌入式C语言基础知识--位操作(串口&IIC通信发送格式)

目录

大小端模式:

字节高低位:

LSB和MSB:

高位先行msb、低位先行lsb:

串口传输是低位先行

IIC传输是高位先行

字节序、比特序


大端模式、小端模式、高字节序、低字节序、MSB、LSB

编程知识_字节序_位操作

你知道内存是怎么读取数据的吗?

内存的读写永远是从低地址开始读写,从低到高。

大小端模式:

大小端指的是字节序。

大端:高位字节存放在低地址中,低位字节存放在高地址中。

小端: 高位字节存放在高地址中,低位字节存放在低地址中。最符合人的思维的字节序,KEIL MDK中,变量是小端模式的。

unsigned int value = 0x12345678为例,分别按照大端模式和小端模式存放在芯片中。

内存地址0x000000010x000000020x000000030x00000004
大端模式0x120x340x560x78
小端模式0x780x560x340x12

ARM平台是小端的,x86平台是小端的,PowerPC平台是大端的。

不管是大端还是小端模式,我们在读取和存储数据的时候一定都是从内存的低地址依次向高地址读取或写入。

字节高低位:

一般左边为高位,右边为低位。(按照阅读习惯,数字从左往右,表示由大到小)

LSB和MSB:

最低有效位、最高有效位。

eg:0x12345678,LSB = 0x78,MSB = 0x12。

高位先行msb、低位先行lsb:

高位先行:在传输一个字节时先传输高位msb;

低位先行:在传输一个字节时先传输低位lsb。

高位先行和低位先行是针对串行数据传输方式来说的。

常见的串行传输方式有串口、I2C、SPI等。

串口传输是低位先行

标准的串口传输方式是低位先行,芯片在通过TX引脚发送数据时,依次发送位0、位1......位7。

æªå¾èªSTM32F407中æåèæå

IIC传输是高位先行

IIC的数据和地址均以8位字节传输,MSB在前。

æªå¾èªSTM32F407中æåèæåIICé¨å

 这一点也反映在代码中,看下边IIC的读字节和写字节的函数:

//IIC 发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答
void IIC_Send_Byte(u8 txd)
{
    u8 t;
    SDA_OUT();
    IIC_SCL=0; //拉低时钟开始数据传输
    for(t=0;t<8;t++)
    {
        IIC_SDA=(txd&0x80)>>7;
        txd<<=1;
        delay_us(2); 
        IIC_SCL=1;
        delay_us(2);
        IIC_SCL=0;
        delay_us(2);
    }
}
 
//读 1 个字节:ack=1 时,发送 ACK;ack=0,发送nACK
u8 IIC_Read_Byte(unsigned char ack)
{
    unsigned char i,receive=0;
    SDA_IN(); //SDA 设置为输入
    for(i=0;i<8;i++ )
    {
        IIC_SCL=0;
        delay_us(2);
        IIC_SCL=1; 
        receive<<=1;
        if(READ_SDA)
        {
            receive++;
        }
        delay_us(1);
    }
    if (!ack) 
        IIC_NAck(); //发送 nACK
    else
        IIC_Ack();  //发送 ACK
    return receive;
}

从发送字节的函数中可以看出,首先要将发送的字节与0x80进行与运算,取出最高位,然后循环左移8次就可以将一个字节数据发送出去了。这是因为:IIC规定了在数据传输时必须是高位先行。所以要发送一个字节的数据必须先取出最高位,然后循环左移将数据发出。

同样,接收一个字节时,接收到的第一位认为是最高位。

字节序、比特序

字节序就是串行发送多字节时发送的顺序。

eg:

value = 0x12345678;按字节序发送就是0x12、0x34、0x56、0x78顺序还是0x78、0x56、0x34、0x12顺序。

同理,按比特序就是在bit层面进行排序。eg:如果是一个字节,指先发bit0还是bit7。

串口是lsb优先,I2C是msb优先。这里的msb、lsb指的是比特序,二进制位的位置。区别于“字节序”通信中,先发送低字节还是高字节,那是字节序的MSB还是LSB。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: iic_slaver.rar_iic时序是一个嵌入式文档类资源。在嵌入式系统中,iic_slaver.rar文件是一个包含了iic(Inter-Integrated Circuit)接口的从设备(slaver)的时序信息的压缩文件。 iic是一种串行通信协议,主要用于各种嵌入式设备之间的数据传输。iic接口由两根线组成,一根是数据线(SDA),另一根是时钟线(SCL)。在iic_slaver.rar中,我们可以找到从设备在这个接口上进行数据传输的具体时序信息。 iic_slave.rar文件中的时序信息对于开发者来说是非常重要的,因为它们描述了从设备与主设备之间的数据传输时机、数据的发送和接收顺序,以及时钟信号的频率等细节。通过分析时序信息,开发者可以了解从设备与主设备之间的通信规则,从而正确编写驱动程序以实现数据的稳定传输。 此外,iic_slaver.rar_iic时序还可能包含从设备的相关文档,如寄存器映射表和时序图等。这些文档提供了关于从设备硬件的更详细的信息,帮助开发者了解从设备的工作原理和寄存器的使用方法。 总之,iic_slaver.rar_iic时序是一个非常实用的嵌入式文档资源,它包含了关于iic接口从设备的时序信息以及相关的文档资料,对于进行嵌入式开发的人员来说,这些资料是非常重要的参考。 ### 回答2: iic_slaver.rar_iic时序是一种嵌入式文档类资源。嵌入式系统是指嵌入在其他设备或系统中的计算机系统,通常用于控制、监测或通信等目的。这种时序文档资源主要用于描述iic从设备的时序,以指导嵌入式开发人员在设计和实现中遵循正确的时序要求。 在嵌入式系统中,IIC(Inter-Integrated Circuit)是一种常见的串行通信接口协议,用于在主设备和从设备之间进行数据传输。IIC协议通常被用于连接各种外设(如传感器、存储器等)和微控制器等嵌入式系统中的主控制器。 iic_slaver.rar_iic时序资源是一个被压缩为.rar文件的文档资源。该资源通过解压缩后,可以获取到其中的iic时序文档,该文档对于嵌入式开发人员来说非常有用。iic时序文档描述了在使用IIC协议进行通信时所需的时序要求,包括信号的时序顺序、时钟信号的频率、数据传输的速率等。 嵌入式系统的开发通常需要遵循一定的时序规范,以确保数据传输的准确性和稳定性。因此,iic_slaver.rar_iic时序文档资源可以为开发人员提供了解和理解IIC协议时序要求的参考资料。在使用这一资源时,开发人员可以通过查阅其中的iic时序文档,了解IIC协议的时序要求,并根据文档中的指导,设计和调整嵌入式系统中与IIC通信相关的电路和程序。 总之,iic_slaver.rar_iic时序是一种嵌入式文档类资源,通过提供IIC通信协议的时序要求文档,帮助嵌入式开发人员编写和调试与IIC相关的程序和电路。 ### 回答3: iic_slaver.rar_iic时序是一种嵌入式文档类资源。在嵌入式系统中,I2C总线被广泛应用于连接微处理器和各种外设,用于实现数据传输和通信iic_slaver.rar文件中包含了关于I2C从机(iic_slaver)的相关文档和资源。 I2C(Inter-Integrated Circuit)是由飞利浦公司开发的一种串行通信总线标准。它采用两根线进行数据传输,即SDA(Serial Data Line)和SCL(Serial Clock Line)。其中SDA用于数据传输,SCL用于时钟同步。通过使用I2C总线,嵌入式设备可以与各种传感器、存储器、显示器、控制器等外设进行通信iic_slaver.rar文件中的I2C时序文档详细描述了iic_slaver从机设备与主控设备之间的数据传输时序要求。通过按照这些时序要求进行数据读取和写入操作,可以实现可靠的数据传输和通信。这些时序要求包括时钟频率、数据传输速率、起始信号、停止信号等。 此外,iic_slaver.rar文件中可能还包含有关iic_slaver从机设备的硬件设计参考资料、软件开发工具和示例代码等。这些资源可以帮助开发人员设计和开发符合I2C标准的嵌入式设备,并实现与其他设备的通信和数据交换。 总之,iic_slaver.rar_iic时序是一种嵌入式文档类资源,它提供了关于I2C从机设备的时序要求、硬件设计参考和开发工具等资源,帮助开发人员设计和实现嵌入式设备之间的可靠通信和数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值