keil uvision3中如何查看程序中的延时

keil uvision3中如何查看程序中的延时,第1张

按Ctrl+F5开始调试,在UV3的底部就有时间出现。按F10单步调试,可姿迟或以看到时间 在增加。你可以在延时程序开始和结束处加上断点,然后按F5运旦做行,黄迹伍色指针会停在延时开始,再F5,指针跳到延时结束 。这时可以看到时间 变化。

延时子程序中的 for 循环条件不对,定义的 i ,j 都是无符号数,可却是>=0循环,这样=0时也要循环一次的,可高樱循环完了还要减1,那0-1是什么数呢,因没有负数,所以,就出错了,在子程序悔念败中就回不来了。要将两个 for 循环的条件中的>=0都要改在>0就可以了。

如果定义 i, j 都是带符号数,即有正负数,你这个循环条件才可以,你可以试一下就知道了。

还有,这是一数LED灯闪烁的程序吧,那主程序也不对的。见下面改后的程序。再有在调延时子程序时所带的实参数要大些,for循环的j变量数也要大些,才能看出来LED闪碧颤烁。

#include <reg51.h>

sbit D1=P0^0

delayms(unsigned int i)

{

unsigned char j

for(i>0i--)

for(j=200j>0j--)

}

void main()

{

while(1)

{

D1=0

delayms(100)

D1=1

delayms(100)

}

}

能用定时器最好用,但有时是没必要搏渗蠢用的,太浪费了,基陪可以考虑用软件延时

本人认为单单用anynop是不行的,如果我要延喊烂时1mS那不是要重复写1000次吗?Keil C里面主要靠循环来实现软件延时,如for while,但Keil C很奇妙

写法不同所产生的汇编代码也不一样,所以造成编写的程序时时性差,但也不完全是这样的,要实现精确延时也是有可能的,用while(--i)如:

void delay(int i)

{

while(--i)

}

记住只有这一种写法[while(--i)]精度是两个时钟周期,其它如while(i--)for(i>0i--)精度都不行。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12368317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存