STC12C5A60S2单片机各个模块程序代码.docx

上传人:b****1 文档编号:1425783 上传时间:2022-10-22 格式:DOCX 页数:56 大小:32.34KB
下载 相关 举报
STC12C5A60S2单片机各个模块程序代码.docx_第1页
第1页 / 共56页
STC12C5A60S2单片机各个模块程序代码.docx_第2页
第2页 / 共56页
STC12C5A60S2单片机各个模块程序代码.docx_第3页
第3页 / 共56页
STC12C5A60S2单片机各个模块程序代码.docx_第4页
第4页 / 共56页
STC12C5A60S2单片机各个模块程序代码.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

STC12C5A60S2单片机各个模块程序代码.docx

《STC12C5A60S2单片机各个模块程序代码.docx》由会员分享,可在线阅读,更多相关《STC12C5A60S2单片机各个模块程序代码.docx(56页珍藏版)》请在冰豆网上搜索。

STC12C5A60S2单片机各个模块程序代码.docx

STC12C5A60S2单片机各个模块程序代码

.

 

//****************************************************************************//

//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

 

//#definePort_BRT//如果想测试独立波特率发生器时钟输出请打开此句

//若想测试CLKOUT1和CLKOUT0请注释此句

 

#ifdefPort_BRT/*条件编译独立波特率发生器时钟输出*/

//*********************************//

//CLKOUT2时钟初始化//

//*********************************//

voidCLKOUT_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-BRTx12BRT工作在1T模式下

BRT=0xff;//更改该寄存器的值可实现对输出的时钟频率进行分频

}

#else/*条件编译CLKOUT0时钟输出*/

//*********************************//

//CLKOUT0时钟和CLKOUT1初始化//

//*********************************//

voidCLKOUT_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

//**********************************//

//主程序//

//**********************************//

voidmain()

{

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

 

#defineBus_clk12//若要修改系统时钟直接在此处修改

//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

//*********************************************//

//系统时钟初始化//

//*********************************************//

voidSysclk_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;

 

.

.

 

#endif

}

//**********************************************//

//主程序//

//**********************************************//

voidmain()

{

Sysclk_init();

while

(1);

}

 

//****************************************************************************//

//STC12C5A60S2系统省电模块

//

//

//说明:

STC12C5A60S2单片机有三种省电模式以降低功耗.空闲模式,低速模式

//掉电模式

//

//

//涉及寄存器:

PCON(电源控制寄存器)

//

Bit0-IDL

控制单片机进入IDLE空闲模式

//

Bit1-PD

控制单片机进入掉电模式

//

//

//

程序说明:

程序实现让单片机先工作一阵子

(通过P0^3指示灯显示)

//

然后进入掉电状态

利用外部中断

0口来唤醒单片机工作

//

唤醒后单片机将通过

P0^0-3口的灯闪烁显示开始工作

////****************************************************************************//

 

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

 

ucharPower_Down_Flag=0;

//进入掉电状态标志

sbitChip_Start_LED

=P0^0;

//单片机开始工作指示灯

sbitPower_Down_LED_INT0

=P0^1;

//INT0

口掉电唤醒指示灯

sbitN_Power_Down_LED_INT0=P0^2;

//INT0

口没有唤醒指示灯

sbitNormal_Work_LED

=P0^3;

//正常工作指示灯

sbitPower_Down_Wakeup_INT0=P3^2;

//外中断唤醒输入口

voidDelay_ms(uinttime);

voidNormal_work(void);

voidIntp_init(void);

 

.

.

 

voidAfter_Powr_Down(void);

 

//***********************************//

//软件延时//

//***********************************//

voidDelay_ms(uinttime)

{

uintt;//延时时间=(time*1003+16)us

while(time--)

{

for(t=0;t<82;t++);

}

}

//***********************************//

//正常工作指示

//***********************************//

voidNormal_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1