|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
阿龙-厦门:
这种时序要如何处理?也用定时器?
鸿哥--深圳:
这种驱动我一般用delay。你就用不同的延时时间来模拟高低电平就可以了。比如时间长的用delay(100),时间长短的用delay(1)。进入驱动程序前,先关闭定时中断,用delay做延时的好处是细分度高,时间可以微调。比如以下延时程序代码:
/* 注释七:
* delay_short(unsigned int uiDelayShort)是小延时函数,
* 专门用在时序驱动的小延时,一般uiDelayShort的数值取10左右,
* 最大一般也不超过100.本例为了解释此函数的特点,取值范围超过100。
* 此函数的特点是时间的细分度高,延时时间不宜过长。uiDelayShort数值
* 的大小就代表里面执行了多少条空指令的时间。数值越大,延时越长。
* 时间精度不要刻意去计算,感觉差不多就行。
*/
void delay_short(unsigned int uiDelayShort)
{
unsigned int i;
for(i=0;i<uiDelayShort;i++)
{
; //一个分号相当于执行一条空语句
}
}
阿龙-厦门:
delay也能做?
鸿哥--深圳:
delay在做驱动模拟时序时是不二的选择。
阿龙-厦门:
如果这个是单线通讯的发射端的话也用delay做吗?
鸿哥--深圳:
对。如果你嫌引导码那部分的时间太长,可以考虑用累计定时中断的方式。
阿龙-厦门:
累计定时中断?
鸿哥--深圳:
就是定时器延时。时间延时的三种方式,请看我《从业将近十年...程序框架》第2,3,4节。delay延时,累计主循环次数,累计定时中断次数是单片机常用的三种方式,我印象中也只有这三种。
|
|