俺有个简单的办法,用Keil的软仿。
一般这样用:
void delay( uint16_t ms ){ // 注意这个参数是ms,也就是毫秒
uint8_t i;
while( ms-- ){
// 注意这个i =100,后面说明这个值怎么确定
for( i=100; i!=0; --i ){;} // 这行要不要{}都行,但分号不能少
}
}
用的时候这样用:
delay(200); // 这就是延时200ms
delay(20); // 这个延时是20ms
这样定义是不是可读性好一点?!
软件仿真前配置好晶振的数值!!!
主程序这样写
void main( void ){
low_level_init(); // 低层初始化,最好打开需要的中断,如按键扫描,LED显示刷新等
delay(1000); // 在这行前定义一个断点,运行到这清一下软件仿真的计时器,在Keil窗口右下角
。。。
while(1);
}
Keil窗口右下角有个软件计时器,再次强调用前一定要设置好晶振的数值
运行delay(1000)前,Reset Watch1, 然后单步运行delay(1000),再看一下Watch1的数值,算一下结果差多少,
修改一下delay程序中的i=100一句,再重新编译一下,重新来过
这个办法的好处是可以把中断的时间影响一起加进去,比单纯的手工算周期更准一些,也不容易出错,但是:
一定要注意CPU的型号,一般只对12分频的标准8051核的好用,比如W79E4051是4分频的,这个办法就不能用了
|