//****************************************************************************//
//                          STC12C5A60S2可编程时钟模块                        //
//
单片机printf函数//      说明:STC12C5A60S2单片机有三路可编程时钟输出CLKOUT0/T0/P3.4
//            CLKOUT1/T1/P3.5CLKOUT2/P1.0
//
//      涉及寄存器:AUXR(辅助寄存器)WAKE_CLKO(时钟与系统掉电唤醒控制寄存器)
//                  BRT(独立波特率发生器定时器寄存器)
//
//      程序说明:
//                  本程序可选实现P3.4输出CLKOUT0时钟、P3.5输出CLKOUT1时钟
//                  P1.0输出CLKOUT2时钟
//
////****************************************************************************//
#include <STC12C5A60S2.H>
#include <intrins.h>
//#define Port_BRT      //如果想测试独立波特率发生器时钟输出请打开此句
                        //若想测试CLKOUT1CLKOUT0请注释此句
#ifdef Port_BRT      /*条件编译独立波特率发生器时钟输出*/
//*********************************//
//        CLKOUT2时钟初始化      // 
//*********************************//
void CLKOUT_init(void)
{
    WAKE_CLKO = 0x04;  //Bit2-BRTCLKO 允许P1.0配置为独立波特率发生器的时钟输出
                        //BRT工作在1T模式下时的输出频率 = Sysclk/(256-BRT)/2
                        //BRT工作在12T模式下时输出频率 = Sysclk/12/(256-BRT)/2
    AUXR      = 0x14;  //Bit4-BRTR 允许独立波特率发生器运行
                        //Bit2-BRTx12 BRT工作在1T模式下
    BRT      = 0xff;  //更改该寄存器的值可实现对输出的时钟频率进行分频
}
#else                    /*条件编译CLKOUT0时钟输出*/
//*********************************//
//  CLKOUT0时钟和CLKOUT1初始化    // 
//*********************************//
void CLKOUT_init(void)
{
    WAKE_CLKO = 0x03;    //允许将P3.4/T0脚配置为定时器0的时钟输出CLKOUT0
                        //T0工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2
                        //T0工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2
                        //1T指的是每1个时钟加1,是普通C5112
                        //12T指的是每12个时钟加1与普通C51一样
                       
                        //允许将P3.5/T1脚配置为定时器1的时钟输出CLKOUT1,只能工作在定时器模式2
                        //T1工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2
                        //T1工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2
                        //1T指的是每1个时钟加1,是普通C5112
                        //12T指的是每12个时钟加1与普通C51一样
    AUXR      = 0xc0;    //T0定时器速度是普通805112,即工作在1T模式下
                        //T1定时器速度是普通805112,即工作在1T模式下
    TMOD      = 0x22;    //定时器0工作模式为方式2,自动装载时间常数
                        //定时器1工作模式为方式2,自动装载时间常数
    TH0      = 0xff;    //更改该寄存器的值可实现对输出的时钟频率进行分频
    TL0      = 0xff;
    TH1      = 0xff;    //更改该寄存器的值可实现对输出的时钟频率进行分频
    TL1      = 0xff;
    TR1      = 1;
    TR0      = 1;
}
#endif     
//**********************************//
//            主程序                //
//**********************************//