部分代码如下; #define SYSCLK 11059200 // 系统时钟频率Hz void SYSCLK_Init (void) { int i; // 延时计数器 OSCXCN = 0x67; // 启动外部振荡器晶振 for (i=0; i < 256; i++) ; // 等待振荡器启动 while (!(OSCXCN & 0x80)) ; // 等待振荡器稳定 OSCICN = 0x88; // 选择内部振荡器为时钟源并使能丢失时钟检测器 } void Timer0_Delay (int ms) { int i; // 毫秒计数器 TCON &= ~0x30; // 停止定时器T0并清除溢出标志 TMOD &= ~0x0f; // 配置定时器T0为16位模式 TMOD |= 0x01; CKCON |= 0x08; // 定时器T0计数系统时钟 for (i = 0; i < ms; i++) { // 数毫秒 TR0 = 0; // 停定时器T0 TH0 = (-SYSCLK/1000) >> 8; // 设置定时器T0 1ms溢出 TL0 =-SYSCLK/1000; TR0 = 1; // 启动定时器T0 while (TF0 == 0); // 等待溢出 TF0 = 0; // 清除溢出标志 } }
为什么 TH0 = (-SYSCLK/1000) >> 8; TL0 =-SYSCLK/1000; 要这样写啊? 怎样算出来的 还有那个分频有什么作用?
请说的详细点 谢谢 |