TIM1配置如下,进不了中断程序。求教各位前辈,哪里出了问题?
仿真数据TIM1_SR1寄存器UIF被硬件置1.这个时候是不是应该产生中断了?
但是进不了中断程序。
void TIM1_INIT(void)
{
TIM1_IER=0X00; //设置时禁止所有中断产生
TIM1_CR1=0X20; //0 01中央对齐向下计数 0000 0禁止计数
TIM1_CNTRH=0X00; //
TIM1_CNTRL=0XFF;
TIM1_ARRH=0X00;
TIM1_ARRL=0XFF;
TIM1_CR1|=0X01; //开启计数
TIM1_IER=0X01; //开启中断
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
volatile _Bool LED_ON4 @PD_ODR:1;
void GpioInit(void)
{
//LED
PD_DDR = 0x03;
PD_CR1 = 0x00;
PD_CR2 = 0x00;
//
}
void Tim1Init(void)
{
TIM1_EGR |= 0x01;
TIM1_ARRH=1100/256;
TIM1_ARRL=1100%256;
TIM1_PSCRH=0;
TIM1_PSCRL=127;
TIM1_IER |=0X01;
TIM1_BKR |= 0x80;
TIM1_CR1 |=0X81;
}
void main()
{
//initial
_asm("sim");
ClockInit();
GpioInit();
Tim1Init();
_asm("rim");
//infiniti loop
while (1)
{
if(flag1ms)
{
flag1ms=0;
Led4Flash();
}
}
}
void Led4Flash(void)
{
unsigned int i=0;
u16 flag=0;
if(++i > 1000) // 1s led flash
{
flag=!flag;
if(flag)
PD_ODR &= ~0x02;
else
PD_ODR |= 0x02;
}
}
void Led3Flash(void)
{
unsigned int i=0;
u16 flag=0;
if(++i > 1000) // 1s led flash
{
flag=!flag;
if(flag)
PD_ODR &= ~0x01;
else
PD_ODR |= 0x01;
}
}
@far @interrupt void TIM1_Interrupt(void)
{
flag1ms=1;
TIM1_SR1 &= ~0x01;
}
这个程序灯为什么不闪啊,总是一直亮着,求指点
一周热门 更多>