sht10裸机程序分析(与cc2530进行通讯)

void main(void){ Delay_ms(1000);//让设备稳定 InitUart(); //串口初始化while(1){ DHT11(); //获取温湿度 P0DIR |= 0x40; //IO口需要重新配置 /******温湿度的ASC码转换*******/ temp[0]=wendu_shi+0x30; temp[1]=wendu_ge+0x30; humidity[0]=shidu_shi+0x30; humidity[1]=shidu_ge+0x30; /*******信息通过串口打印********/ Uart_Send_String(temp1,5); Uart_Send_String(temp,2); Uart_Send_String("\n",1); Uart_Send_String(humidity1,9); Uart_Send_String(humidity,2); Uart_Send_String("\n",1); Delay_ms(2000); //延时,使周期性2S读取1次 }如上这段代码,主要是读取温湿度函数DHT11的分析,那么查看他的定义可以发现。这段代码之前总是以为if语句中的判断会一直为假,而不是为真。后来经过分析后得知: 首先wenshi=0后延时,可能是时许要求;其次wenshi=1是拉高这条线,用于检测时候有数据输入。而且后面的delay延时也应该是对时序的要求而延时的。这个逻辑来看,数据数据的标志是低电平即0。那么这样说的话,if语句里面执行与否的话,完全取决于输入的值,若输入为低的话那么就是说 if(!0) 所以就是ture ,if语句里面可以得到执行。(输入的话有高有低,一旦检测到输入低的话,立刻执行if里面的语句) 另外针对调试出现的问题做一些可能性的分析:单步调试发现进不去if语句,但是有可能的原因是:调试的话外部是没有输入的,那么wenshi就一直是为1的没有改变,if(!wenshi)那么就自然为假了。if语句里面不执行。 以上是一位的朋友的理解:另外附上我自己之前的理解,我觉得自己的理解有点问题。wenshi其实就是P1_6口的宏定义,P1DIR设置输入输出寄存器实际上已经改变了wenshi的值,那么if(!wenshi)很自然就恒定为真。可以执行下去。我现在更倾向于前者的理解,问问大家看看。 最后附上代码链接:http://download.csdn.net/detail/wearlee/9875016

你可能感兴趣的:(sht10裸机程序分析(与cc2530进行通讯))