STC89C52刷子函数问题求助

2019-07-15 12:36发布

    本小白最近被导师批得太惨决定加紧做项目,结果被几个需要一直刷的子函数难住了。
我需要个6位数码管,一个18B20,一个PWM波以及一个4相步进电机,但是现在问题是数码管和PWM波都需要靠中断或者delay来控制或生成,如果两个都用中断的话经常是数码管显示不正确,会断一会,都用delay的话数码管一直在闪烁,而且我上网查用delay是很不好的,浪费系统资源,所以想来请教论坛大神们这种话情况应该怎么办???

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
keil-uvision4
2019-07-15 15:50
以T0为例。

BYTE Flags;

main()
{
     //初始化
     while(1)
     {
            //高优先级任务
            //……………

           //低优先级任务
           if(Flags & TASK_FLAG1)
           {
              Flags &=  ~TASK_FALG1;
              DS18B20ReadTemperature();
              // 处理数据
            }
            if(Flags &TASK_FLAG2)
             {
                  Flags &=  ~TASK_FLAG2;
                  //其他操作
            }
      }
}

void OnT0Interrupt (void) interrupt 1
{
    static BYTE Period = 200;
    if( --Period == 0)
    {
          Period = 200;
          Flags |= TASK_FLAG1;
    }


    //下面是PWM操作
}


差不多就是使用类似操作系统的调度机制,要合理选择T0中断周期。

一周热门 更多>