0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STC12C5A60S2可編程時鐘模塊及系統(tǒng)省電模塊代碼

jf_f8pIz0xS ? 來源:電子發(fā)燒友整理 ? 2018-01-30 11:36 ? 次閱讀

本文為大家?guī)鞸TC12C5A60S2可編程時鐘模塊及系統(tǒng)省電模塊代碼介紹。

STC12C5A60S2寄存器介紹

STC12C5A60S2可編程時鐘模塊及系統(tǒng)省電模塊代碼

STC12C5A60S2可編程時鐘模塊及系統(tǒng)省電模塊代碼

STC12C5A60S2可編程時鐘模塊及系統(tǒng)省電模塊代碼

STC12C5A60S2可編程時鐘模塊代碼

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

// STC12C5A60S2可編程時鐘模塊

//

//

// 說明:STC12C5A60S2單片機有三路可編程時鐘輸出CLKOUT0/T0/P3.4

// CLKOUT1/T1/P3.5、CLKOUT2/P1.0

//

// 涉及寄存器:AUXR(輔助寄存器)、WAKE_CLKO(時鐘與系統(tǒng)掉電喚醒控制寄存

器)

// BRT(獨立波特率發(fā)生器定時器寄存器)

//

// 程序說明:

// 本程序可選實現P3.4輸出CLKOUT0時鐘、P3.5輸出CLKOUT1時

// P1.0輸出CLKOUT2時鐘

//

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

/

#include 《STC12C5A60S2.H》

#include 《intrins.h》

//#define Port_BRT //如果想測試獨立波特率發(fā)生器時鐘輸出請打開此句

//若想測試CLKOUT1和CLKOUT0請注釋此句

#ifdef Port_BRT /*條件編譯獨立波特率發(fā)生器時鐘輸出*/

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

// CLKOUT2時鐘初始化 //

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

void CLKOUT_init(void)

{

WAKE_CLKO = 0x04; //Bit2-BRTCLKO 允許P1.0配置為獨立波特率發(fā)生器的時

鐘輸出

//BRT工作在1T模式下時的輸出頻率 = Sysclk/(256-BRT)/2

//BRT工作在12T模式下時輸出頻率 = Sysclk/12/(256-BRT)/2

AUXR = 0x14; //Bit4-BRTR 允許獨立波特率發(fā)生器運行

//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系統(tǒng)時鐘模塊

//

//

// 說明: 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 //若要修改系統(tǒng)時鐘直接在此處修改

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

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

// 系統(tǒng)時鐘初始化 //

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

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系統(tǒng)省電模塊 //

//

// 說明: STC12C5A60S2單片機有三種省電模式以降低功耗??臻e模式,低速模式

// 掉電模式

//

//

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

// Bit0 - IDL 控制單片機進入IDLE空閑模式

// Bit1 - PD 控制單片機進入掉電模式

// //

// 程序說明: 程序實現讓單片機先工作一陣子(通過P0^3指示燈顯示)

// 然后進入掉電狀態(tài),利用外部中斷0口來喚醒單片機工作

// 喚醒后單片機將通過P0^0-3口的燈閃爍顯示開始工作

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

/

#include 《STC12C5A60S2.h》

#include 《intrins.h》

#define uchar unsigned char

#define uint unsigned int

uchar Power_Down_Flag = 0; //進入掉電狀態(tài)標志

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為低電平觸發(fā)

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(); //系統(tǒng)正常工作指示

}

Power_Down_Flag = 1; //系統(tǒng)開始進入掉電狀態(tài)

PCON = 0x02;

_nop_();

_nop_();

_nop_();

_nop_();

After_Power_Down(); //掉電喚醒后

}

}

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

// 中斷服務

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

void INT0_Service(void) interrupt 0

