为什么我用TIM1定时10s后才产生中断,我初始值设的是0,但调试出来,开发板一上电就会首先产生一次中断呢,大神解答下 #include "iostm8s208mb.h"//主控芯片的头文件 /************************常用数据类型定义******************/ #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; /**********************端口/引脚定义区域*******************/ #define led1 PI_ODR_ODR0//PI0引脚输出方波信号 /*************************函数声明区域*********************/ void GPIO_init(void);//GPIO端口初始化配置函数声明 void delay(u16 Count);//延时函数声明 void TIM1_init();//TIM1初始化函数声明 /**************************主函数区域**********************/ int main(void) { asm("sim");//改变主程序软件优先级“关闭中断” GPIO_init();//初始化相关GPIO引脚配置 led1=1; TIM1_init();//TIM1相关功能配置初始化 TIM1_CR1|=0x81;//使能计数器使得TIM1_CR1寄存器CEN位为“1” TIM1_SR1&=0xFE;//清除溢出中断标志位"UIF" asm("rim");//改变主程序软件优先级“开启中断” while(1) { } } /****************************************************************/ //GPIO端口初始化配置函数GPIO_init(),无形参,无返回值 /****************************************************************/ void GPIO_init(void) { PI_DDR_DDR0=1;//配置PI0引脚为输出引脚 PI_CR1_C10=1; //配置PI0引脚为推挽输出模式 PI_CR2_C20=0; //配置PI0引脚为低斜率输出 } /****************************************************************/ //TIM1功能初始化函数TIM1_init(),有3个形参x,y和set_num //x和y用于配置分频系数,set_num表示计数值,无返回值 /****************************************************************/ void TIM1_init() { TIM1_PSCRH=0x01;//配置分频系数高位 TIM1_PSCRL=0X8F;//配置分频系数低位 TIM1_ARRH=0xc3; TIM1_ARRL=0x50;//配置自动重装载寄存器高低位 TIM1_CNTRH=0x0; TIM1_CNTRL=0x0; TIM1_IER=0x01;//开启溢出中断 } /****************************************************************/ //TIM1计数溢出中断函数TIM1_UPD_OVF_TRG_BRK_IRQHandler() /****************************************************************/ #pragma vector=0x0D __interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) { led1=!led1;//PB0引脚状态取反输出方波信号 TIM1_SR1&=0xFE;//清除溢出中断标志位"UIF" } |
如果不清中断的话,状态不确定,有可能会出中断标志。
在开中断时,清除标志位吗