历史上的今天
今天是:2024年09月02日(星期一)
2020年09月02日 | stm8s开发(六) EXIT的使用:做一个外部中断的按钮
2020-09-02 来源:eefocus
在前几篇文章,GPIO的使用:点亮LED!中只讲述了IO口的输出,并没有输入,因为IO作为输入我建议采用中断方式,可以大大减轻CPU的运行时间。最常用的就是按钮的功能了,当然还有和其他芯片通信的功能。
前篇文章讲过GPIO可以通过寄存器设置为中断输入。
配置模式DDRCR1CR2配置模式上拉电阻
输入000悬浮输入 OFF
010上拉输入ON
001中断悬浮输入 OFF
011中断上拉输入ON
输出100开漏输出 OFF
110推挽输出
1x1输出(最快速度10MHZ)
xxx真正的开漏输出未采用
这里我们选用PC3作为外部中断
void EXIT_GPIO_Init(void)
{
PC_DDR &= 0xf7;
PC_CR1 |= 0x08; // 将PC3设置成中断上拉输入
PC_CR2 |= 0x08;
EXTI_CR1 = 0x20; //PC设置为下降沿触发
}
这里需要注意的是,中断向量指定的是PC,也就是说如果有几个PC口都设置为中断的话,只要其中一个中断响应,就会进入同一个函数。
如果你有好几个按键在同一个port口的话,可以在进入中断函数之后做一个IO口状态的获取,判定哪个IO进行了中断,再对应相应的操作。
#pragma vector = EXIT_PORTC_vector //0x07
__interrupt void EXIT_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
史海拾趣
|
一、TPMS技术及其轮胎定位原理 TPMS原理及功能简介:TPMS是汽车轮胎压力检测系统,即“Tire Pressure Monitoring System”的英文缩写。主要用于在汽车行驶时,适时地对轮胎气压进行自动监测,对轮胎漏气造成低胎压和高温高胎压防爆胎进行预 ...… 查看全部问答> |
|
国外的有几个公司但好像没有见到国内的,不知什么原因是技术瓶颈还是国内不屑微小的市场份额????asn.1 到JAVA或者到c 语言的商用编译器哪个好?一般什么价位?望大虾指教,感激不尽… 查看全部问答> |
|
最近在做一个双电源的51系统,是用来控制一个机器人的,电机比较多. 第一次做板,而且制板费昂贵,还是处于学生阶段的小弟希望以小心为上.. 我用的软件是Altium Designer 6.9 1.滴泪是为了防止在转孔时导线和焊接盘断裂,那么是否一定要加滴泪呢? 2. ...… 查看全部问答> |
|
大家好! WinCE 中 OCX的调用问题? Primary dispatch interface 的接口的GUID是不是需要DllRegisterServer的注册,如果需要,怎么注册,不需要的话,外部网页怎 ...… 查看全部问答> |
|
我用CF作为启动盘,通过网络启动VxWorks,我已经用MkBoot将CF做成启动盘了,请问CF中是否已经包含了文件系统?还是需要另外再安装相应的文件系统呢?我想在CF卡中创建一个文本文件,肯定需要文件系统的吧!请大侠们指点小弟,不胜感激!… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:40 编辑 刚才得知自己被选到学校的全国电设大赛校队了,今年暑假集训,由于大二只有自己一个,呵呵,想请教一哈参加过的前辈们该学点什么,已掌握multisim,protel,proteus,擅长汇编,(但据说c语言更好) ...… 查看全部问答> |
|
题目:工业流程计量及控制指南 简介:本篇主要讲述,流程处理及控制系统应用于许多不同的领域,包括了测试实验室、军用装配及加工设备、医疗及自动化。此类系统采用不同类型的传感器及反馈机制,通过采集、存储、分析数据来实现对本地环境 ...… 查看全部问答> |




