使用ch552定時器,初始值為什么賦值50ms,實際顯示的不是呢

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

* Function Name? : void Timer0_Init()

* Description? ? : 定時器初始化

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

void Time0_Init()

{

count = 0;

min? ?= 0;

sec? ?= 59;

mTimer0Clk12DivFsys();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//T0定時器時鐘設(shè)置

mTimer_x_ModInit(0,1);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//T0定時器模式設(shè)置

mTimer_x_SetData(0,0xC350);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //T0定時器賦值? 65536-50000

mTimer0RunCTL(1);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //T0定時器啟動

ET0? ?= 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//T0定時器中斷開啟

EA? ? = 1;

}

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

* Function Name? : mTimer0Interrupt()

* Description? ? : CH554定時計數(shù)器0定時計數(shù)器中斷處理函數(shù)

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

voidmTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1? ? ? ? ? ?//timer0中斷服務(wù)程序,使用寄存器組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位計數(shù)器模式時要注意在中斷函數(shù)中要重新填寫初值。

12M主頻,定時器12分頻,0XC350的初值是對的。


50ms*20=1s,但是實際顯示的不是1s的增加的,秒表計數(shù),不知道是什么問題?


用你的代碼測試了一下,代碼如下,用示波器觀察P1.7引腳波形,翻轉(zhuǎn)時間在1秒。

您重點檢查一下主頻吧,還有既然不是1s增加的,那你的單次定時時長變成了多少,又是如何去觀察這個計數(shù)變化的。

image.png

image.png


按照這個編程是大約是兩秒,59秒倒計時,不設(shè)置時間的時候進入59s倒計時,通過段碼顯示,賦值c350(65536-5000)50ms,count計數(shù)20次,50ms*20=1000ms=1s,實際顯示的倒計時大約是2是變化減1,不是1s建1


檢查主頻,在中斷中翻轉(zhuǎn)IO,示波器觀察IO電平寬度


#define mTimer0Clk12DivFsys( ) (T2MOD &= ~bT0_CLK)? ? ? ? ? ? ? ? ? ? ? ? ? //定時器,時鐘=Fsys/12 T0標(biāo)準時鐘

使用的是這個,如果count==10時,得出的結(jié)果是對的每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

}

這樣設(shè)置


建議在中斷中翻轉(zhuǎn)IO測試


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频