STC15引脚输出系统时钟
0赞
发表于 3/13/2017 10:44:08 PM
阅读(5718)
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引脚输出正确的系统时钟波形!


