标题: 关于延时函数的一些问题和汇编的学习与否 [打印本页]

作者: heicc    时间: 2015-1-5 16:55
标题: 关于延时函数的一些问题和汇编的学习与否
----------------===============延时函数==================--------------
 延时函数,是很多程序都会用到的函数。C语言很难调试出非常精确的延时函数,但对于大多说场合来说还是可以应用的。若是像DS18B20这类单总线器件对时序的要求较高的,就必须要讨论延时函数的准确性了。
  在此,我所说的是一般应用延时函数。如延时1ms、10ms之类的,用于LED流水灯和按键消抖的程序!在调试过程中,也遇到一些问题,由于不懂汇编,所以暂时无法测试其具体原因,所以,我也在想是否要学习汇编语言。希望懂汇编的朋友能够自己分析。

--------------------------==============延时程序==============------------------
--------------------------------------------------------------
编译测试环境:
    KEIL μVision 3
晶振频率:
    11.0592MHz
测试方法:
    软件自带调试功能
-------------------------------------------------------------


void delay(unsigned int t)             //延时 t 毫秒函数,参数在0 ~ 65535之间,晶振为11.0592MHz
{
  unsigned int x,y;                //定义两个循环用的变量参数


  for(x = t;x > 0;x --)                //循环的次数,有实参决定
       for(y = 120;y > 0;y --);     //每次循环的内部循环次数。
}


问题:当把y声明为unsigned char类型时,延时函数有所改变,测试结果为3.1ms左右。
如下面所示:
-------------------------------------------------------

void delay(unsigned int t)             //此延时函数,不能准确延时1ms.
{
  unsigned int x;                   //定义两个循环用的变量参数

  unsigned char y;

   for(x = t;x > 0;x --)                //循环的次数,有实参决定
       for(y = 120;y > 0;y --);     //每次循环的内部循环次数。
}

-------------------------------------------------------    
问题的具体原因,我不清楚。应该用汇编的方法来调试。



---------------------==若以后调试出来,会再更新的==在次做个标记--------------------------






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1