本帖最后由 ql1007 于 2010-7-6 11:12 编辑
void system_init(void){
OSCCON = 0b01110000; //PLL off, 8M Internal OSC
while(HFIOFS==1); //等待振荡器0.5%稳定
T1CON = 0b10111101; //32.768K crystal OSC, 1:8 prescaler
T1GCON = 0b00000000; //T1G off
TMR1H = 0xfo;//1S
TMR1L = 0x00;
TMR1IE = 1;
WDTCON = 0b00011111; //32s
SWDTEN=1;
TRISA=0xff;
TRISB=0xff;
TRISC=0xff;
TRISE=0xff;
ANSELA=0;
ANSELB=0;
WPUB=0;
LATA=0xff;
LATB=0xff;
LATC=0xff;
LATE=0xff;
TokenDisplay[0]=3;
TokenDisplay[1]=4;
TokenDisplay[2]=5;
TokenDisplay[3]=6;
TokenDisplay[4]=7;
TokenDisplay[5]=8;
TimeSegment=3;
PEIE = 1;
GIE = 1;
}
void interrupt isr(void){
if(TMR1IF==1&&TMR1IE==1){
TMR1IF=0;
TMR1H=TMR1Hset;
//TMR1L=TMR1Lset;
Timer1Overflow=1;
}
昨天可能没表达清楚,重新说下,大家给看下,
我看网上很多时钟这块都是选的32768K的晶振定时精确,可是我看这个程序,也是32768K,定时器用这个外部晶振实时计时,预分频8,那这个定时器1最大定时时间是:65535*4/0.032*8=65535000us=65535MS
考虑一秒溢出中断一次,1000MS/8=125000us,就是定时器1经过这么多周期就是1S,
问题就在于 :初值怎么算呢?6553500-125000=?? 和他这个F000差别也太大了吧,大家给看看啊 |