关于keil延时函数的问题,和硬件不一致
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于keil延时函数的问题,和硬件不一致相关的知识,希望对你有一定的参考价值。
现在要编写一个硬件的程序,对时序要求很高,因此需要较为精确的延时函数,由于要用很多,所以不用定时器,用延时函数。不过在用keil仿真我的延时函数的时候我发现一个问题,就是用keil软件仿真出来的时间和用硬件仿真出来的时间不一致,同样都是12MHZ,但是用硬件仿真出来的时间是用软件仿真出来时间的两倍。不要跟我说keil仿真时间不准确,应该不是这个原因,呵呵。也就是说是2倍关系,由此我又拿来12MHZ下C的标准延时1us的函数_nop_()来试,软件是0.5us,而硬件才是1us.这是为什么啊???回答满意,另有追分!
谢谢一楼的回答,你说的很正确,但这也正是我当时提这个问题的原因,就是因为keil仿真出来的是0.5us,而硬件仿真出来的是1us。虽然你没有解答我的问题,但还是感谢你。我后来同多询问客服找到问题的答案了,就是我买的这套硬件仿真器,针对我用的p87c591的型号,他又两种时钟模式可选,这个可以在keil中进行设置。他们出场的仿真器默认的是12时钟模式,还有一种是6时钟模式。当设置成6模式时,就可以完全模拟该片子的真是情况了。由此keil和硬件的仿真结果也就一致了.
还有如果要精确的延时,最好是用程序自带的延时函数,
另外我要提醒的是,在主函数大循环中不要过多使用延时功能,建议用计数功能代替延时,这样比较省资源。 参考技术A 不知道你说的硬件仿真是什么意思,P87C591与传统51分频方式有点不一样,接12M晶振时,机器周期是0.5微秒,而不是1微。本回答被提问者采纳
汇编与C51语言如何在Keil混合起来使用?只要教会我调用一个延时函数就可以了。
参考技术A 1、在项目(project)窗口中包含汇编代码的C文件上右键鼠标,选择“options for ...”,并选择“Generate Assembler SRC File”和“Assemble src File”,使他们变成黑色(有效)状态。2、根据选择的编译模式,把相应的库文件(如果是small模式的话,就是 ..\Keil\C51\Lib\C51S.lib)加入到工程中,该文件必须作为工程的最后文件。
3、在C中直接嵌入汇编,方法如下:
#pragma asm
;;;;你的汇编代码,如果是延时函数的汇编代码,就放在这里
#pragma endasm
4、编译,即可生成目标代码。
以上是关于关于keil延时函数的问题,和硬件不一致的主要内容,如果未能解决你的问题,请参考以下文章