《MCS-51单片机中断系统及应用(基于Proteus仿真).docx》由会员分享,可在线阅读,更多相关《MCS-51单片机中断系统及应用(基于Proteus仿真).docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MCS-51单片机中断系统及应用基于Proteus仿真前言:本文对MCS-51单片机的中断系统进行了简明扼要的总结和归纳,并在后面举了三个简单的例子,这样有助于更好地理解与掌握。1、 MCS-51单片机有5个中断源,2个中断优先级。相同优先级条件下,CPU响应中断的顺序是处部中断0,定时/计数器0,外部中断1,定时/计数器1,串行口中断。当某一优先级的中断处理程序正在执行时,可以被更高优先级的中断请求中断,但不会被同级或低级的中断源所中断。2、 中断允许寄存器IE(interrupt enable):可位寻址,相应位置1,表示开相应中断,置0表示关相应中断。(EX英文全称为external 外
2、部,所以EX0表示外部中断0)总中断:EA外部中断0: EX0中断编号为0,在函数后加上interrupt 0来说明是外部中断0外部中断1: EX1中断编号为2,在函数后加上interrupt 2来说明是外部中断1定时/计数器0:ET0中断编号为1,在函数后加上interrupt 1来说明是T0中断定时/计数器1:ET1中断编号为3,在函数后加上interrupt 3来说明是T1中断串行口中断:ES中断编号为4,在函数后加上interrupt 4来说明是串行口中断只有使用interrupt 关键字定义的函数才能被当作中断服务函数使用3、 中断优先级寄存器IP(interrupt priorit
3、y中断优先级): 可位寻址,相应位置1,表示高优先级,置0表示低优先级。外部中断0: PX0外部中断1:PX1定时/计数器0: PT0定时/计数器1: PT1串行口中断: PS4、 定时/计数器T0,T1控制寄存器TCON:中断请求标志都是当CPU检测到有相应中断发生后,由硬件将相应的标志置1,当CPU响应该中断转向相应的中断处理程序时,由硬件自动将相应的标志位清0.系统复位时,TCON每一位都清零。在查询方式时,TF0,TF1可以由程序查询和清“0”。外部中断0触发方式控制位:IT0=1为下降沿触发,IT0=0为低电平触发外部中断1触发方式控制位:IT1=1为下降沿触发,IT1=0为低电平触
4、发外部中断0中断标志位IE0:为1表示有中断请求,为0 表示无中断请求外部中断1中断标志位IE1:为1表示有中断请求,为0 表示无中断请求定时/计数器0中断标志位TF0:为1表示有中断请求,为0表示无中断请求定时/计数器1中断标志位TF1:为1表示有中断请求,为0表示无中断请求定时/计数器0运行控制位TR0:为1表示启动,为0表示停止定时/计数器1运行控制位TR1:为1表示启动,为0表示停止5、 串行口控制寄存器SCON:TI(Transmit Interrupt 发送中断)是串行口发送中断标志位,CPU将一个数据写入发送缓冲器SBUF时,就启动发送。每发送完一帧串行数据后,由中断系统的硬件自
5、动将TI置1.但CPU响应中断时,并不清除TI,必须在中断处理程序中用指令将TI清0RI(Receive Interrupt接收中断)是串行口接收中断标志位,在允许串行口接收时,每接收完一帧数据后,中断系统的硬件自动将RI置1.同样,CPU响应中断处理程序时,并不自动将RI复位,必须在中断处理程序中用指令将其清06、 总结编写中断函数时,要记得在函数后面加上interrupt+中断编号,以说明是什么中断函数。在主函数中要记得开总中断,开相应中断,设置优先级,对外部中断要设置触发方式,对定时/计数器中断要用TR0/TR1=1启动计数器7、 外部中断的简单应用实例(一)如下图所示,正常情况下,数码
6、管以一定时间间隔循环轮流显示09,每按一次按钮开关,触发一次外部中断0,使数码管闪烁10次,闪烁完毕后继续正常的数字轮流显示。C程序如下:#include#define uchar unsigned char#define uint unsigned intvoid delay(uint x)uchar i;while(x-)for(i=0;i120;i+);uchar code dis=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar i;void main()EA=1; /开总中断EX0=1;/开外部中断0IT0=1;/外部中断
7、0设置为下降沿触发while(1)for(i=0;i10;i+)P0=disi;delay(200);void int0()interrupt 0 /外部中断0函数定义P0=0xff;delay(200);for(i=0;i10;i+) /闪烁十次P0=P0;delay(200);Proteus仿真运行结果如下:8、 外部中断的简单应用实例(二)如下图所示,正常情况下,数码管以一定时间间隔循环轮流显示09,按下K1键后,触发低优先级外部中断0,依次点亮8只黄色发光二极管,最后熄灭。按下K2键后,触发高优先级外部中断1 ,逐个点亮8只条形LED。(注意要加上限流电阻,否则仿真失败)C程序如下:(
8、虽然主函数和两个中断函数都用到变量i,但还是不要把i设置为全局变量,否则运行结果不正确)#include#define uchar unsigned char#define uint unsigned intvoid delay(uint x)uchar i;while(x-)for(i=0;i120;i+);uchar code dis=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void main()uchar i;EA=1;EX0=1;EX1=1;IT0=1;IT1=1;PX0=0; /外部中断0设置为低优先级PX1=1; /外部中
9、断1设置为高优先级while(1)for(i=0;i10;i+)P0=disi;delay(200);void int0()interrupt 0/外部中断0函数定义uchar i;P2=0XFF;for(i=0;i1;/右移用0填补delay(200);P2=0XFF;void int1()interrupt 2/外部中断1函数定义uchar i;P1=0XFF;for(i=0;i1;delay(200);P1=0XFF;Proteus仿真运行结果如下:9、 外部中断的简单应用实例(三)本例实现外部中断源的扩展设计。如下图所示,系统正常工作情况下,数码管以一定时间间隔循环轮流显示09,四只绿
10、色LED点亮,四只红色LED熄灭。按下K1K4任意一个按键时,触发外部中断0,对应的一只绿色LED熄灭,一只红色LED点亮,并持续发出报警声音,表示系统出现故障。直到按下复位按钮,系统恢复正常工作,报警声音停止。(注意P0口要接上拉电阻,否则仿真失败)C程序如下:#include#define uchar unsigned char#define uint unsigned intvoid delay(uint x)uchar i;while(x-)for(i=0;i120;i+);uchar code dis=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0
11、x80,0x90;sbit agreen=P10;sbit ared=P11;sbit bgreen=P12;sbit bred=P13;sbit cgreen=P14;sbit cred=P15;sbit dgreen=P16;sbit dred=P17;sbit buzzer=P30; /蜂鸣器sbit k1=P34;sbit k2=P35;sbit k3=P36;sbit k4=P37;void main()uchar i;EA=1;EX0=1;EX1=1;IT0=1;IT1=1;P1=0Xaa; /正常时点亮四只绿色LED灯buzzer=0; /正常时关闭蜂鸣器while(1)for(
12、i=0;i10;i+)P0=disi;delay(200);void int0()interrupt 0/外部中断0函数定义if(k1=0)agreen=1; ared=0; buzzer=1;else if(k2=0)bgreen=1; bred=0; buzzer=1;else if(k3=0) cgreen=1; cred=0; buzzer=1;else if(k4=0)dgreen=1; dred=0; buzzer=1;void int1()interrupt 2 /外部中断1函数定义P1=0Xaa;buzzer=0;Proteus仿真运行结果如下:10、上述Proteus仿真文件下载地址:11、参考文献1彭伟.单片机C语言程序设计实训100例.北京:电子工业出版社.20092贾振国,许琳.智能化仪器仪表原理及应用.北京:中国水利水电出版社.2011