单片机多任务程序的框架

下面说的单片机也主要是51与台系芯片,也就是现在的工作。其它应用不在讨论范围。才识有限,也敬请前辈们勘误,指教。

 

一个真正意义的单片机系统肯定会是多任务的,怎样建立一个多任务程序的框架

1 前后台系统:    

  前台是中断程序,后台是执行主程序,当中断来了,就转到前台来执行时间性要求高的任务。不断的切换。

2 分时扫描(主程序中执行)

  分时扫描思想:

  分时扫描就是在中断中采用一些时间标志,在主程序里分时处理功能模块;

  时间精度要求很高的只能在中断中处理(比如单工通讯),但中断中尽量不要写过多的程序(计时程序是必须的);

  这种方法好想也叫时间片扫描;

  核心思想实现的几个步骤:

  第一,用中断来计时,中断时间50或100us(这是我的习惯,数值根据自己程序设置);

  第二,在中断程序中以50或100us为基准放3个计时器(就是计数器)并有时间标志;100US 1MS 10MS  500MS 都可行但时间要求精准  

  第三,在主程序的循环里面放一个专门处理时间的子程序。

  第四,“程序是跑着来等,而不是站着来等”,(引用别人的话)

/**************************************************************************************************

程序名称:T2中断处理功能描述:定时100US中断一次中断10次=100x10=1Ms 

输入变量:

输出变量:无

影响标志位:

***************************************************************************************************/

void Timer2_ISR() interrupt 5

{         

   TF2=0;                  //中断到来

           B_100USFlag=1;          //100us时间标志

           R_1MSCount++;           //1MS计数器++

           if(R_1MSCount==10)      //判断1MS时间是否到

           {

             R_1MSCount=0;         //清除数据

             B_1MSFlag=1;          //1MS时间标志

             R_10MSCount++;        //10MS计数器++

             if(R_10MSCount==10)   //判断10MS时间是否到

             {

               R_10MSCount=0;      //清除数据

               B_10MSFlag=1;       //10MS时间标志

             } 

           }

}

 

接下来看看我的主程序   

while(1)

{

  这里清除看门狗

//===========================1OOUS处理的事件=============================

  

 if(B_100USFlag==1)

  {

    B_100USFlag=0;

    ADCScan_Por();   //ADC检测程序

  }

//===========================1ms处理的事件=============================

  if(B_1MSFlag==1)

   {

    B_1MSFlag=0;

    Key_Scan();    //按键程序

    ADC_ValPor();  //AD数据处理子程序(也可以在10MS处理)

   }

  

//===========================10ms处理的事件=============================

  if(B_10MSFlag==1)

   {

    B_10MSFlag=0;

    LCD_Por();         //LDC显示子程序

   } 

}

 

很是简单明了吧!我一直是这样用的;觉得还好,当然,这里只是说一种可行的办法而已,不是说只有这种办法,如果大家有好的思想也分享一下哦,

编写程序是一门艺术,写出来很容易,但是写得好,写得精巧,那就很难了。

3)无特殊要求要将看门狗与低压复位打开(具体要求根据实际情况进行配置)

 

最后感谢大家能看完,在下还是菜鸟,希望能得到前辈们的指导,拜谢

 

 

2014/3/23

四非人

QQ:189708929

  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值