STC8H系列—1.系统时钟的控制教程

一、前言:

   STC8H系列属于增强型C51单片机,标准版的51单片机的系统时钟通常使用外部晶振为其提供稳定的时钟源,而8H系列系统时钟类似于STM32的时钟树概念,不仅可以使用外部时钟而且(IRC)内部时钟源同样的稳定精确,至于系统时钟控制的意义,不在本教程的探讨范围,仅供单片机爱好者之间的交流学习。

二、知识简介:

STC8H时钟树

依据8H系列芯片手册,它提供了四种时钟输入供选择,分别是内部高速时钟(HIRC)、外部高速时钟(XOSC)、外部32K时钟(X32K)、内部32K时钟(IRC32K),另外还有一路特殊的内部48M(IRC48M)专供USB时钟,这5类时钟操作相关的特殊寄存器都可以成为系钟时钟的时钟源,下面介绍操作相关的寄存器实现系统时钟的控制与输出。

三、实验平台搭建:

   1、MCU:STC-打狗棒系列核心实验板 V2.3

   2、实验板平台:德飞莱LY-51s

   3、硬件连接表:

 四、测试源代码:

#include "STC8H.h"
void Delay1ms(unsigned char x);//当主时钟频率为12M,1ms延时为基准
void Blink_Led();//利用延时闪灯,主频不同延时有差异
void init_IO();//初始化IO
sbit Led=P0^0;
void main()
{
		P_SW2 |= 0x80;  //扩展寄存器XFR访问使能
		CKSEL=0x0C;
		init_IO();
		HIRCCR=0x80;//内部IRC使能位
		IRCBAND&=0xFC;//SEL[1:0] 值为00 syscls=6M		
		CLKDIV=0x00;//时钟源无分频至系统时钟	
	while(1)
	 {
		 if(P20==0)
		 {
		    CKSEL=0x00;//选择内部高整IRC
			 IRCBAND&=0xFC;//清空值
			 IRCBAND|=0x01;//SEL[1:0] 值为01 syscls=10M
		 }
		 if(P21==0)
		 {
		   IRCBAND&=0xFC;//清空值
			 IRCBAND|=0x02;//SEL[1:0] 值为10 syscls=27M
		 }
		 if(P22==0)
		 {
		   IRCBAND&=0xFC;//清空值
			 IRCBAND|=0x03;//SEL[1:0] 值为11 syscls=44M
		 }
		 if(P23==0)//时钟源降频16倍得到系统时钟
		 {
		   CLKDIV=0x0F;
		 }
		 if(P24==0)//选择内部IRC32K晶振
		 {
			IRC32KCR=0x80;
			 while(!(IRC32KCR&1));
			 CLKDIV=0x00;
			 CKSEL=0x03;
		 }
		 
		 if(P25==0)//系统时钟直接从P1_6输出
		 {
			  MCLKOCR=0x81;
		 }
		 
	    Blink_Led();	 
	 }
	 
}

void init_IO()
{
	P0M1 = 0x00;   P0M0 = 0x00;   //设置P0口为准双向口
	P1M1 = 0x00;   P1M0 = 0x00;   //设置P0口为准双向口
}


void Blink_Led()
{
	Led=0;  //点亮Led
	Delay1ms(10);
	Led=1;  //点亮Led
	Delay1ms(10);
}

void Delay1ms(unsigned char x)		//@12.000MHz 
{
	unsigned char i, j;
	i = 16;
	j = 147;
	while(x--)
	{
		do
		{
			while (--j);
		} while (--i);
	}	
}

五、运行结果视频:

STC8H单片机时钟控制视频

猜你喜欢

转载自blog.csdn.net/qq_21082985/article/details/131982366
今日推荐