0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STC12C5A60S2可编程时钟模块及系统省电模块代码

jf_f8pIz0xS 来源:电子发烧友整理 2018-01-30 11:36 次阅读

本文为大家带来STC12C5A60S2可编程时钟模块及系统省电模块代码介绍。

STC12C5A60S2寄存器介绍

STC12C5A60S2可编程时钟模块及系统省电模块代码

STC12C5A60S2可编程时钟模块及系统省电模块代码

STC12C5A60S2可编程时钟模块及系统省电模块代码

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 《STC12C5A60S2.H》

#include 《intrins.h》

//#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 《STC12C5A60S2.h》

#include 《intrins.h》

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

#endif

}

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

// 主程序 //

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

void main()

{

Sysclk_init();

while(1);

}

STC12C5A60S2省电模块代码

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

// STC12C5A60S2系统省电模块 //

//

// 说明: STC12C5A60S2单片机有三种省电模式以降低功耗。空闲模式,低速模式

// 掉电模式

//

//

// 涉及寄存器:PCON(电源控制寄存器)

// Bit0 - IDL 控制单片机进入IDLE空闲模式

// Bit1 - PD 控制单片机进入掉电模式

// //

// 程序说明: 程序实现让单片机先工作一阵子(通过P0^3指示灯显示)

// 然后进入掉电状态,利用外部中断0口来唤醒单片机工作

// 唤醒后单片机将通过P0^0-3口的灯闪烁显示开始工作

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

/

#include 《STC12C5A60S2.h》

#include 《intrins.h》

#define uchar unsigned char

#define uint unsigned int

uchar Power_Down_Flag = 0; //进入掉电状态标志

sbit Chip_Start_LED = P0^0; //单片机开始工作指示灯

sbi

t Power_Down_LED_INT0 = P0^1; //INT0口掉电唤醒指示灯

sbit N_Power_Down_LED_INT0 = P0^2; //INT0口没有唤醒指示灯

sbit Normal_Work_LED = P0^3; //正常工作指示灯

sbit Power_Down_Wakeup_INT0= P3^2; //外中断唤醒输入口

void Delay_ms( uint time );

void Normal_work(void);

void Intp_init(void);

void After_Powr_Down(void);

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

// 软件延时 //

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

void Delay_ms( uint time )

{

uint t; //延时时间 = (time*1003+16)us while(time--)

{

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

}

}

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

// 正常工作指示

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

void Normal_work(void)

{

Normal_Work_LED = 1;

Delay_ms(500);

Normal_Work_LED = 0;

Delay_ms(500);

}

void After_Power_Down(void)

{

uchar i ;

for( i = 0; i 《 100; i++ )

{

P0 = 0x0f;

Delay_ms(500);

P0 = 0x00;

Delay_ms(500);

}

}

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

// 中断初始化 //

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

void Intp_init(void)

{

IT0 = 0; //外部中断源0为低电平触发

EX0 = 1; //允许外部中断

EA = 1; //开总中断

}

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

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

// 主程序 //

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

void main()

{

uchar j = 0;

uchar wakeup_counter = 0; //记录掉电次数

P0 = 0x00;

Chip_Start_LED = 1; //单片机开始工作

Intp_init(); //外中断0初始化

while(1)

{

P2 = wakeup_counter;

wakeup_counter++;

for( j = 0; j 《 250; j++ )

{

Normal_work(); //系统正常工作指示

}

Power_Down_Flag = 1; //系统开始进入掉电状态

PCON = 0x02;

_nop_();

_nop_();

_nop_();

_nop_();

After_Power_Down(); //掉电唤醒后

}

}

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

// 中断服务

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

void INT0_Service(void) interrupt 0

