stm8s开发(六) EXIT的使用:做一个外部中断的按钮!
在前几篇文章,GPIO的使用:点亮LED!中只讲述了IO口的输出,并没有输入,因为IO作为输入我建议采用中断方式,可以大大减轻CPU的运行时间。最常用的就是按钮的功能了,当然还有和其他芯片通信的功能。
前篇文章讲过GPIO可以通过寄存器设置为中断输入。(参考http://blog.csdn.net/devintt/article/details/50818494)
配置模式 | DDR | CR1 | CR2 | 配置模式 | 上拉电阻 |
输入 | 0 | 0 | 0 | 悬浮输入 | OFF |
0 | 1 | 0 | 上拉输入 | ON | |
0 | 0 | 1 | 中断悬浮输入 | OFF | |
0 | 1 | 1 | 中断上拉输入 | ON | |
输出 | 1 | 0 | 0 | 开漏输出 | OFF |
1 | 1 | 0 | 推挽输出 | ||
1 | x | 1 | 输出(最快速度10MHZ) | ||
x | x | x | 真正的开漏输出 | 未采用 |
这里我们选用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开发(六) EXIT的使用:做一个外部中断的按钮!相关推荐
- 【连载】【FPGA黑金开发板】NIOS II那些事儿--外部中断实验(五)
声明:本文为原创作品,版权归本博文作者所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 简介 这一节,我们通过来讲解一下NIOS II的硬件中断的内容,同时借助这 ...
- 一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序
开发制作小程序可以让商家更方便地引流获客.增加线上订单.尤其是今年小程序直播大火,商家有了新的运营私域流量的利器,因此做一个电商带直播功能的小程序是很有用的. 如何开发一个这样的小程序呢?流程如下: ...
- 测试开发成长学习路线--如何做一个DevOps流水线上的开发测试
大家知道,测试开发或者开发测试范围很大,一个人的精力和你当前的项目经历,决定了你属于某一个领域的具体的测试开发的工作.在这里,我不纠结测试开发和开发测试有何不同,有一个叫法罢了.今天这里要讨论的是如何 ...
- hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...
1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十章 外 ...
- 【MM32F5270开发板试用】GPIO输入+EXTI外部中断例程demo试用
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:Zeee 前言: 首先,感谢灵动微电子与极术社区给予宝贵的试用机会.借助本次对Plus-F ...
- 用 CSS 做一个美化的 button 按钮
效果图: <head> <meta charset="utf-8"> <title>无标题文档</title><style&g ...
- 如何做一个带有复制功能的按钮?
1.直接上代码 <input id="copied" type="text" value="123456" style="m ...
- 蚂蚁金服六轮面试,从一个中游的公司跳槽的阿里P7,我是怎么撑过来的?
本人开发六年多,从一个中游的公司跳槽的阿里P7,其实这六轮的面试下来整体感觉还是不错的,在这之前我其实面试的其他公司的时候很烂. 第一轮:团队面试 第一轮基本上是你的团队成员面试你,是和你同级或者高你 ...
- css3 做一个会动的菜单 menu 按钮动画效果
css3 做一个会动的菜单 menu 按钮动画效果 需要做一个会的动画按钮效果,小前端部知道如何实现,我看了一眼需要的效果,给他写了一个简单的 demo. 设计师给了俩图片,一个是 三 这样的菜单图标 ...
最新文章
- python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
- 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。...
- 安师大计算机与信息学院导师,安徽师范大学数学计算机科学学院导师介绍:罗永龙...
- 程序猿老公去米国参加 WWDC,顺便想带渡老婆蜜月,如何办签证?
- linux以非root身份运行,以非root用户身份在linux中运行mono-service
- C# 10 新特性 —— Lambda 优化
- Revit 2011二次开发“弹出对话框,得到输入的值”
- 【Flink】FlinkException The file LOG does not exist on the TaskExecutor
- Java 拷贝,你能说出个 123 么?
- 操作系统高响应比优先调度算法代码_进程调度
- Ora-00600 错误的代码含义及常用查询
- 软件类配置(五)【强化学习算法框架-Ubuntu16.04安装谷歌Dopamine及初步测试】
- php 串行化与json(转)--很不错的文章
- unity找到特定一个物体的子物体,多个子物体有相同的名称
- bpsk调制及解调实验_调制的理解
- AI 全自动玩斗地主,靠谱吗?Douzero算法教程
- 修改Android模拟器存储位置,更改AndroidAVD模拟器创建路径位置的方法
- 美国克莱姆森大学计算机专业排名,美国西北大学计算机专业排名怎么样?
- 达摩院高清人像美肤模型ABPN CVPR论文深入解读
- ArcGIS水文分析实战教程(5)细说流向与流量
热门文章
- 出场率比较高的一道多线程安全面试题
- 利用Comet4J 及时推送消息
- matlab计算原点矩,关于用matlab求样本均值方差以及k阶原点矩的matlab程序
- 二层交换配置完ping失败_设置完端口聚合之后就ping不通了!!!
- python os模块下载_Python OS模块目录文件处理
- oracle字段求和_oracle大纲
- am335x linux内核烧写_实时 Linux 抖动分析 Step by step
- 全球规模最大的全浸没式液冷数据中心落户杭州余杭
- UPS技术培训系统方案
- python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式