stm8中断的学习

//PA4口中断初始化
void Driver_ExtIntOn(void)
{
//PA4 上拉输入
PA_DDR &= CLRBIT4;
PA_CR1 |= SETBIT4;
//下降沿触发
EXTI_CR1 |= SETBIT1;
EXTI_CR1 &= CLRBIT0;
//开启端口中断
PA_CR2 |= SETBIT4;

}

volatile bool ExiFlag = False;
//中断服务程序
@far @interrupt void Driver_EXI_Interrupt(void)
{
//--- 外部中断处理 ----
//置中断标志
ExiFlag = True;
}


struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap  */
{0x82, NonHandledInterrupt}, /* irq0  */
{0x82, NonHandledInterrupt}, /* irq1  */
{0x82, NonHandledInterrupt}, /* irq2  */
{0x82, Driver_EXI_Interrupt}, /* irq3  */
{0x82, NonHandledInterrupt}, /* irq4  */
{0x82, NonHandledInterrupt}, /* irq5  */
{0x82, NonHandledInterrupt}, /* irq6  */
{0x82, NonHandledInterrupt}, /* irq7  */
{0x82, NonHandledInterrupt}, /* irq8  */
{0x82, NonHandledInterrupt}, /* irq9  */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, NonHandledInterrupt}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, NonHandledInterrupt}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, NonHandledInterrupt}, /* irq20 */
{0x82, NonHandledInterrupt}, /* irq21 */
{0x82, NonHandledInterrupt}, /* irq22 */
{0x82, NonHandledInterrupt}, /* irq23 */
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};

代码的添加和终端的映射是一一对应的。

//LED控制 输入1 点亮; 0 熄灭;
void Driver_LEDCont(bool flag)
{
static bool startflag = 1;
if(startflag)
{
PD_DDR |= SETBIT1;
PA_DDR |= SETBIT1;
PA_DDR |= SETBIT2;
PD_DDR |= SETBIT5;
PD_DDR |= SETBIT3;
PD_CR1 |= SETBIT1;
PA_CR1 |= SETBIT1;
PA_CR1 |= SETBIT2;
PD_CR1 |= SETBIT5;
PD_CR1 |= SETBIT3;
startflag = 0;
}
if(flag)
{
PD_ODR &= CLRBIT1;
PA_ODR &= CLRBIT1;
PA_ODR &= CLRBIT2;
PD_ODR &= CLRBIT5;
PD_ODR &= CLRBIT3;
}
else
{
PD_ODR |= SETBIT1;
PA_ODR |= SETBIT1;
PA_ODR |= SETBIT2;
PD_ODR |= SETBIT5;
PD_ODR |= SETBIT3;
}
}

main()
{
//程序启动STM8默认以HSI分频2M执行速率进行
Driver_LEDCont(1);
//开启外部中断
Driver_ExtIntOn();
//开总中断
_asm("rim");
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//在stm8_interrupt_vector.c文件中 写入中断接入函数Driver_EXI_Interrupt
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//等待中断
while(1)
{
static u16 Timer = 0; 
if(ExiFlag)
{
Timer = 0xfff;
ExiFlag = False;
}
if(!(PA_IDR&CHSBIT4))
Timer = 0xfff;
if(Timer)
{
if(!--Timer)
{
static bool flag = 0;
//循环控制LED灯状态
flag = !flag;
Driver_LEDCont(flag);
}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值