欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 為什么單片機定時器和程序出來的不一樣? [打印本頁]

作者: xia20    時間: 2024-3-16 20:23
標題: 為什么單片機定時器和程序出來的不一樣?
void T0_init (void)
{
                AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設置定時器模式
        TH0=(65536-1000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
        TL0=(65536-1000)%256;        //16位計數寄存器T0低8位,
        TF0 = 0;                                //清除TF0標志
        TR0 = 1;      //啟動定時器
   ET0 = 1;    //使能定時器中斷

}
void TM0_Isr() interrupt 1
{
        TH0=(65536-1000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
        TL0=(65536-1000)%256;        //16位計數寄存器T0低8位,
                k++;                        //k自加1
        if(k>=1000)                //1秒后計
                {
                        kk++;                        
k=0;
               
                }        
                                if(kk>=10)               
                {
                        kk=0;               

                }        
                                        LED[0]=kk%10;  //顯
                                        LED[1]=kk/10%10;                        
                                        LED[2]=kk/100%10;
                                        LED[3]=kk/1000;                                       
               
}


燒錄程序后數字跑得飛快,而不是1秒1次。為什么?單片機STC8G1K08


作者: 188610329    時間: 2024-3-16 22:42
        TH0=(65536-12000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
        TL0=(65536-12000)%256;        //16位計數寄存器T0低8位,
作者: xia20    時間: 2024-3-16 23:17
188610329 發表于 2024-3-16 22:42
TH0=(65536-12000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
        TL0=(65536- ...

請教,改成12000的依據是什么算法?
作者: ztzp    時間: 2024-3-17 00:17
        TH0=(65536-1000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
        TL0=(65536-1000)%256;        //16位計數寄存器T0低8位,
你這是12T模式下的初值,晶振頻率被除以12,變成了1M,這就是定時器計數的脈沖頻率,周期是1us;
既然單片機工作在1T模式,晶振頻率沒有被除以12,所以定時器計數的脈沖頻率還是12M,周期就是1/12us。
因此初值就應該是:
        TH0=(65536-12000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
        TL0=(65536-12000)%256;        //16位計數寄存器T0低8位,
作者: 明日之星8    時間: 2024-3-17 00:22
定時器T0在12MHz-12T模式時最大時間是65mS,可以設置成50mS一次中斷,
20次就是1秒,官方有那么好的工具你干嘛不用?



void Timer0_Isr(void) interrupt 1
{
}

void Timer0_Init(void)        //50毫秒@12.000MHz
{
    AUXR &= 0x7F;            //定時器時鐘12T模式
    TMOD &= 0xF0;            //設置定時器模式
    TL0 = 0xB0;                //設置定時初始值
    TH0 = 0x3C;                //設置定時初始值
    TF0 = 0;                //清除TF0標志
    TR0 = 1;                //定時器0開始計時
    ET0 = 1;                //使能定時器0中斷
}



作者: wulin    時間: 2024-3-17 07:34
void T0_init (void)
{
        AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設置定時器自動重裝模式
        TH0=(65536-12000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
        TL0=(65536-12000)%256;        //16位計數寄存器T0低8位,
        TF0 = 0;                     //清除TF0標志
        TR0 = 1;                     //啟動定時器
        ET0 = 1;                     //使能定時器中斷
}

void TM0_Isr() interrupt 1
{//自動重裝模式不需要加載
//        TH0=(65536-1000)/256;        //16位計數寄存器T0高8位, 12MHZ時1000微秒
//        TL0=(65536-1000)%256;        //16位計數寄存器T0低8位,
        k++;                        //k自加1
        if(k>=1000)                //1秒后計
        {
                kk++;
                k=0;
        }
        if(kk>=1000)
        {
                kk=0;
        }
        LED[0]=kk%10;  //顯
        LED[1]=kk/10%10;
        LED[2]=kk/100%10;
        LED[3]=kk/1000;
}
作者: xia20    時間: 2024-3-18 03:11
明日之星8 發表于 2024-3-17 00:22
定時器T0在12MHz-12T模式時最大時間是65mS,可以設置成50mS一次中斷,
20次就是1秒,官方有那么好的工具你 ...

謝謝提醒
作者: fosu頑童    時間: 2024-3-26 01:00
下載程序時可以選IRC晶振頻率,如果沒有外部晶振就需要設置IRC頻率




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1