今天粉丝催更,求“串口中断”的教程,第一次被催啊,我稍微认真点写。
之前讲过中断的概念,没看过的小伙伴可以 “中断”-嵌入式的灵魂 看一下,今天给大家讲一下,三种中断中最不起眼的串口中断,说实话,串口中断不适合单独讲,适合放在通信里去讲。
![efb497fc314acb16b93a3a72ea04b251.png](https://i-blog.csdnimg.cn/blog_migrate/9bf7fb19a3b8fc1447e74cc3e745b5bf.jpeg)
大家都知道,我们做单片机想提高,肯定往通信连接的方向走,往这个方向就难免碰到串口通信的问题,今天我们就从最简单的UART(通用异步收发器)来讲,毕竟通信方式太多。
![2e89fd6008c27e213bf3e740d3d6a0a2.png](https://i-blog.csdnimg.cn/blog_migrate/a1fa30a0ddf97d394f4783315104c19b.jpeg)
具体的通信什么的我就不讲了,单独讲。。。。
这里要明确一点,串口中断就是服务于串口的,别的地方用不着,而且以我的认知只有51保存了,而且发扬光大,别的都直接 上库 ,所以以下我用51单片机来讲。
开始:
单片机会通过一系列的操作将多位数据传出去或者传回来。
以上就是串口通信的核心,单片机在传出去或者回来的时候都会经过一个“容器”,这个“容器”专业名词是SBUF,记着 去和回来都是这个;
![8408594f1f97fa99e727dcec2ea5bb65.png](https://i-blog.csdnimg.cn/blog_migrate/be2154408b61aacc5d59764808f55796.jpeg)
那问题来了,都是一个我们如何去用它,这时候我们就可以用串口中断了;
比如你现在正在往外发送数据,经过SBUF停下来了,只有串口中断开了你才能出去,像一个保安,回来也是一样,必须经过在串口中断才行;
具体怎么配置我用51程序给大家看一下:
#include #define uchar unsigned char#definr uint unsigned int unsigned char flag,a,i;uchar code table[] = "I get";void init(){TMOD = 0x20;TH1 = 0xfd;TL1 = 0xfd;TR1 = 1;REN = 1;SM0 = 0;SM1 = 1;EA = 1;ES = 1;}void main(){init();while(1){if(flag == 1){ES = 0;for(i = 0;i < 6; i ++){SBUF = table[i];while(!TI);TI = 0;}SBUF = a;while(!TI);TI = 0;ES = 1;flag = 0;}}}void ser()interrupt 4{RI = 0;a = SBUF;flag= 1;}
之间一直不停的开启或者关闭串口中断,就是为了防止进去的出来的懵逼。