请给出每个函数的详细流程图和详细分析:unsigned char ReadADC(unsigned char Chl) { unsigned char Val; Start_I2c(); //启动总线 SendByte(AddWr); //发送器件地址 if(ack==0)return(0); SendByte(0x40|Chl); //发送器件子地址 if(ack==0)return(0); Start_I2c();//All notes can be deleted and modified// if(ack==0)return(0); Val=RcvByte(); NoAck_I2c(); //发送非应位 Stop_I2c(); //结束总线 return(Val); }
时间: 2023-12-10 10:41:24 浏览: 75
无法解析的外部符号”private: char * __cdecl cv::String::allocate(unsigned __int64)” (?allocate@String@cv@@AEAA
函数名:ReadADC
输入参数:
- Chl:unsigned char类型,表示待读取的ADC通道号
返回值:
- Val:unsigned char类型,表示读取到的ADC值
函数流程图:
```
+---------------------+
| ReadADC |
+---------------------+
|
Start_I2c()
|
SendByte(AddWr)
|
+------+------+
| |
ack==0 return(0) SendByte(0x40|Chl)
|
+------+------+
| |
ack==0 return(0) Start_I2c()
|
ack==0 return(0) RcvByte()
|
NoAck_I2c()
|
Stop_I2c()
|
return(Val)
```
函数分析:
1. 调用Start_I2c()函数启动I2C总线;
2. 发送器件地址AddWr,等待I2C从设备应答;
3. 如果从设备未应答,返回0;
4. 发送器件子地址0x40|Chl,等待I2C从设备应答;
5. 如果从设备未应答,返回0;
6. 再次调用Start_I2c()函数启动I2C总线;
7. 如果从设备未应答,返回0;
8. 调用RcvByte()函数接收从设备传输的数据;
9. 调用NoAck_I2c()函数发送非应答位,并等待从设备应答;
10. 调用Stop_I2c()函数结束I2C总线;
11. 返回读取到的ADC值Val。
阅读全文