{

if( Power_Down_Flag ) //掉电唤醒状态指示

{

Power_Down_Flag = 0;

Power_Down_LED_INT0 = 1;

while( Power_Down_Wakeup_INT0 == 0 )

{

_nop_(); //等待高电平

}

Power_Down_LED_INT0 = 0;

}

else //未掉电状态

{

N_Power_Down_LED_INT0 = 1; //不是掉电唤醒指示

while( Power_Down_Wakeup_INT0 == 0 )

{

_nop_();

}

N_Power_Down_LED_INT0 = 0;

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6014

    文章

    44201

    浏览量

    625194
  • STC12C5A60S2
    +关注

    关注

    36

    文章

    219

    浏览量

    69111
收藏 人收藏

    评论

    相关推荐

    kile 怎样添加stc12c5a60s2的头文件?使得可以编程stc12c5a60s2

    kile 怎样添加stc12c5a60s2的头文件?使得可以编程stc12c5a60s2
    发表于 03-28 11:29

    STC12C5A60S2/STC12C5201AD系列单片机

    STC12C5A60S2/STC12C5201AD系列单片机器件手册
    发表于 09-23 23:33 176次下载

    基于STC12C5A60S2的帆板控制系统设计

    STC12C5A60S2单片机为控制核心,利用单片机控制风扇完成对帆板转角的控制。该系统主要模块有单片机控制模块,人机交互模块、角度检测
    发表于 03-22 11:44 203次下载
    基于<b class='flag-5'>STC12C5A60S2</b>的帆板控制<b class='flag-5'>系统</b>设计

    STC12C5A60S2数据手册_官方

    STC12C5A60S2数据官方手册。
    发表于 12-07 18:35 120次下载

    STC12C5A60S2资料

    STC12C5A60S2的全部中文资料,单片机的器件使用手册。
    发表于 04-11 15:18 73次下载

    STC12C5A60S2

    STC12C5A60S2中文资料全面实用 适合学习。
    发表于 05-13 16:40 18次下载

    STC12C5A60S2中文资料

    STC12C5A60S2中文资料
    发表于 02-07 18:25 89次下载

    STC12C5A60S2技术资料

    STC12C5A60S2技术资料
    发表于 09-20 11:39 66次下载
    <b class='flag-5'>STC12C5A60S2</b>技术资料

    stc12c5a60s2中文资料_引脚定义图及最小系统

    本文给出了关于stc12c5a60s2中文详细资料,stc12c5a60s2引脚图及引脚定义详细说明,stc12c5a60s2内部结构图及特点,stc12c5a60s2最小
    发表于 10-20 09:40 15.6w次阅读
    <b class='flag-5'>stc12c5a60s2</b>中文资料_引脚定义图及最小<b class='flag-5'>系统</b>

    基于STC12C5A60S2的LCD显示屏源代码下载

    基于STC12C5A60S2的LCD显示屏源代码下载
    发表于 04-29 09:18 18次下载

    基于STC12C5A60S2的两路采集LCD显示源代码

    基于STC12C5A60S2的两路采集LCD显示源代码
    发表于 04-29 09:35 13次下载

    STC12C5A60S2最小系统

    STC12C5A60S2最小系统
    发表于 11-17 13:51 59次下载
    <b class='flag-5'>STC12C5A60S2</b>最小<b class='flag-5'>系统</b>

    STC12C5A60S2系列单片机PCA时钟源设置

    STC12C5A60S2系列单片机PCA时钟源设置
    发表于 11-18 11:36 13次下载
    <b class='flag-5'>STC12C5A60S2</b>系列单片机PCA<b class='flag-5'>时钟</b>源设置

    STC12C5A60S2上两路PWM的使用方法

    写在前面  这篇博客介绍下如果使用STC12C5A60S2这款单片机上两路自带的PWM模块输出占空比不同的方波。  先上代码
    发表于 11-22 19:06 35次下载
    <b class='flag-5'>STC12C5A60S2</b>上两路PWM的使用方法

    单片机STC12C5A60S2数据手册

    倍),并具有完全兼容的指令设置工业标准80C51系列微控制器。系统编程(ISP)和应用中-编程(IAP)支持用户升级系统中的程序和数据。I
    发表于 06-13 16:57 34次下载