在嵌入式/单片机编程中,IO处理是很繁琐的事,不同项目或者更换CPU后,往往要重复编程,本贴整理了个人多年编程经验,分享一段通用的IO处理代码。该代码可以嵌在10ms的中断服务程序里(运行时间没有测试,预估在stm8@16M时钟下,不会超过20us)。如果需要快速响应IO中断,可以开启IO中断并在中断该代码中把结果赋给对应变量或者调用相关函数。
需要说明的是,本模块自动消除了IO口的数据抖动,也适合键盘输入。
如果很多IO口共用一个处理函数,可以在注册的时候进行注册,更改该函数的参数,增加IO口的ID索引参数。
充分使用C语言的结构体和函数指针,会使程序的通用性和封装性更佳,本人一直以为面向对象的程序模型就是结构体这种构造型数据的演进,就是Class, 定义函数指针就是它的方法。结构体成员就是私有变量。
这是我的第一篇博文,水平有限,请多提意见。😱
//宏定义
#define IONUMS 4 //可注册的IO口数量
#define IO_LOW 0 //IO低电平事件
#define IO_HIGH 1 //Io高电平事件
#define IO_HIGH_LOW 3 //IO高低电平事件
#define IO_RISE 4 //IO上升沿事件
#define IO_FALI 5