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)
   {
       
   }
}
    实验结果:

    

   

 

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