keil 调试延时

  • 开心的马骝
  • LV0工程师
  • |      2015-03-02 23:16:15
  • 浏览量 858
  • 回复:9
简单了解了单片机,今天用到延时程序,12MHz的C51单片机延时程序通常写成下面这样
void delayms(unsigned char ms)	

{						

	unsigned char i;

	while(ms--)

	{

		for(i = 0; i < 120; i++);

	}

}
真是百思不得其解啊,12MHz执行1条语句为1us,循环120次,应该只有120us啊,怎么就成了1ms呢。查了半天
才明白,原来这是在keil上调试时得到的时间。为了记忆深刻,自己整理了一遍,希望可以帮助一些我这样的
小白们
  

右键Target 1 选择Option for Target’Targe 1’,如下图所示:

keil 调试延时

设置单片机的晶振如下图所示:         

keil 调试延时

编写程序,并对程序进行编译,编译成功后在程序中设置断点

keil 调试延时

点击Debug 选择Start/Stop Debug Session

keil 调试延时

程序运行到第一个断点,记住此时的时间 sec=0.00038900s

keil 调试延时

再次选择Debug 选择Go 程序运行到下一个断点,再次记录时间  Sec=0.00137600s

keil 调试延时

两次时间的差0.000987即为delayms1)所用的时间,约为1ms。所以用12MHz的晶振时,

延时1ms的程序经常写为开头那样!


  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:8
执念 2015-03-10
总结的很好..
0   回复
举报
发布
韩梅梅 2015-03-04
好好好
0   回复
举报
发布
开心的马骝 2015-03-03
谢谢支持
0   回复
举报
发布
开心的马骝 2015-03-03
恩 努力学习
0   回复
举报
发布
君子好“球” 2015-03-03
看看了。
0   回复
举报
发布
gtrjolin1986 2015-03-03
非常好,欢迎LZ常来发发心德,分数送上!
0   回复
举报
发布
fighter 2015-03-03

那贴我帮你删除了啊。。支持原创

0   回复
举报
发布
shaoziyang 2015-03-02
因为循环语句不是单周期指令。精确时间需要看汇编代码。
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子