程序如下:
//功能:STM8的内部时钟分频切换
#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);
  }
}
}