1、/*/#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/1
2、2/(256-BRT)/2AUXR = 0x14; /Bit4-BRTR 允许独立波特率发生器运行/Bit2-BRTx12 BRT 工作在 1T 模式下BRT = 0xff; / 更改该寄存器的值可实现对输出的时钟频率进行分频#else /* 条件编译 CLKOUT0 时钟输出 */ CLKOUT0 时钟和 CLKOUT1 初始化 /WAKE_CLKO = 0x03; /允许将 P3.4/T0 脚配置为定时器 0 的时钟输出 CLKOUT0/T0 工作在 1T 模式时的输出频率 = SYSclk/(256-TH0)/2/T0 工作在 12T 模式时的输出频率 = SYSclk/12/(256-
3、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
4、的 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 振荡时钟和外部晶体时/ 出厂标准配置是使
5、用外部晶体或时钟/ 涉及寄存器: CLK_DIV( 时钟分频寄存器 )/ 由该寄存器的 Bit0-2 组合可实现对时钟源进行 0、 2、 4、 8、16/ 32、 64、 128 分频/ / 对外部时钟进行分频得到 Sysclk, 然后经过 P1.0 的独立波特率/ 时钟输出功能 Sysclk/2 输出时钟频率STC12C5A60S2.h#define Bus_clk 12 /若要修改系统时钟直接在此处修改/12为12M的 sysclk/66M/33M/15001.5M/750750kHz/375375kHz/187500187.5kHz/9375093.75kHz/*/ 系统时钟初始化 /v
6、oid Sysclk_init(void) / 配置 P1.0 口为频率输出 / 允许波特率时钟工作/ 工作模式为 1T#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
7、)CLK_DIV = 0x06;#elif( Bus_clk = 93750 )CLK_DIV = 0x07;/*/Sysclk_init();/ STC12C5A60S2 系 统 省 电 模 块 STC12C5A60S2 单片机有三种省电模式以降低功耗 .空闲模式,低速模式/ 掉电模式 PCON( 电源控制寄存器 )Bit0 - IDL控制单片机进入 IDLE 空闲模式Bit1 - PD控制单片机进入掉电模式程序说明:程序实现让单片机先工作一阵子(通过 P03 指示灯显示 )然后进入掉电状态,利用外部中断0 口来唤醒单片机工作唤醒后单片机将通过P00-3 口的灯闪烁显示开始工作/*/ /#d
8、efine uchar unsigned char#define uint unsigned intuchar Power_Down_Flag = 0;/ 进入掉电状态标志sbit Chip_Start_LED= P00;/单片机开始工作指示灯sbit Power_Down_LED_INT0= P01;/INT0口掉电唤醒指示灯sbit N_Power_Down_LED_INT0 = P02;口没有唤醒指示灯sbit Normal_Work_LED= P03;/ 正常工作指示灯sbit Power_Down_Wakeup_INT0= P32;/外中断唤醒输入口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)uswhile(time-)for( t = 0; t 82; t+ );/ 正常工作指示void Normal_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1