STM8L的TIM2捕获的问题 5
我写了个捕获触发程序。。。。检测到PC0的上升沿后PC7的灯一直高电平,,,,可现在一直进不了中断,,,,求解释#include<iostm8l152C6.h>#defi...
我写了个捕获触发程序。。。。检测到PC0的上升沿后PC7的灯一直高电平,,,,可现在一直进不了中断,,,,求解释
#include<iostm8l152C6.h>
#define uchar unsigned char
#define uint unsigned int
uint x,y,i;
void GPIO_Init()
{
PB_DDR|=0x01;//定义定时器2的通道1
PB_CR1=0x01;
PB_CR2=0x00;
PC_DDR|=0x01;
PC_CR1=0x01;
PC_CR2=0x00;
PE_DDR|=0x80;//定义了PC7那盏LED灯
PE_CR1|=0x80;
PE_CR2=0x00;
}
void TIM2_Init()
{
TIM1_CCER1 &=~0x11;//禁止输入捕获1,2(在开启比较模式前必须要先关闭比较使能才能配置寄存器,不然会出错)
TIM2_CCMR1=0x01;//CC2通道配置为输入,且无预分频,捕获输入口上检测到每一个边沿都触发一次捕获
TIM2_CCER1=0x01;//捕获发生在上升沿,且捕获使能
TIM2_IER|=0x42;//允许捕获比较器1中断
}
void CLK_Init()
{
CLK_CKDIVR = 0x01; //将16M的晶振改成内部8M的晶振
}
void delay()
{
uint i=600;
while(i--);
}
void GPIO_set()
{
PC_ODR_ODR0=0;
delay();
PC_ODR_ODR0=1;
delay();
PC_ODR_ODR0=0;
delay();
PC_ODR_ODR0=1;
delay();
PC_ODR_ODR0=0;
delay();
PC_ODR_ODR0=1;
delay();
}
void main()
{
CLK_Init();
GPIO_Init();
TIM2_Init();
asm("rim");
GPIO_set();
while(1)
{
if(i==1)
{
while(1)
{
PE_ODR_ODR7=1;
}
}
}
}
#pragma vector=TIM2_CAPCOM_CC1IF_vector
__interrupt void zhongduan()
{
i=1;
TIM2_SR1&=0x00; //清除捕获中断
} 展开
#include<iostm8l152C6.h>
#define uchar unsigned char
#define uint unsigned int
uint x,y,i;
void GPIO_Init()
{
PB_DDR|=0x01;//定义定时器2的通道1
PB_CR1=0x01;
PB_CR2=0x00;
PC_DDR|=0x01;
PC_CR1=0x01;
PC_CR2=0x00;
PE_DDR|=0x80;//定义了PC7那盏LED灯
PE_CR1|=0x80;
PE_CR2=0x00;
}
void TIM2_Init()
{
TIM1_CCER1 &=~0x11;//禁止输入捕获1,2(在开启比较模式前必须要先关闭比较使能才能配置寄存器,不然会出错)
TIM2_CCMR1=0x01;//CC2通道配置为输入,且无预分频,捕获输入口上检测到每一个边沿都触发一次捕获
TIM2_CCER1=0x01;//捕获发生在上升沿,且捕获使能
TIM2_IER|=0x42;//允许捕获比较器1中断
}
void CLK_Init()
{
CLK_CKDIVR = 0x01; //将16M的晶振改成内部8M的晶振
}
void delay()
{
uint i=600;
while(i--);
}
void GPIO_set()
{
PC_ODR_ODR0=0;
delay();
PC_ODR_ODR0=1;
delay();
PC_ODR_ODR0=0;
delay();
PC_ODR_ODR0=1;
delay();
PC_ODR_ODR0=0;
delay();
PC_ODR_ODR0=1;
delay();
}
void main()
{
CLK_Init();
GPIO_Init();
TIM2_Init();
asm("rim");
GPIO_set();
while(1)
{
if(i==1)
{
while(1)
{
PE_ODR_ODR7=1;
}
}
}
}
#pragma vector=TIM2_CAPCOM_CC1IF_vector
__interrupt void zhongduan()
{
i=1;
TIM2_SR1&=0x00; //清除捕获中断
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询