码迷,mamicode.com
首页 > 其他好文 > 详细

一个犯过的编程错误

时间:2017-05-06 23:00:22      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:main   时间间隔   执行   存在   写法   时序   设置   需要   为什么   

为了得到周期一定的时序,我们总是用定时器产生,C51中最常见的用法就是:

void tim0_IRQHandler(void)  interrupt 1

{

  static unsigned int cnt = 0;

  TH0 = XX;

  TL0 = XX;

  cnt++;

  if((cnt %10) == 0){

      //一个时序

  }

  if((cnt%13) == 0)

  {

    //又一个时序

  ]

  if(cnt == 6500){

    cnt = 0;

  }

}:

 

这样的写法一点问题都没有,如果你将cnt定义为全局变量,if判断条件不放在定时器0中断函数里面时,这种做法就出错了。如下:

unsigned int cnt = 0;

void tim0_IRQHandler(void)  interrupt 1

{

  TH0 = XX;

  TL0 = XX;

  cnt++;

}

void fun(void)

{

  if((cnt %10) == 0){

      //一个时序

  }

  if((cnt%13) == 0)

  {

    //又一个时序

  ]

  if(cnt == 6500){

    cnt = 0;

  }

}

void main(void)

{

  fun();

}

错误就出在,当cnt=10是一段时间,存在时间为一次中断时间间隔,在这个时间间隔了,if((cnt % 10 ) == 0){},括弧里面的内容被执行了好多遍。为什么中断函数行呢?因为

中断函数只有发生中断才能进入,所以只会执行if((cnt % 10 ) == 0){}括弧里面的内容一遍。

如果你想放外边,又只想{}里的内容执行一遍,解决办发就是设置一个标志。

void fun(void)

{

  static  unsigned char old = 0xff;

  if(((cnt %10) == 0) && (cnt != old)){

    old = cnt;

    //添加你需要的代码

  }

}

很低级的错误,就是一些小错误也让你找半天。哎,分享给那些需要的同学。水平比较低,见笑。

 

一个犯过的编程错误

标签:main   时间间隔   执行   存在   写法   时序   设置   需要   为什么   

原文地址:http://www.cnblogs.com/emptyYPen/p/6818727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!