在STM8内部有时钟切换功用,能够在需求时改换时钟的频率。板子为STM8_Discovery,LED为PD0。
程序如下:
//软件环境:IAR FOR STM8 V1.0
//作者:Nicole
//功用:STM8的内部时钟分频切换
//日期:2010.11.04
#include “iostm8s105c6.h”
// 函数功用:延时函数
// 输入参数:ms — 要延时的毫秒数,这儿假定CPU的主频为2MHZ
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++)
{
}
for(i=0;i<75;i++)
{
}
ms–;
}
}
//GPIO口初始化
void GPIO_init(void)
{
PD_DDR = 0x01;// 装备PD端口的方向寄存器PD0输出
PD_CR1 = 0x01;// 设置PD0为推挽输出
PD_CR2 = 0x00;
}
//时钟初始化
void CLK_init(void)
{
CLK_SWR = 0xE1;// 挑选芯片内部的16MHZ的RC振荡器为主时钟
}
main()
{
int i;
GPIO_init();
CLK_init();
while(1)// 进入无限循环
{
// 下面设置CPU时钟分频器,使得CPU时钟=主时钟/4
// 经过发光二极管,能够看出,程序运转的速度的确显着下降了
CLK_CKDIVR = 0x1A;// 主时钟 = 16MHZ/8= 2MHz
// CPU时钟 = 主时钟 / 4= 500KHZ
for(i=0;i<10;i++)
{
PD_ODR = 0x01;
DelayMS(100);
PD_ODR = 0x00;
DelayMS(100);
}
// 下面设置CPU时钟分频器,使得CPU时钟=主时钟
CLK_CKDIVR = 0x0A;// 主时钟 = 16MHZ/2 =8MHz
// CPU时钟 = 主时钟/4 = 2MHZ
for(i=0;i<10;i++)
{
PD_ODR = 0x01;
DelayMS(100);
PD_ODR = 0x00;
DelayMS(100);
}
}
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/257857.html