回覆列表
  • 1 # 文小簷

    不知道問題0x00計算在內是什麼意思,定時器從0開始,計時一次為1,計時2次為2,依次累加,工作方式2的8位定時器計到2∧8=256,工作方式1的16位定時器計到65536,假設微控制器晶振為12MHz,則一個機器週期為1us,所以8位定時器最大定時為256us,16位定時器最大定時為65ms。當微控制器到達最大定時時間時就會產生定時中斷,在中斷程式中需要清除中斷標誌位,並對定時器重新賦值才能再次進行定時。

  • 2 # Nicetrip

    12兆晶振每隔一微秒計數器加一,也就是從0x00變成0x01需要一微秒。經過65536個脈衝當計數器溢位時的總時間為65.536ms毫秒。如果0x00看成是一個時間單位,那麼,第65536個脈衝可以視為0,我這樣說你明白了嗎?就像零點和二十四點是一個意思,看你怎麼理解了。兩個數字才能構成時間跨度,單純一個數字無論是幾都和時間沒有半毛錢關係。

  • 3 # 一起學微控制器

    沒理解你的問題,看來你對定時器的工作還有一些疑惑,用STC89C52微控制器來說,它有3個定時器,分別是T0,T1和T2。其中T2有捕捉功能。

    舉例如定時器配置為 16 位定時器/計數器(模式1), TL0 的 8 位和 TH0 的 8 位所構成16位計數器(就是2位數16位,轉換為10進位制就是0到65535),當它溢位是將置位TCON的TF0位。如果開了T0中斷,將進入T0中斷程式(一定要有,哪怕是空的),硬體將自動清除中斷標誌。

    初值的意義就是從這個數字開始到65536溢位,這個差值乘以計數週期就是定時的時間。如果初值為0,就是最長定時週期,如果為65535,就是來一個計數週期,就會溢位,產生中斷。 用一段程式來說明。要使用定時器,需要設定TMOD定時器暫存器,指定工作模式,設定定時器初值。開定時器,開中斷。如果不開,就需要程式中手動判斷TF0標誌位,進行處理。

    /*定時器0,系統時鐘為11.059200M,12T模式,定時器5ms,則初值計算為65536-11059200/12*0.005=60928=0xEE00,則TH0=0xEE,TL0=0x00;*/

    void T0_init()

    {

    TMOD&=0xF0;

    TMOD|=0x01;

    TH0=0xEE;

    TL0=0x00;

    TR0=1; //開定時器

    ET0=1; //開中斷

    }

    void Timer0() interrupt 1 //中斷程式,需要重新賦初值

    { static unsigned char cnt=0;

    TH0=0xEE;

    TL0=0x00;

    cnt++; //200次中斷,產生1秒標誌位 if(cnt>=200)

    { cnt=0;

    flag1s=1;

    LED=~LED; //1sLED指示

    } P0 = 0xFF; //消隱

    switch(i) //動態切換P0口,顯示LED值

    { case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0];break;

    case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=(LedBuff[1]&0x7F);break;

    case 2: ADDR2=0; ADDR1=1; ADDR0=0; i=0; P0=LedBuff[2];break;

    default:break;

    }

    }

    附圖是T0模式1的結構,89C52可以選擇6T(速度快1倍))或12T模式。定時器計數器模式選擇。是否與外部中斷0一起控制啟動計數器(脈寬測量)。來一個計數脈衝TH0TL0加1,到65536,溢位置位標誌TF0,產生中斷。

  • 4 # 電子學習

    題主你好!微控制器中0x00作為定時器的初值,在計數時0x00不計算在內,但參與了計數。為何這樣說,從以下分析便可清楚。

    1:51微控制器的定時器/計數器是加計數器。工作時該微控制器有0至3四種工作方式,每種方式的定時/計數最大值都不一樣;

    2:設定某種方式後,都是定時/計數到該方式最大值後才會溢位,產生中斷訊號給微控制器中CPU。溢位啟動中斷後須對中斷位清零,重新對定時器高低賦值。

    3:假設設定定時工作方式為0方式,此時微控制器定時/計數最大值為8192,若設定初值為0x00,啟動定時器後,定時器便會以0x00為基數開始加1,直至數滿溢位,產生中斷。具體過程參看下圖便明白。

    從上面波形圖可以看出:

    ①:定時初值賦為0x00時,定時從0到1每加一次,都由一個由高(低)到低(高)的高低兩個電平組成;

    ②賦初值為零(0x00)時,定時啟動後,無論0x00處是高或低電平開始,都豎到1(0x01)才為加1。

    故而講,0x00計數時不計算在內,但參與了計數!

  • 中秋節和大豐收的關聯?
  • 牛口蹄疫中藥治療方法?