您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 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时钟//////****************************************************************************//#includeSTC12C5A60S2.H#includeintrins.h//#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)/2AUXR=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输出时钟频率//****************************************************************************//#includeSTC12C5A60S2.h#includeintrins.h#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;//允许波特率时钟工作//工作模式为1TBRT=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口的灯闪烁显示开始工作////****************************************************************************//#includeSTC12C5A60S2.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintucharPower_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)uswhile(time--){for(t=0;t82;t++);}}//***********************************////正常工作指示//***********************************//voidNormal_work(void){Normal_Work_LED=1;Delay_ms(500);Normal_Work_LED=0;Delay_ms(500);}voidAfter_Power_Down(void){uchari;for(i=0;i100;i++){P0=0x0f;Delay_ms(500);P0=0x00;Delay_ms(500);}}//***********************************////中断初始化////***********************************//voidIntp_init(void){IT0=0;//外部中断源0为低电平触发EX0=1;//允许外部中断EA=1;//开总中断}//***********************************////主程序////***********************************//voidmain(){ucharj=0;ucharwakeup_counter=0;//记录掉电次数P0=0x00;Chip_Start_LED=1;//单片机开始工作Intp_init();//外中断0初始化while(1){P2=wakeup_counter;wakeup_counter++;for(j=0;j250;j++){Normal_work();//系统正常工作指示}Power_Down_Flag=1;//系统开始进入掉电状态PCON=0x02;_nop_();_nop_();_nop_();_nop_();After_Power_Down();//掉电唤醒后}}//**********************************////中断服务//**********************************//voidINT0_Service(void)interrupt0{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;
本文标题:STC12C5A60S2单片机各个模块程序代码
链接地址:https://www.777doc.com/doc-3321965 .html