访问手机版页面
你的位置:老古开发网 > 单片机 > STM8S单片机 > 正文  
stm8s开发(六) EXIT的使用:做一个外部中断的按钮!
内容导读:
在前几篇文章,GPIO的使用:点亮LED!中只讲述了IO口的输出,并没有输入,因为IO作为输入我建议采用中断方式,可以大大减轻CPU的运行时间。最常用的就是按钮的功能了,当然还有和其他芯片通信的功能。前篇文章讲过GP

在前几篇文章,GPIO的使用:点亮LED!中只讲述了IO口的输出,并没有输入,因为IO作为输入我建议采用中断方式,可以大大减轻CPU的运行时间。最常用的就是按钮的功能了,当然还有和其他芯片通信的功能。

前篇文章讲过GPIO可以通过寄存器设置为中断输入。(参考http://blog.csdn.net/devintt/article/details/50818494)


配置模式DDRCR1CR2配置模式上拉电阻输入000悬浮输入OFF010上拉输入ON001中断悬浮输入OFF011中断上拉输入ON输出100开漏输出OFF110推挽输出1x1输出(最快速度10MHZ)xxx真正的开漏输出未采用



这里我们选用PC3作为外部中断


voidEXIT_GPIO_Init(void)

{

PC_DDR&=0xf7;

PC_CR1|=0x08;//将PC3设置成中断上拉输入

PC_CR2|=0x08;

EXTI_CR1=0x20;//PC设置为下降沿触发

}


这里需要注意的是,中断向量指定的是PC,也就是说如果有几个PC口都设置为中断的话,只要其中一个中断响应,就会进入同一个函数。


如果你有好几个按键在同一个port口的话,可以在进入中断函数之后做一个IO口状态的获取,判定哪个IO进行了中断,再对应相应的操作。


#pragmavector=EXIT_PORTC_vector//0x07

__interruptvoidEXIT_PORTC_RQHandler(void)//中断服务函数

{

if((PC_IDR&0x08)==0)

{

delay_nms(50);//延时50ms,消抖

if((PC_IDR&0x08)==0)//再判断是否按下

{

while(!(PC_IDR&0x08));//松手检测

//TODO

}

}

}

由于使用了机械按钮,一般都会有一个机械抖动的过程,所以进入了中断函数之后,我们先做一个消抖处理,这样就可以判断按钮的状态,同时也防止抖动造成了多次中断函数的反复进入。最后加入松手检测,判定按钮动作完成。(TODO这里就可以加入你需要的操作了)


附上stm8s在IAR环境下的项目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代码。

http://download.csdn.net/detail/devintt/9454188


标签: exit,stm8s,外部中断,
来源:互联网 作者:karen 时间:2018/11/28 12:20:01
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