我正在从si实验室开发8051 MCU。我想使用计时器生成确切的1ms延迟。为此,我想知道给定MCU的机器周期时间是多少。 MCU完成一条机器指令所花费的时间。然后,我可以计算出完成1ms延迟的机器周期数。
答案 0 :(得分:0)
要使用计时器,您需要知道计时器时钟的频率是多少。然后,您只需要:timer_clocks=delay*frequency;
仅在需要阻止延迟时才需要知道指令时序。有两个来源:uC文档或实验。要知道您需要多少个环路,只需将示波器连接到引脚并根据需要进行多次环路,以存档所需的脉冲长度
答案 1 :(得分:0)
通过计算MCU周期来创建时间延迟是一种糟糕的方法-尤其是如果您在C语言中无法控制编译器将生成的机器指令的情况下-循环可能会根据编译器选项(例如优化级别)而变化
此外,MCU无法测量自己的时钟。它唯一的时间流逝概念是以时钟周期为单位的-问一个周期有多长时间就像问一个人多长时间。从MCU的角度来看,一个时钟周期有多长的问题的答案始终是1。
作为系统程序员,您有责任知道时钟速度。通常,硬件通过其晶振或振荡器速率定义速度,而MCU PLL设置确定乘数。通常,您会将这种速度作为常数嵌入到启动代码中。您的代码可能会访问此常量。
即使那样,您最好还是使用片上定时器单元而不是基于软件的指令计数来创建延迟(并非所有的8051指令都是单周期的)。在这种情况下,您仍然需要知道时钟速度。那么计时器时钟可以进一步分频。