若是12MHZ的晶振,延时程序如何修改?
时间: 2024-04-05 14:36:00 浏览: 12
如果晶振频率变化为12MHz,那么延时程序需要相应地进行修改。一种简单的方法是修改延时程序中的计数器值,使其能够在12MHz的晶振频率下正确延时。具体实现可以按照以下步骤:
1. 计算出12MHz下的单个计数器所需要的时间,假设为t1。
t1 = 1 / 12000000 = 0.0000000833s
2. 计算出当前延时所需要的总时间t2。
t2 = 延时时间 / t1
3. 修改延时程序中计数器的初值为t2。
例如,如果原来的延时程序是使用10MHz晶振编写的,需要延时1秒钟,那么计数器初值为100000。在12MHz晶振下,需要修改计数器初值为120000,才能够正确延时1秒钟。需要注意的是,不同的开发板或芯片,延时程序的实现方式可能会有所不同,具体修改方法需要根据实际情况进行调整。
相关问题
编写延时15ms的延时子程序,晶振12Mhz,一个机器周期1us
好的,以下是延时15ms的延时子程序的代码,基于12Mhz晶振和1us的机器周期:
```
delay15ms:
movlw d'15' ; 将15放入工作寄存器 W
delay_loop:
movlw d'120' ; 将120放入工作寄存器 W
delay_loop_1:
decfsz WREG, f ; W 减去 1
goto delay_loop_1 ; 如果 W 不为 0,跳转到 delay_loop_1
decfsz INDF, f ; 等待 1us
goto delay_loop ; 如果 W 为 0,跳转到 delay_loop
return ; 返回
```
使用方法:在需要延时的地方调用 `call delay15ms` 即可。
单片机编写延时15ms的延时子程序,晶振12Mhz,一个机器周期1us
好的,以下是延时15ms的延时子程序的代码,基于12Mhz晶振和1us的机器周期:
```c
void delay15ms() {
unsigned int i, j;
for (i = 0; i < 15000; i++) {
for (j = 0; j < 12; j++) {
asm("nop"); // 1us 等待
}
}
}
```
使用方法:在需要延时的地方调用 `delay15ms()` 即可。