打印

一个简单非阻塞的脉冲发生函数

[复制链接]
1044|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Sshadow|  楼主 | 2015-7-14 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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中填入脉冲时间宽度即可

相关帖子

沙发
huayuliang| | 2015-7-14 19:17 | 只看该作者
。。。。楼主不知道时间片?systick之类的?

使用特权

评论回复
板凳
Sshadow|  楼主 | 2015-7-14 19:59 | 只看该作者
huayuliang 发表于 2015-7-14 19:17
。。。。楼主不知道时间片?systick之类的?

裸编,,没跑系统

使用特权

评论回复
地板
huayuliang| | 2015-7-15 11:06 | 只看该作者
Sshadow 发表于 2015-7-14 19:59
裸编,,没跑系统

不跑系统也可以用啊。。。

使用特权

评论回复
5
Sshadow|  楼主 | 2015-7-15 11:23 | 只看该作者
huayuliang 发表于 2015-7-15 11:06
不跑系统也可以用啊。。。

就是因为没跑系统所以才会遇到这些问题嘛

使用特权

评论回复
6
huayuliang| | 2015-7-15 11:40 | 只看该作者
Sshadow 发表于 2015-7-15 11:23
就是因为没跑系统所以才会遇到这些问题嘛

:@

跑不跑系统,你也该知道时间片编程,不然只能是初学者的水平。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

42

帖子

1

粉丝