{

if( Power_Down_Flag ) //掉電喚醒狀態(tài)指示

{

Power_Down_Flag = 0;

Power_Down_LED_INT0 = 1;

while( Power_Down_Wakeup_INT0 == 0 )

{

_nop_(); //等待高電平

}

Power_Down_LED_INT0 = 0;

}

else //未掉電狀態(tài)

{

N_Power_Down_LED_INT0 = 1; //不是掉電喚醒指示

while( Power_Down_Wakeup_INT0 == 0 )

{

_nop_();

}

N_Power_Down_LED_INT0 = 0;

}

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635216
  • STC12C5A60S2
    +關注

    關注

    36

    文章

    219

    瀏覽量

    70040
收藏 人收藏

    評論

    相關推薦

    kile 怎樣添加stc12c5a60s2的頭文件?使得可以編程stc12c5a60s2

    kile 怎樣添加stc12c5a60s2的頭文件?使得可以編程stc12c5a60s2
    發(fā)表于 03-28 11:29

    STC12C5A60S2的相關資料分享

    為備2021年大學生電子設計比賽整理單片機通用配置(基于STC12C5A60S2STC12C5A60S2自主適應時鐘延時函數外部中斷初始化配置STC12C5A60S2定時器配置
    發(fā)表于 02-18 07:25

    STC12C5A60S2/STC12C5201AD系列單片機

    STC12C5A60S2/STC12C5201AD系列單片機器件手冊
    發(fā)表于 09-23 23:33 ?176次下載

    基于STC12C5A60S2的帆板控制系統(tǒng)設計

    STC12C5A60S2單片機為控制核心,利用單片機控制風扇完成對帆板轉角的控制。該系統(tǒng)主要模塊有單片機控制模塊,人機交互模塊、角度檢測
    發(fā)表于 03-22 11:44 ?203次下載
    基于<b class='flag-5'>STC12C5A60S2</b>的帆板控制<b class='flag-5'>系統(tǒng)</b>設計

    STC12C5A60S2資料

    STC12C5A60S2的全部中文資料,單片機的器件使用手冊。
    發(fā)表于 04-11 15:18 ?73次下載

    STC12C5A60S2

    STC12C5A60S2中文資料全面實用 適合學習。
    發(fā)表于 05-13 16:40 ?29次下載

    STC12C5A60S2中文資料

    STC12C5A60S2中文資料
    發(fā)表于 02-07 18:25 ?89次下載

    STC12C5A60S2技術資料

    STC12C5A60S2技術資料
    發(fā)表于 09-20 11:39 ?66次下載
    <b class='flag-5'>STC12C5A60S2</b>技術資料

    stc12c5a60s2中文資料_引腳定義圖及最小系統(tǒng)

    本文給出了關于stc12c5a60s2中文詳細資料,stc12c5a60s2引腳圖及引腳定義詳細說明,stc12c5a60s2內部結構圖及特點,stc12c5a60s2最小
    發(fā)表于 10-20 09:40 ?15.8w次閱讀
    <b class='flag-5'>stc12c5a60s2</b>中文資料_引腳定義圖及最小<b class='flag-5'>系統(tǒng)</b>

    基于STC12C5A60S2的LCD顯示屏源代碼下載

    基于STC12C5A60S2的LCD顯示屏源代碼下載
    發(fā)表于 04-29 09:18 ?18次下載

    基于STC12C5A60S2的兩路采集LCD顯示源代碼

    基于STC12C5A60S2的兩路采集LCD顯示源代碼
    發(fā)表于 04-29 09:35 ?13次下載

    STC12C5A60S2最小系統(tǒng)

    STC12C5A60S2最小系統(tǒng)
    發(fā)表于 11-17 13:51 ?59次下載
    <b class='flag-5'>STC12C5A60S2</b>最小<b class='flag-5'>系統(tǒng)</b>

    STC12C5A60S2系列單片機PCA時鐘源設置

    STC12C5A60S2系列單片機PCA時鐘源設置
    發(fā)表于 11-18 11:36 ?13次下載
    <b class='flag-5'>STC12C5A60S2</b>系列單片機PCA<b class='flag-5'>時鐘</b>源設置

    STC12C5A60S2上兩路PWM的使用方法

    寫在前面??這篇博客介紹下如果使用STC12C5A60S2這款單片機上兩路自帶的PWM模塊輸出占空比不同的方波?! ∠壬?b class='flag-5'>代碼
    發(fā)表于 11-22 19:06 ?35次下載
    <b class='flag-5'>STC12C5A60S2</b>上兩路PWM的使用方法

    單片機STC12C5A60S2數據手冊

    倍),并具有完全兼容的指令設置工業(yè)標準80C51系列微控制器。系統(tǒng)編程(ISP)和應用中-編程(IAP)支持用戶升級系統(tǒng)中的程序和數據。I
    發(fā)表于 06-13 16:57 ?45次下載