标题:
关于延时函数的一些问题和汇编的学习与否
[打印本页]
作者:
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