智能车制作
标题:
在线仿真正常,重启后定时就延长了
[打印本页]
作者:
hellozj
时间:
2009-4-3 19:25
标题:
在线仿真正常,重启后定时就延长了
本帖最后由 hellozj 于 2009-4-3 19:27 编辑
///////////////////////////////////////////////////////////////////
//TCNT标准计时器 周期1s
//2009-4-02 chowjun
///////////////////////////////////////////////////////////////////
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
int count=0;
void Start_PLL(void) //busCLK=16M
{
REFDV=0x01; // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
SYNR=0x01; // =2*16M*2/2=32M
asm{
BRCLR CRGFLG,#$08,*
BSET CLKSEL,#$80
}
}
/*************************************************
定时器初始化程序
*************************************************/
void Timer_init(void)
{
TSCR2_PR=0x04; // 预分频系数为4 16M/16 = 1M
//TSCR1_TFFCA=1; // 快速清除标志位
TSCR2_TOI=1; // TOF置1时申请硬件中断
//(1/1M)=1um 机器周期
TCNT=0xffff-0x2710; // 设置定时计数器初值 2710H = 10000
TSCR1_TEN=1; // 禁止定时器
//0.01s
}
/************************************************
主程序main
************************************************/
void main(void)
{
DisableInterrupts;
Start_PLL();
Timer_init();
DDRB=0xff; //OUT
PORTB=0xaa;
for(;;)
{
EnableInterrupts;
}
}
/*************************************************
定时器溢出中断程序
*************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 16 void TimerOverflow_ISR(void)
{
DisableInterrupts;
TCNT=0xffff-0x2710; // 重新载入定时计数器初值
count++;
if(count == 50) {
PORTB = ~PORTB;
count=0;
}
TFLG2_TOF=1; // 写1清标志位
}
#pragma CODE_SEG DEFAULT
复制代码
这个程序bdm烧录后运行正常,但是我重启一次定时就明显延长了,用TBDML软件复位再运行又恢复正常,非常奇怪?希望有人解答下
作者:
hellozj
时间:
2009-4-3 21:21
我把TCNT的值给0xffff-0xe710 重启会正常 , 好像跟这个值有关系 ,不知道有没有人能解答下
作者:
hellozj
时间:
2009-4-3 21:21
我把TCNT的值给0xffff-0xe710 重启会正常 , 好像跟这个值有关系 ,不知道有没有人能解答下
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2