在调试的时候 发现有问题 高手指教一下 全速跑的时候 at=1 单步跑 at=0 设置断点调试时发现 当断点设置在1时 跑到 后面 at=1, 当断点设置在2 时 at=0
/*=========================================================================
========
long int ReadHtu21(char whatdo)
Function : 温度读取数据
INTPUT : whatdo 0xf5湿度 0xf3温度
OUTPUT : NONE
参数 : 温度or湿度
===========================================================================
======*/
u16 ReadHtu21(char whatdo)
{
TMPHUM();
I2C_START();
if(I2C_TX(HTU21ADDR&0xfe)==ACK) //写地址
{
if(I2C_TX(whatdo)==ACK) //转化命令 //1 断点
{
if(whatdo==0xf3) //2 断点
delay_ms(200); //延时85ms化
else
delay_ms(50); //延时30ms化
delay_ms(50); //延时30ms化
I2C_START();
at=I2C_TX(0x81);
if(at==NACK) return(0);//检测是否对读数响应
HandT[1] = I2C_RX(ACK);//读高八位
HandT[0] = I2C_RX(ACK);//读低八位
CRC_temp = I2C_RX(NACK);//CRC校验位
I2C2_Stop();
CRC_check(2,CRC_temp);//CRC校验函数
if(crc_flag==0) return(0);
if (whatdo==((char)0xf5))
{
HandT[0] &= 0xf0;
temp = ((u32)HandT[1])*((u32)256)+(u32)HandT[0];
temp = temp*((u32)12500);
temp = temp/((u32)65536);
// temp = temp-((u32)400);
temp = temp-((u32)600);
shidu=temp;
temp1=shidu ;
return shidu;
}
else
{
HandT[0] &= 0xfc;
temp = ((u32)HandT[1])*((u32)256)+(u32)HandT[0];
temp1=temp;
temp=((u32)17572)*temp;
temp=temp/((u32)65536);
temp1=temp;
wendu =(u16)(temp-((u32)5100)); /////////////人为的修正4685+320
// wendu =(u16)(temp-((u32)4685)); /////////////人为的修正4685+320
temp1=wendu;
return wendu; //输出66.85
}
}
}
return 0x5555;
}
voidmain(void)
{
.......
while(1)
{
ReadHtu21(0xF3);
Delay_ms(1000);
Delay_ms(1000);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>