完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
DHT11对时序的要求很高,当在程序中出现,static void Delay_nus(uint16 s) [ while (s--) [ asm("NOP"); asm("NOP"); asm("NOP"); ] ]这类的函数的时候,协议栈是不是会对他进行优化呢???我在代码前面已经添加了#pragma optimize=none,是不是还会优化呢???现在是DHT11无法完成初始化,就是时序的问题出现的,请教下大家。
|
|
相关推荐
10个回答
|
|
|
|
|
|
示波器显示电平没有变化,从我上电就是高电平,如果不放在协议栈中的话,运行没有问题的。想问下那个初始化函数应该放在哪里??? int main() [ HAL_BOARD_INIT(); HalLcd_HW_Init(); HalLcd_HW_WriteLine(HAL_LCD_LINE_1, " CC2530EM"); HalLcd_HW_WriteLine(HAL_LCD_LINE_3, "-->DHT11_TEST"); HalLcd_HW_WriteLine(HAL_LCD_LINE_4, "Current hum & temp:"); uint8 hum[10]; uint8 temp[10]; uint8 Sensor[4]; while(1)[ ReadValue(Sensor); IntToStr(hum,Sensor[0]); IntToStr(temp,Sensor[2]); HalLcd_HW_WriteLine(HAL_LCD_LINE_5, hum); HalLcd_HW_WriteLine(HAL_LCD_LINE_6, temp); HalHW_WaitMS(500); ] return 0; 这个是我没有协议栈时候的开始函数,现在放到协议栈了,应该如何修改呢???麻烦您了。 |
|
|
|
IO口方向有没有弄错? 贴出来看看 |
|
|
|
#define IN_DQ P0_7 #define DQ_PIN 7 #define DQ_PORT P0DIR #define SET_OUT DQ_PORT|=BV(DQ_PIN);asm("NOP");asm("NOP") #define SET_IN DQ_PORT&=~(BV(DQ_PIN));asm("NOP");asm("NOP") #define CL_DQ IN_DQ=0;asm("NOP");asm("NOP") #define SET_DQ IN_DQ=1;asm("NOP");asm("NOP") uint8 CheckSum; uint8 tmp8BitValue; #pragma optimize=none static void Delay_nus(uint16 s) [ while (s--) [ asm("NOP"); asm("NOP"); asm("NOP"); ] ] #pragma optimize=none void Read8Bit(void) [ static uint8 OverTimeCnt = 0; uint8 i,tmpBit; for(i=0;i<8;i++) [ OverTimeCnt = 2; while((IN_DQ == 0)&&OverTimeCnt++); //while(IN_DQ == 0); Delay_nus(19);//12 if(IN_DQ == 1) tmpBit = 1; else tmpBit = 0; OverTimeCnt = 2; while((IN_DQ == 1)&&OverTimeCnt++); //while(IN_DQ == 1); //超时则跳出for循环 if(OverTimeCnt==1) break; tmp8BitValue<<=1; tmp8BitValue|=tmpBit; //0 ] ] #pragma optimize=none void ReadValue(uint8 *sv) [ static uint8 OverTimeCnt = 0; SET_OUT; CL_DQ; Delay_nus(20000);//主机拉低至少18ms SET_DQ; Delay_nus(20);//总线由上拉电阻拉高 主机延时20us-40us SET_IN; if(IN_DQ == 0) [ OverTimeCnt = 2; while((IN_DQ == 0)&&OverTimeCnt++); while(IN_DQ == 1); //数据接收状态 Read8Bit(); sv[0]=tmp8BitValue; Read8Bit(); sv[1]=tmp8BitValue; Read8Bit(); sv[2]=tmp8BitValue; Read8Bit(); sv[3]=tmp8BitValue; Read8Bit(); CheckSum = tmp8BitValue; if(CheckSum == sv[0]+sv[1]+sv[2]+sv[3]) [ CheckSum = 0xff; ] ] ] 这是所有的代码,单独使用没有问题,就是不知道应该怎么加入协议栈中使用。 |
|
|
|
32个NOP才是1uS |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
348 浏览 1 评论
543 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
789 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
660 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1140 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
78浏览 29评论
268浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
261浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
210浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
68浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 02:56 , Processed in 1.639433 second(s), Total 97, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号