计算 hcs12 的延迟周期

calculating delay cycles for hcs12

我尝试计算 HCS12 的指令周期数和延迟周期数。我有一些关于 HCS12 的信息

HCS12使用总线时钟(E时钟)作为时序 参考。


为了创建 100 毫秒的时间延迟,我们需要将前面的指令序列重复 60,000 次 [100 毫秒 ÷ (40 ÷ 24,000,000) 微秒 = 60,000]。以下指令序列将产生所需的延迟: 有一个例子,但我不明白 6000040 值是如何计算的。

           ldx #60000       
loop       psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           nop               ; 2 E cycles
           nop               ; 3 E cycles
           dbne x,loop

您的第一部分解释了如果内部振荡器(或外部crystal)为 48 MHz,则 EClock 为 24 MHz。所以如果要延迟100毫秒,也就是24,000,000 * 100 / 1,000个EClocks,即2,400,000个指令周期。

可用的最大寄存器大小为 16 位,因此选择的循环计数器值 <= 65535。

方便地说,60,000 是 2,400,000 的因数,即 60,000 * 40。因此,内部循环设计为需要 40 个周期。然而,最后 3 行的时间注释不正确,它们应该是

nop               ; 1 E cycle
nop               ; 1 E cycle
dbne x,loop       ; 3 E cycles

提供所需的 40 个周期执行时间。

注意,如果你有中断,其他进程,这种硬编码的方法不是很准确,定时器中断会更好。