STM8S105K4T6 IAR TIM4 中斷計時, 閃灯

STM8S105K4T6 IAR TIM4 中斷計時, 閃灯

1. include .h 順序注意。

1. 系统的主时钟采用默认的高速内部振荡器8分频,即2MHz

2000khz/2^7=15.625kz

256*61=15616 , 等於1秒 


 #include "stm8s.h"

#include "stm8_tsl_api.h"
//#include "IOSTM8S103F3.h"
#include "IOSTM8S105k4.h"

unsigned char i=0;
void Init_Timer4(void)
{
    TIM4_CR1=0x01;//使能计数器
  //TIM4_IER=0x00;
    TIM4_IER=0x01;//更新中断使能
    TIM4_EGR=0x01;
    TIM4_CNTR=255;//计数器值
    TIM4_ARR=255;//自动重装的值
    TIM4_PSCR=0x07;//分频值

}
void Init_GPIO(void)
{
//    PB_DDR|=0x20;
//    PB_CR1|=0x20;
//    PB_CR2|=0x00;
    PE_DDR_bit.DDR5 = 1;//do
    PE_CR1_bit.C15  = 1;//pull up
    PE_CR2_bit.C25  = 1;//1 int , 我用0 , 也正常
    
}

/*
中断
声明一个中断向量,说明如下:
#pragma vector=0x02
__interrupt void interrupt_handler(void)
{
}
说明:
#pragma vector:
是IAR中断向量指令=0x02 :
其数字代表中断向量编号。STM8的地址是从0x00800开始,IAR的中断编号从0开始。中断向量号依次按照中断地址递增。如:
复位向量是0x008000,中断向量号是0x00
TRAP的中断地址是0x008004中断向量号是0x01
SPI中断号是0x0C;详细见下表
__interrupt void interrupt_handler
(void):
是声明一个中断函数,注意interrupt是两个下划线,interrupt_handler是中断函数名字,可自己定义
*/
#pragma vector=TIM4_OVR_UIF_vector//0x19
__interrupt void TIM4_OVR_UIF_IRQHandler(void)//对应IAP的中断地址:0x8060
{
  //asm("JP 0x9060\n");
      i++;
      TIM4_SR=0x00;
      if(i==20)//61
      {
//   PE_ODR^=0x20;
          PE_ODR_bit.ODR5 = !PE_ODR_bit.ODR5;
  i=0;
      }
      //return;
}
int main( void )
{
        Init_GPIO();
        Init_Timer4();
        asm("rim");//打開全局中断
        while(1);
}


留言

這個網誌中的熱門文章

無效的努力

股市-華頓S&P黃豆(00693U) 操作法