历史上的今天
今天是:2025年04月20日(星期日)
2021年04月20日 | 51单片机产生串口中断的方式
2021-04-20 来源:eefocus
首先,你要用软件允许中断,
即C语言中EA = 1; 允许总中断ES = 1;
//允许串口中断汇编中可用
SETB EA ;允许总中断
SETB ES ;允许串口中断
当单片机接收到一帧数据后,RI会置1,向CPU申请中断,若之前有中断允许,则产生了中断,进入中断服务程序。
当然,单片机发送完一帧数据,TI也会置1,同样会产生中断!
一般我们在发送数据时要关中断,因为一般你不用在发送时不用处理数据;接收数据时要开中断,以便你在中断服务程序中将接收到的数据进行存储并处理。
补充:其实,不管你有没有允许中断,上位机(此时即给单片机发送信息的机器)只要给单片机发送数据,单片机就会自动接收数据,并把它放在数据缓冲器SBUF中,如果你之前有允许串行口中断,RI就会置1,向单片机CPU申请中断,并进入中断服务程序,做完中断函数后就会自动返回断点。如果你没有允许中断,便不会产生串行中断。其实,别的中断都是某个I/O口电平变化产生。这只是外部中断产生条件,不过,你之前也需要用软件允许外部中断。
另外,常见的51系列单片机有5个中断源三种中断:
1、外部中断0和1;
2、定时器/计数器溢出中断0和1;
3、串行口中断。
另外,STC51系列还有定时器/计数器T2中断,A/D转换中断,PWM中断,串行中断等等。
中断服务程序中,那条 RI=0;是不可少的,这是用软件清零RI,准备再次接受一帧数据产生中断,如果你没有这条语句,就会进入死循环,出不来了。
void serial() interrupt 4
{ P1=SBUF;
RI=0;
}
上一篇:51单片机的一些开发实用技巧
下一篇:单片机的指令系统和寻址方式介绍
史海拾趣
|
分享几个大学期间的matlab实例分享,大家有兴趣学matlab的可以拿来参考,较多的用到GUI界面设计~~~ MATLAB界面制作总结1. 7以上版本的matlab,控件pushbutton背景颜色修改以后并没有什么明显效果,只是按钮的边缘显示为所设置的背景颜色。 ...… 查看全部问答> |
|
最近遇到一个问题,不知道如何读取系统所在nandflash的容量。目前我们系统ms不知道自己flash有多大,不停的copy文件进去就会把nk.bin所在的区域冲掉,然后系统就挂掉了。不知道有么有大哥遇到过?… 查看全部问答> |
|
我用的是f149的板子,在上面驱动1602,程序都对,就是使用usb仿真器时lcd不亮,用那种usb线直接供电的时候它倒是亮,不知道什么原因。求大侠指教啊… 查看全部问答> |




