我在计算延误方面遇到了问题。当我为8051微控制器使用1MHz时钟速度时,我希望延迟0.5秒。
我使用proteus进行仿真,使用avr studio进行atmel微控制器的汇编编码。
例如,此代码适用于8MHz时钟微控制器
Delay_15mS:
LDI dly1, 120 ;
Delay1:
LDI dly2, 250 ;
Delay2:
DEC dly2 ;
NOP ;
BRNE Delay2 ;
DEC dly1 ;
BRNE Delay1 ;
RET
你能告诉我如何计算延迟时间吗?所以我可以在1 MHz
的情况下延迟0.5秒谢谢
答案 0 :(得分:0)
0.5秒是微控制器(甚至是慢速)生命中的永恒。
你是否意识到在这样等待的时候你将无法做任何事情? (称为被动等待)
菲尔·韦特泽尔在评论中给你一个描述中断的帖子的链接。这就是你所需要的。
然而,需要阅读数据表以了解如何配置时钟系统,如何配置定时器,如何设置和写入此定时器的中断......
但是要回答你的问题(如果你的代码片段是正确的(?)): 对于8 MHz系统上的15 ms超时,您将实现每秒120次循环(延迟2)。
所以现在你的系统速度要慢8倍,但你想要等待0.5 / 0.015 = 33.33 ......倍。
所以你要等120/8 * 0.5 / 0.015 = 500 delay1循环
但由于μC是8位,因此不能将这样的值存储在8位寄存器中。
所以我担心你所要求的是不可能的(除非你编写代码来处理16位变量)。您也可以创建一个delay0循环并等待250次delay1循环。
不确定你会得到什么准确性!!