關(guān)于CH552定時器0 定時問題

我想用CH552定時器0,配置成8位自動重裝載模式,100us產(chǎn)生一次中斷,然后1s切換LED狀態(tài),但是設(shè)置完LED是4s才切換狀態(tài),不知道是哪里配置錯了呢?


代碼:

sbit?LED?=?P3^4;

void?main(void)
{
??//設(shè)置時鐘
??SAFE_MOD?=?0x55;?//進(jìn)入安全模式
??SAFE_MOD?=?0xAA;
??
??CLOCK_CFG?&=?~bOSC_EN_XT;??//關(guān)閉外部晶振
??CLOCK_CFG?|=?bOSC_EN_INT;??//使能內(nèi)部晶振
??CLOCK_CFG?=?CLOCK_CFG?&?(~MASK_SYS_CK_SEL)?|?0x06;?//24M
??
??SAFE_MOD?=?0x00;//退出安全模式
??
??//LED配置
??//LED?--?P3.4?--?推挽輸出
??P3?&=?~(1?<<?0x04);?
??P3_DIR_PU?|=?(1?<<?0x04);
??P3?|=?(1?<<?0x04);//關(guān)閉LED
??
??//定時器0初始化
??T2MOD?&=?~bT1_CLK;?//系統(tǒng)時鐘12分頻
??TMOD?=?TMOD?&?0xF0?|?bT0_M1;??//模式2
??TL0?=?0x38;??//賦初值?100us
??TH0?=?0x38;
??ET0?=?1;
??TR0?=?1;

??EA?=?1;
??while(1);
}??

//定時器中斷
void?Time0Interrupt(void)?interrupt?INT_NO_TMR0?using?1
{
??static?uint16_t??cnt?=?0;

??cnt++;
??if(cnt?>=?10000)
??{
????cnt?=?0;
????LED?^=?1;
??}
}

之后我用串口線接到LED引腳,引腳每次從高電平到低電平跳變時,串口會收到0x00

前后收到0x00的時間基本都是8s,也就是LED閃爍的時間間隔為4s,TH0和TL0的初值手算和工具算出來都是這個值。

微信截圖_20210315133149.png


剛用這款單片機(jī),定時器是按照手冊和CH554例程來設(shè)置的


主頻24m,定時器時鐘12分頻即2m,那么一個指令執(zhí)行時間即1/2m,也就是0.5us。如果要設(shè)置100us的定時時間需要設(shè)置初值為200。


定時器不是往上加到全為1變成0就是溢出嗎,所以計數(shù)200次,200*0.5 = 100,所以初值應(yīng)該是256 - 200=56吧


已解決? ?T2MOD?&=?~bT1_CLK;?//系統(tǒng)時鐘12分頻

這個配置成定時器1去了,然后修改時鐘后加了延時等待穩(wěn)定



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

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