欢迎光临东莞市飞江电子科技有限公司官网!
全国咨询热线

13926563901

18925580829

飞江淘宝店铺

首页>技术资料>51单片机

STM8003F3定时器2周期性中断

发布时间:2018-04-04   浏览量:

/*    添加包含芯片的头文件    */
#include

unsigned int ms_count;


/*******************************************************************************
**函数名称:void Timer2Init()
**功能描述:定时器2参数初始化
**入口参数:无
**输出:无
*******************************************************************************/
void Timer2Init()
{
  TIM2_PSCR = 0x00;   //定时器2预分频数为 1 分频,即定时器时钟 = 系统时钟 = 16MHz
  TIM2_ARRH = 0x3e;   //设置1毫秒时间自动重载 16000 = 0x3e80
  TIM2_ARRL = 0x80;   //
  TIM2_CNTRH = 0;     //清除计数寄存器
  TIM2_CNTRL = 0;     //
  TIM2_IER = 0x01;    //使能定时器2允许更新中断
  TIM2_SR1 = 0x00;    //清除所有的中断标示
  TIM2_CR1 = 0x81;    //使能计数器,并允许自动预装
}

/*******************************************************************************
**函数名称:void LED2Init()
**功能描述:LED2->功能引脚初始化
**入口参数:无
**输出:无
*******************************************************************************/
void LED2Init()
{
  PC_DDR_bit.DDR7 = 1;
  PC_CR1_bit.C17 = 1;
  PC_CR2_bit.C27 = 1;
}

/**       主函数      **/
int main(void)
{
 
  asm("sim");           //先关闭总中断
  CLK_CKDIVR = 0x00;    //CPUDIV = 1 HSIDIV = 1  内部时钟 = 16Mhz
  LED2Init();           //调用LED2初始化函数
  Timer2Init();         //调用定时器2初始化函数
  asm("rim");           //打开总中断
  while(1);             //进入死循环,等待定时器2周期中断
}


/*******************************************************************************
**函数名称:__interrupt void TIM2_UPDATE_IRQHandler(void)
**功能描述:定时器2重载更新中断服务函数
**入口参数:无
**输出:无
*******************************************************************************/
#pragma vector = 15     //设置定时器2重载的中断向量号 = 15
__interrupt void TIM2_UPDATE_IRQHandler(void)
{
  TIM2_SR1 = 0x00;      //清除中断标志
  ms_count++;           //中断使 ms_count++ 做加法,记录1毫秒产生的中断次数
 
  if(ms_count >= 1000)  //记录达到1000毫秒,即1秒
  {
    ms_count = 0;       //复位记录中断次数
    PC_ODR ^= 0x80;     //对LED2进行异或取反,使LED2以1秒的周期亮灭
  }
}

www.appmcu.com