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

[复制链接]
1310|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
裸编,,没跑系统

不跑系统也可以用啊。。。
 楼主| Sshadow 发表于 2015-7-15 11:23 | 显示全部楼层
huayuliang 发表于 2015-7-15 11:06
不跑系统也可以用啊。。。

就是因为没跑系统所以才会遇到这些问题嘛
huayuliang 发表于 2015-7-15 11:40 | 显示全部楼层
Sshadow 发表于 2015-7-15 11:23
就是因为没跑系统所以才会遇到这些问题嘛

:@

跑不跑系统,你也该知道时间片编程,不然只能是初学者的水平。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

42

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部