unsigned char SensorReadnByte(unsigned char Devid, unsigned char *RXBuff, unsigned char SubAdd, unsigned char Size) { unsigned char i = 0; UserI2c_Start(); // UserI2c_Send_Byte( Devid | 0x00 ); //实时距离地址 UserI2c_Send_Byte( Devid | 0x04 ); //滤波距离地址 if( 0 == UserI2c_Wait_Ack() ) { UserI2c_Stop(); return 0; } UserI2c_Send_Byte( SubAdd & 0xff ); if( 0 == UserI2c_Wait_Ack() ) { UserI2c_Stop(); return 0; } UserI2c_Stop(); UserI2c_Start(); //UserI2c_Send_Byte( Devid | 0x01 ); //实时距离地址 UserI2c_Send_Byte( Devid | 0x05 ); //滤波距离地址 if( 0 == UserI2c_Wait_Ack() ) { // UserI2c_Stop(); // return 0; } for ( i = 0; i < Size; i++) { RXBuff[Size - i - 1] = UserI2c_Read_Byte(); if((i + 1) == Size) useri2c_nack(); else useri2c_ack(); } UserI2c_Stop(); return 1; }
时间: 2024-04-27 16:19:36 浏览: 138
unsigned char数组转成string 用16进制表示
这段代码是用于读取传感器数据的函数,函数名为SensorReadnByte。该函数接收四个参数,Devid表示设备ID,RXBuff表示接收数据的缓冲区,SubAdd表示要读取的子地址,Size表示要读取的字节数量。
函数内部使用了I2C协议进行通信,首先通过UserI2c_Start()函数向总线发送起始信号,然后发送设备ID和要读取的子地址,如果在发送每个字节后没有收到从设备的应答信号,则函数返回0表示读取失败。如果发送成功,则通过UserI2c_Stop()函数发送停止信号,然后再次启动总线,并发送设备ID和要读取的子地址,成功后就可以开始读取数据了。
接着使用一个循环,将读取到的字节逆序存储到RXBuff缓冲区中,最后通过UserI2c_Stop()函数发送停止信号。如果读取成功,则返回1表示读取成功。
阅读全文