STC15W4K32S4 系列 T0定时器输出时钟

来源:互联网 发布:淘宝店9.9包邮 编辑:程序博客网 时间:2024/04/28 10:53

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

    

   

 

1 0