STC15引脚输出系统时钟
0赞
发表于 3/13/2017 10:44:08 PM
阅读(3968)
STC单片机的内部RC时钟配置非常方便,虽然精度不是很高,但是在要求不高的场合下却能省去一个外部晶振,而且可以对之中进行预设系统时钟,并分频通过引脚输出。
主要使用了CLK_DIV寄存器:
(1)其中CLKS2、CLKS1、CLKS0用来控制将主时钟分频后作为系统时钟,共CPU和片内外设。
(2)其中,B6和B7比特位用于控制在STC单片机引脚输出时钟的频率。
(3)CLK_2控制在那个引脚输出时钟。
这里要注意的是当想要将系统时钟通过P1.6引脚输出时,需要注意之前P1.6的状态,可能复位后P1.6为高阻输入,因此需要在初始化时先将引脚配置成输出(准双向也可)。不然可能没有输出。
接下来写个程序测试一下结果,下载程序时,将内部RC时钟配置成24MHz作为主时钟,然后4分频后作为系统时钟,在4分频后通过P1.6引脚输出,可用示波器查看波形。
程序如下:
#include <STC15F2K60S2.H> #include "stdio.h" void GPIO_Init(void); void Uart_Init(void); char putchar(char c); void main(void) { GPIO_Init(); CLK_DIV = (CLK_DIV & 0x30) | (0x02 | 0x08 | 0xc0); Uart_Init(); printf("This is a test of SYSclk output...\r\n"); printf("The Mclk is 24MHz, the Sysclk is 6MHz, and divided by 4 output on Pin1.6...\r\n"); printf("You can test it on the pin 1.6\r\n"); for(;;) { ; } } void GPIO_Init(void) { P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; } void Uart_Init(void) //9600bps@6.000MHz { SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x01; //串口1选择定时器2为波特率发生器 AUXR |= 0x04; //定时器2时钟为Fosc,即1T T2L = 0x64; //设定定时初值 T2H = 0xFF; //设定定时初值 AUXR |= 0x10; //启动定时器2 } char putchar(char c) { SBUF = c; while(TI == 0) { ; } TI = 0; return c; }
将程序下载到单片机中,运行,可以看到串口输出提示信息。
手头没有示波器,还好有个逻辑分析仪,将就着看一下,发现P1.6引脚输出正确的系统时钟波形!