⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysclock.c

📁 单片机开发列程
💻 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 + -