本帖最后由 Sshadow 于 2015-7-14 16:21 编辑
在单片机编程里面发送一定时间宽度的问题会经常遇到
但有时候发送的脉冲宽度会有一定长度达到ms或s
如果用简单的延时函数时此时cpu就完全浪费了而且其他
任务都得不到cpu的响应出现失灵的状况,
刚好今天写程序时又遇到一个需要发送复位信号的项目
就干脆写一个通用点的函数吧,,然后就有了下面的代码
代码是没优化的可能还有些低效欢迎各位大神不到之处指点指点
if(Pulse_Timer)Pulse_Timer--;//此段代码放在1ms定时器中定时执行
u8 Pulse_Timer=0;
void Pulse()//此函数放在大循环中循环
{
static u8 state=0;
static u8 timer=0;
if(Timer)
{
timer = Pulse_Timer;
return;
}
timer = Pulse_Timer;
switch(state)
{
case 0:
if(Timer)
{
PA0 = 1;
state = 1;
}
break;
case 1:
PA0 = 0;
state = 0;
break;
default:
state = 0;
break;
}
}
要发送一定宽度脉冲时只需要在Pulse_Timer中填入脉冲时间宽度即可
|