AVR 定时、定时器与中断:wait_ms 子程序详解
1. wait_ms 子程序的工作原理
wait_ms 毫秒延迟子程序是基于之前的 wait_1s 固定 1 秒延迟子程序代码开发的。二者的唯一区别在于子程序开始时送入寄存器 R16 到 R19 的数值不同。wait_1s 子程序的起始代码如下:
wait_1s:
ldi R16, low ((F_CPU - 10) / 10)
ldi R17, byte2((F_CPU - 10) / 10)
ldi R18, byte3((F_CPU - 10) / 10)
ldi R19, byte4((F_CPU - 10) / 10)
由于 wait_1s 子程序固定延迟 1 秒,所以该子程序必须消耗的时钟周期数等于 AVR CPU 的时钟频率。上述代码中的数学运算( - 10 )是为了补偿子程序循环前后消耗的时钟周期,( / 10 )则是为了补偿循环中使用的周期。
要理解 wait_ms 子程序的工作原理,我们可以先思考如何使用这段代码实现 1 毫秒的延迟。代码本质上是消耗一定数量的时钟周期,因此我们需要计算出 1 毫秒需要多少个时钟周期。已知一个时钟周期的时间为 1 除以频率,用数学公式表示为:
[t = \frac{1}{f}]
其中,(f) 是 AVR CPU 的频率。
知道一个时钟周期的时长后,我们可以通过将 1 毫秒除以一个时钟周期的时间,来计算出构成 1 毫秒所需的时钟周期数。用数学公式表示为:
[CT = \
超级会员免费看
订阅专栏 解锁全文
1

被折叠的 条评论
为什么被折叠?



