📄 sysclock.c
字号:
#define __SYSCLOCK_H__
#include "Config.h"
/********************************************************************************************************
**函数名称:SDelay
**函数功能:时钟切换的延时
**入口参数:无
**出口参数:无
********************************************************************************************************/
void SDelay(uchar T)
{
uchar i;
for(; T > 0; T --)
for(i = 5000; i > 0; i --);
}
/********************************************************************************************************
**函数名称:SysClockInit
**函数功能:初始化时的时钟设置
**输 入:无
**输 出:无
********************************************************************************************************/
void SysClockInit(void)
{
DEVCLKCFG1 &= 0xF0; //屏蔽时钟分频位
DEVCLKCFG1 |= (CLKDIV & 0x0F); //设置分频值
DEVCLKCFG1 |= BIT5; //使能时钟分频器
//--------------------------------------------------------
//外部晶体到内部振荡器的切换
//--------------------------------------------------------
#if (SYSCLKSOURCE == INTEROSC) //使用内部振荡器
DEVCLKCFG2 |= BIT6; //使能内部OSC,同时保持外部OSC
SDelay(100); //等待振荡器稳定
DEVCLKCFG1 |= BIT6; //选择内部时钟源
//SDelay(100); //可选的稳定时间
DEVCLKCFG2 &= ~BIT7; //禁止外部时钟源
//--------------------------------------------------------
//内部振荡器到外部晶体的切换
//--------------------------------------------------------
#elif(SYSCLKSOURCE == EXTEROSC)
DEVCLKCFG2 = (BIT7 | BIT6 | BIT2); //使能外部晶振,时钟范围4M-25M,同时保持内部振荡器
//SDelay(100); //等待外部晶体振荡器稳定100ms@40MHz
DEVCLKCFG1 &= ~BIT6; //选择使用外部振荡源
//SDelay(100); //可选的延时时间
DEVCLKCFG2 &= ~BIT6; //禁止内部振荡源
#endif
}
/********************************************************************************************************
**函数名称:SysClockSet
**函数功能:选择系统的时钟函数,注意改变时钟后,相应的波特率也变化了
**输 入:无
**输 出:无
********************************************************************************************************/
/*
void SysClockSet(uchar Source, uchar DIV)
{
//先切换时钟源再设置分频
switch(Source)
{
case INTEROSC:
DEVCLKCFG2 = BIT7 | BIT6; //使能内部振荡器,同时保持外部振荡器使能
SwitchDelay(10); //等待内振荡器稳定100ms@40MHz
DEVCLKCFG1 |= BIT6; //选择使用内部振荡源
SwitchDelay(10); //可选的延时时间
DEVCLKCFG2 &= ~BIT7; //禁止外部振荡器
break;
case EXTEROSC:
DEVCLKCFG2 = (BIT7 | BIT6 | BIT2); //使能外部晶振,时钟范围4M-25M,同时保持内部振荡器
SwitchDelay(10); //等待外部晶体振荡器稳定100ms@40MHz
DEVCLKCFG1 &= ~BIT6; //选择使用外部振荡源
SwitchDelay(10); //可选的延时时间
DEVCLKCFG2 &= ~BIT6; //禁止内部振荡源
break;
default:
break;
}
DEVCLKCFG1 &= 0xF0; //设置分频值
DEVCLKCFG1 |= (DIV & 0x0F); //
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -