|
|
看这段代码:
#define SYSCLK 12000000 // 系统时钟 12MHz
//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------
void SYSCLK_Init(void)
{
OSCICN = 0x83; // 内部 12MHz 振荡器
RSTSRC = 0x04; // 启用缺钟复位
}
//-----------------------------------------------------------------------------
// 简单延时函数
//-----------------------------------------------------------------------------
void delay_ms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
while(1)
{
delay_ms(8289);//延时1秒,12 MHz 下每个周期 1/12 µs ≈ 0.0833 µs
printf("--------2----------\n");
}
但这种方式受编译器优化、中断影响很大,不推荐。
推荐使用硬件定时器:利用单片机自带的定时器(如 Timer0/Timer1)产生精确的 1 秒中断或延时,不受循环指令周期波动影响。 |
|