使用ch552定时器,初始值为什么赋值50ms,实际显示的不是呢

/*******************************************************************************

* Function Name  : void Timer0_Init()

* Description    : 定时器初始化

*******************************************************************************/

void Time0_Init()

{

count = 0;

min   = 0;

sec   = 59;

mTimer0Clk12DivFsys();                                     //T0定时器时钟设置

mTimer_x_ModInit(0,1);                                     //T0定时器模式设置

mTimer_x_SetData(0,0xC350);                                //T0定时器赋值  65536-50000

mTimer0RunCTL(1);                                          //T0定时器启动

ET0   = 1;                                                 //T0定时器中断开启

EA    = 1;

}

/*******************************************************************************

* Function Name  : mTimer0Interrupt()

* Description    : CH554定时计数器0定时计数器中断处理函数

*******************************************************************************/

voidmTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1           //timer0中断服务程序,使用寄存器组1

{

mTimer_x_SetData(0,0xC350);                                          //非自动重载方式需重新给TH0和TL0赋值

count++;

if(count==20)

{

count=0;

if(sec==0)

{

if(min!=0)

{

sec=59;

min--;

}

else

{

mTimer0RunCTL(0);                                          //T0定时器停止

}

}

else sec--;

}

}


工作在16位计数器模式时要注意在中断函数中要重新填写初值。

12M主频,定时器12分频,0XC350的初值是对的。


50ms*20=1s,但是实际显示的不是1s的增加的,秒表计数,不知道是什么问题?


用你的代码测试了一下,代码如下,用示波器观察P1.7引脚波形,翻转时间在1秒。

您重点检查一下主频吧,还有既然不是1s增加的,那你的单次定时时长变成了多少,又是如何去观察这个计数变化的。

image.png

image.png


按照这个编程是大约是两秒,59秒倒计时,不设置时间的时候进入59s倒计时,通过段码显示,赋值c350(65536-5000)50ms,count计数20次,50ms*20=1000ms=1s,实际显示的倒计时大约是2是变化减1,不是1s建1


检查主频,在中断中翻转IO,示波器观察IO电平宽度


#define mTimer0Clk12DivFsys( ) (T2MOD &= ~bT0_CLK)                          //定时器,时钟=Fsys/12 T0标准时钟

使用的是这个,如果count==10时,得出的结果是对的每1s减1


检查CLOCK_CFG寄存器MASK_SYS_CK_SEL域

image.png


voidCfgFsys( )  

SAFE_MOD = 0x55;

SAFE_MOD = 0xAA;

CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x04;  // 12MHz

}

这样设置


建议在中断中翻转IO测试


只有登录才能回复,可以选择微信账号登录