大家帮我分析下uCos-III下,如下代码和波形的关系!我很费解
任务代码如下:static void SHT_task_core(void *p_arg)
{
OS_ERR p_err;
while(1)
{
shtxx_calc(); //计算温湿度
GPIO_SetBits(GPIOC,GPIO_Pin_12);
OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
GPIO_ResetBits(GPIOC,GPIO_Pin_12);
OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
}
}
用示波器测试PC12的波形如下:奇怪的是波形高电平持续时间不是2s而是1.7S,低电平持续的时间也不是2s而是2.3s,总共用时4s,这是什么原因?
说明: shtxx_calc(); 子函数中读取温湿度传感器数值是采用模拟I2C办法实现的,其中有用到for()循环。
我试过去掉shtxx_calc(); 这个函数时,高低电平持续时间就对了,为什么?按照程序的顺序是PC12置“1”后持续2s,再置“0”后持续2s的。
望大伙帮我分析下! calc->1->0 = 1->0->calc
___------__ ----______
低电平时间比高电平时间长时必然的,不过总时间为什么是4秒就不知道了. www378660084 发表于 2012-6-14 08:53 static/image/common/back.gif
calc->1->0 = 1->0->calc
___------__ ----______
低电平时间比高电平时间长时必然的,不过总时间为什么 ...
为什么“低电平时间比高电平时间长时必然的”?帮我分析下! 这种用OSTimeDly是不正确吧,应该用定时器产生中断控制输出。 while(1)
{
shtxx_calc(); // 此处是否花费了0.3秒
GPIO_SetBits(GPIOC,GPIO_Pin_12);
OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
GPIO_ResetBits(GPIOC,GPIO_Pin_12);
OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
}
低电平时间“OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);” + “shtxx_calc();”
高电平时间“OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);” - “shtxx_calc();” 应该,低电平是2.3S,高电平为2S才对!
{
GPIO_SetBits(GPIOC,GPIO_Pin_12);
shtxx_calc(); //换个位置试试,这样就好了
OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
GPIO_ResetBits(GPIOC,GPIO_Pin_12);
OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
}
页:
[1]