这个程序想用计时器2方式自动装载生成200us中断,进而产生1ms 嘀嗒(jiffie),为了检测程序对不对,将1ms嘀嗒 / 1000 ,模十后用一个数码管显示,但是调试中发现无论定时器TH0 赋什么值,从1到FF,最后产生的1S间隔都不变,有4~5秒之多,请高手帮忙
#include <REG52.H> #include <stdio.h>
unsigned long jiffies = 0; // (ms)嘀嗒 const unsigned char Num[] = { //7段数码管 0xc0, /* 0 */0xf9, /* 1 */ 0xa4, /* 2 */0xb0, /* 3 */ 0x99, /* 4 */0x92, /* 5 */ 0x82, /* 6 */0xf8, /* 7 */ 0x80, /* 8 */0x90, /* 9 */ }; //串口初始化 void Timer_initial(void) {
TMOD |= 0x02; //timer 0, mode 2, 8-bit reload TL0 = 0x48; //无论这里写什么值,产生时钟间隔都不变 TH0 = 0x48; //200us TR0 = 1; ET0 = 1; EA = 1;//START INT } //200us中断 void Interrupt200us() interrupt 1 { static long cnt; if(!(cnt % 5)) //200us => 1ms jiffies++; cnt++; } void disp8( int i ) { P0 = Num[i%10]; //p0接数码管 } void main() { int sec;
Timer_initial(); while(1){ if( sec != jiffies/1000 ){ disp8( (jiffies/1000) ); sec = jiffies/1000; } } } |