STC15W4K32S4 系列 T0定時器輸出時鐘

       T0的時鐘輸出引腳是在T0CLKO/P3.5。要想在這裏輸出時鐘我們要配置寄存器INT_CLKO(AUXR2),寄存器INT_CLKO如下表:

   

    T0的時鐘輸出需要設置T0CLKO(B0)位。當其爲1時,允許T0定時器對外輸出時鐘,輸出時鐘頻率 = T0溢出率 / 2。當其爲0時,不允許T0定時器對外輸出時鐘。(T0的溢出率是指每秒T0上溢的次數)。

     我們還可以選擇,是否讓T0以8051的12倍率工作。

   

    當T0x12配置爲 1 時,T0以傳統8051的12倍運行,即不分頻。當T0x12配置爲 0 時,T0的速度和傳統8051一樣,即12分頻。

    然後就是和傳統的8051一樣配置TMOD和TCON寄存器。

         

    

    下面是測試代碼:

 

#include <reg51.h>

sfr INT_CLKO = 0x8f;     //中斷及時鐘輸出寄存器地址配置
sfr AUXR = 0x8e;         //輔助特殊功能寄存器配置

sbit T0CLKO = P3^5;

void main()
{
    AUXR = 0x80;      //T0x12 = 1, 不分頻,8051的12倍
    TMOD = 0x00;      //設置定時器0爲模式0,即16位自動重載模式
    TH0 = 0xd1;           //由於CLK_DIV初始爲0x00,那麼系統時鐘頻率 = 主時鐘頻率 = 11.0592Mhz。大約是12個時鐘爲1us 
    TL0 = 0x20;           //輸出頻率 = 12000000/(65536 - 53536)/2 = 500Hz  (大致)
    TR0 = 1;              //開定時器0
    INT_CLKO = 0x01;     //允許定時器0在引腳T0CLKO/P3.5處輸出時鐘

    while(1)
    {
      
    };
}

測試結果:

      

      結論:感覺確實沒有12MHz,但是挺接近的。示波器上顯示與500Hz差得應該不是太多吧!

      下面我們再試試使對定時器 0 引腳 T0/P3.4的外部時鐘進行輸出。這裏外部時鐘使用T3輸出的時鐘。

       T3輸出時鐘要配置以下寄存器:

      

      如果我們想把T3的時鐘輸出的話,那麼就只需把T3T4M配置爲0000,1011,即0x0B。

     T3H和T3L的地址如下表:

    

    示例代碼如下:

   

/*STC15W4K32S系列 T0外部時鐘輸出測試*/
#include <reg51.h>


sfr INT_CLKO = 0x8f;    //中斷及時鐘輸出寄存器地址定義
sfr AUXR = 0x8e;        //輔助特殊功能寄存器地址定義
sfr T4T3M = 0xD1;        //T3和T4的控制寄存器地址定義
sfr T3H = 0xD4;          //T3的初始計數地址高8位地址定義
sfr T3L = 0xD5;          //T3的初始計數地址低8位地址定義
sfr P3M0 = 0xB1;         //P3口端口模式寄存器地址定義
sfr P3M1 = 0xB2;

//sbit T0CLKO = P3^5;     //可以不定義,但這個可以提醒程序員這個腳已經用掉了
//sbit T3CLKO = P0^4;     //同上

void main()
{
   T3H = 0xff;    //12MHz/(65536 - 65524) = 1MHz , 溢出率
   T3L = 0xf4;    //輸出頻率 = 1MHz/2 = 500KHz
   T4T3M = 0x0B;     //定時器3的相關設置T3R = 1,T3_C/T = 0,T3x12 = 1, T3CLKO = 1

   AUXR = 0x80;     //定時器0 T0x12 = 1,不分頻,8051速度的12倍
   TMOD = 0x04;     //定時器0設置成爲計數模式,從P3^4輸入的脈衝計數,16位自動重載 
   TH0 = 0xfe;
   TL0 = 0x0c;       //時鐘頻率 = 500KHz/(65536 - 65036)/2 = 500Hz

   TR0 = 1;          //開定時器0
   INT_CLKO = 0x01;  //T0CLKO = 1允許定時器0輸出時鐘
   while(1)
   {
       
   }
}
    實驗結果:

    

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章