# V0.3 完成DHT10驱动函数,但是数据目前异常,等待排除硬件问题
This commit is contained in:
22
Driver/iic.c
22
Driver/iic.c
@ -92,15 +92,23 @@ IIC_WaitAck (void)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
IIC_SendAck (bit ack)
|
||||
/**
|
||||
* @brief 发送IIC协议中的确认信号
|
||||
*
|
||||
* 该函数通过控制SDA(数据线)和SCL(时钟线)来发送确认(ACK)或不确认(NACK)信号。
|
||||
* 在IIC通信中,发送方在传输数据后会发送一个ACK请求,接收方需要通过拉低或拉高SDA线来响应。
|
||||
*
|
||||
* @param ack 一个bit类型的变量,决定是否发送确认信号。ack为1时发送ACK,ack为0时发送NACK。
|
||||
*/
|
||||
void IIC_SendAck (bit ack)
|
||||
{
|
||||
// 根据ack参数决定SDA线的电平,1发送ACK,0发送NACK
|
||||
SDA = ack ? 0 : 1;
|
||||
IIC_Delay ();
|
||||
SCL = 1;
|
||||
IIC_Delay ();
|
||||
SCL = 0;
|
||||
SDA = 1; // 释放SDA
|
||||
IIC_Delay(); // 等待一段时间,确保电平稳定
|
||||
SCL = 1; // 拉高SCL线,允许数据传输
|
||||
IIC_Delay(); // 再次等待,确保时钟脉冲宽度
|
||||
SCL = 0; // 拉低SCL线,结束当前时钟周期
|
||||
SDA = 1; // 释放SDA线,准备下一次通信
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -62,8 +62,9 @@ Timer4_Init (void)
|
||||
void
|
||||
Timer4_DelayUs (u16 us)
|
||||
{
|
||||
u32 cycles = us * (FOSC / 1000000); // 计算所需时钟周期数
|
||||
u16 reload = 65536 - (cycles / 1); // 1T模式下无需分频
|
||||
// u32 cycles = us * (FOSC / 1000000); // 计算所需时钟周期数
|
||||
// 30000000/1000000=30
|
||||
u16 reload = 65536 - (30 * us); // 1T模式下无需分频
|
||||
|
||||
T4H = reload >> 8; // 设置重载值高字节
|
||||
T4L = reload & 0xFF; // 低字节
|
||||
|
Reference in New Issue
Block a user