STC12C5A60S2单片机各个模块程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//**************************************************************************** //
// STC12C5A60S2可编程时钟模块
//
//
// 说明:STC12C5A60S2单片机有三路可编程时钟输出CLKOUT0/T0/P3.4
// CLKOUT1/T1/P3.5、CLKOUT2/P1.0
//
// 涉及寄存器:AUXR(辅助寄存器)、WAKE_CLKO(时钟与系统掉电唤醒控制寄存器) // BRT(独立波特率发生器定时器寄存器)
//
// 程序说明:
// 本程序可选实现P3.4输出CLKOUT0时钟、P3.5输出CLKOUT1时钟// P1.0输出CLKOUT2时钟
//
////************************************************************************** **//
#include
#include
//#define Port_BRT //如果想测试独立波特率发生器时钟输出请打开此句
//若想测试CLKOUT1和CLKOUT0请注释此句
#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,是普通C51的12倍
//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,是普通C51的12倍
//12T指的是每12个时钟加1与普通C51一样
AUXR = 0xc0; //T0定时器速度是普通8051的12倍,即工作在1T模式下
//T1定时器速度是普通8051的12倍,即工作在1T模式下
TMOD = 0x22; //定时器0工作模式为方式2,自动装载时间常数
//定时器1工作模式为方式2,自动装载时间常数
TH0 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频
TL0 = 0xff;
TH1 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频
TL1 = 0xff;
TR1 = 1;
TR0 = 1;
}
#endif
//**********************************//
// 主程序//
//**********************************//
void main()
{
CLKOUT_init();
while(1);
}
//**************************************************************************** //
// STC12C5A60S2系统时钟模块
//
//
// 说明: STC12C5A60S2单片机有两个时钟源,内部R/C振荡时钟和外部晶体时钟// 出厂标准配置是使用外部晶体或时钟
//
//
// 涉及寄存器:CLK_DIV(时钟分频寄存器)
// 由该寄存器的Bit0-2组合可实现对时钟源进行0、2、4、8、16
// 32、64、128分频
// //
// 程序说明:
// 对外部时钟进行分频得到Sysclk,然后经过P1.0的独立波特率
// 时钟输出功能Sysclk/2输出时钟频率
//**************************************************************************** //
#include
#include
#define Bus_clk 12 //若要修改系统时钟直接在此处修改
//12 为 12M 的sysclk
//6 为 6M 的sysclk
//3 为 3M 的sysclk
//1500 为 1.5M 的sysclk
//750 为 750kHz 的sysclk
//375 为 375kHz 的sysclk
//187500 为 187.5kHz 的sysclk
//93750 为 93.75kHz 的sysclk
//*********************************************//
// 系统时钟初始化 //
//*********************************************//
void Sysclk_init(void)
{
WAKE_CLKO = 0x04; //配置P1.0口为频率输出
AUXR = 0x14; //允许波特率时钟工作
//工作模式为1T
BRT = 0xff;
#if( Bus_clk == 12 )
CLK_DIV = 0x00;
#elif( Bus_clk == 6 )
CLK_DIV = 0x01;
#elif( Bus_clk == 3 )
CLK_DIV = 0x02;
#elif( Bus_clk == 1500 )
CLK_DIV = 0x03;
#elif( Bus_clk == 750 )
CLK_DIV = 0x04;
#elif( Bus_clk == 375 )
CLK_DIV = 0x05;
#elif( Bus_clk == 187500 )
CLK_DIV = 0x06;
#elif( Bus_clk == 93750 )
CLK_DIV = 0x07;