当前位置首页 > 高等教育 > 大学课件/教案
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

单片机AT89S52中断系统.ppt

文档格式:PPT| 32 页|大小 249.50KB|积分 15|2020-08-26 发布|文档ID:15627446
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 32
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 1,第7章 AT89S52中断系统,内容: 第一节 概念 第二节 中断源 第三节 中断控制 第四节 中断系统的C51编程方法 第五节 外部中断及应用实例,2,第一节 概念,中断的概念 CPU对外界异步事件的一种响应方法 在执行程序的过程中,由于某种外界的原因,必须打断当前的程序执行,而去执行相应的处理程序,待处理结束后,再回来继续执行被终止的程序这个过程叫中断 相当于有一个独立于CPU的事件管理机制,只在事件发生后并且满足CPU响应条件,才由CPU予以处理,从一个侧面看,相当于并行工作3,中断及其嵌套,4,中断技术的优点: 提高CPU的效率 提高实时数据的处理时效 故障处理 中断系统的功能: 中断优先权排队 实现中断嵌套 自动响应中断 实现中断返回,5,AT89S52的中断系统,8个中断源,6个中断矢量,具有二个中断优先级,可实现二级中断服务程序的嵌套每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向CPU请求中断 有关的特殊功能寄存器(SFR)有: 中断允许寄存器IE 中断优先级寄存器IP 中断源寄存器(TCON、SCON中的有关位) 注:均可位寻址6,第二节 AT89S52中断源,向CPU申请中断的请求源,AT89S52的8个中断源: 外部中断/INT0、/INT1; T0、T1计数中断; 串行口发送中断或接收中断; T2计数中断和捕获中断。

    外中断对应两个中断矢量; T0、T1中断对应两个中断矢量; 串行口对应一个中断矢量; T2对应个一个中断矢量1,2,3,4,5,6,7,第二节 AT89S52中断源,外部中断 /INT0、/INT1:在P3.2或P3.3引脚上产生负跳变或低电平时,置位中断请求标志位IE0或IE1, 外部中断请求标志和触发方式控制位存在于特殊功能寄存器TCON的低四位硬件自动复位IE0和IE1标志位 T0、T1计数溢出中断:内部定时器/计数器T0、T1的计数值溢出时,置位中断请求标志TF0、TF1,定时器中断请求标志和控制位存在于特殊功能寄存器TCON的高四位硬件自动复位TF0、TF1标志位 T2计数溢出中断:内部定时器/计数器T2的计数值溢出时,置位中断请求标志TF2必须用软件复位TF2标志位 T2捕获中断:当外部输入端口T2EX发生下降沿跳变时,只为EXF2,向CPU请求中断必须用软件复位EXF2标志位8,第二节 AT89S52中断源,串行口通信中断:串行接口完成一帧的发送或接收时,置位请求标志TI或RI, 两个标志逻辑或后做为内部的一个中断源RI和TI存在于特殊功能寄存器SCON的最低二位必须用软件复位TI、RI。

    9,(LSB),(MSB),中断请求位相关寄存器,1、TCON,定时器控制寄存器,地址88H,可按位寻址,注意请求位的清除问题: 避免对一次事件的多次重复响应,IE0 外部中断0 请求标志位, 当检测到P3.2 有从高到低的电平跳变时置1 TF0 定时器0 溢出(计数值由全1变全0)标志,响应中断后由处理器清零 IE1 外部中断1 请求标志位, 当检测到P3.3 有从高到低的电平跳变时置1 TF1 定时器1 溢出(计数值由全1变全0)标志,响应中断后由处理器清零 TR0 定时器0运行控制位,1:运行,0:停止 TR1 定时器1运行控制位,1:运行,0:停止 IT0 外部中断0触发方式控制位, 1: 跳变触发 0:低电平触发 IT1 外部中断1触发方式控制位, 1: 跳变触发 0:低电平触发,11,(LSB),(MSB),中断请求位相关寄存器,2、SCON,串口控制寄存器,地址98H,可按位寻址,TI: 完成一个串行帧的发送则 TI置1,需由软件清零 RI: 完成一个串行帧的接收则 RI置1,需由软件清零12,(LSB),(MSB),中断请求位相关寄存器,3、T2CON,定时器2控制寄存器,地址C8H,可按位寻址,TF2:定时器2溢出标志,响应中断后必须由软件清零。

    EXF2: 定时器2捕获中断标志,T2EX(P1.1)引脚产生下降沿,置位EXF2需由软件清零13,第三节 中断控制,中断允许控制 IE(A8H) 实现两级控制 注意:复位时,禁止所有中断 中断优先级控制 IP(B8H) 每一中断源可编程为高优先级或低优先级中断,以实现二级嵌套14,中断允许寄存器 IE (0A8H,可位寻址),EA:总允许位EA=0:禁止一切中断;EA=1:中断开放,各中断是否被允许有其对应的允许位确定 ES:串行口中断允许位ES=1:允许RI、TI引发中断; ES=0:禁止串口中断 ET2:定时器T2中断允许位1:允许,0:禁止 ET1、ET0:定时器T1、T0允许位1:允许,0: 禁止 EX1、EX0:外中断INT1、INT0允许位1:允许,0:禁止LSB),(MSB),15,中断优先级寄存器IP(0B8H,可位寻址),PS:串行口中断优先级设定位;1:高 0:低 PT2:定时器T2中断优先级设定位;1:高 0:低 PT1、PT0:定时器T1、T0中断优先级设定位; 1:高 0:低 PX1、PX0:外中断/INT1、0中断优先级设定位;1:高 0:低,(LSB),(MSB),PT2,16,一、主优先级规则,由于IP寄存器的设定,将8个中断源分为两个级别。

    中断的发生将遵循下面的2条基本原则: 1、低级中断在响应执行中,可以被高级中断所中断,反之则不能 2、一个中断(不论是什么优先级)一旦得到响应,与它同级的中断则不能再中断它 二、辅优先级规则 3、当CPU同时收到几个同一级别的中断要求时,CPU响应哪个中断源取决于硬件的查询顺序优先级规则,17,当2个以上中断先后发生时(不在同一个机器周期内),或者当2个以上不同优先级中断同时发生时,由IP寄存器决定哪个先被响应 当2个以上同优先级中断同时发生时(在同一个机器周期内发生),IP寄存器已经不能决定哪个先被响应,要由内部查询顺序决定哪个先被响应具体先后顺序如下: IE0 TF0 IE1 TF1 RI+TI TF2+EXF2,优先级规则,,高,低,18,中断的响应过程,中断系统每个机器周期都顺序检查每一个中断源,若查询到某个被允许的中断请求标志位为1, 如果不被下述条件所阻止,则将在下一个机器周期的转到响应的中断服务程序 阻止条件: 1)CPU正在处理相同或更高级的中断请求; 2)现在的机器周期不是执行指令的最后一个机器周期(MOV R1,20H); 3)正在执行的指令是RETI或对IE、IP的写操作指令。

    执行这些指令后,至少再执行一条指令后才会响应中断)19,CPU响应中断时完成工作,置位相应的优先级状态触发器(阻止同级和较低优先级的中断发生); 执行一条硬件子程序调用(内部),使控制转移到相应的中断入口地址; PC的内容进栈(断点地址) ; 被响应的中断服务程序的入口地址送PC20,注意,各个中断源的中断入口地址均已由系统规定,不能改动 中断源 入口地址 INT0 0003H T0 000BH INT1 0013H T1 001BH 串行口 0023H T2 002BH C51 用interrupt n 来确定入口地址即 入口地址=n*8+3,21,第四节 中断系统的C51编程方法,在主程序中对中断初始化 打开相应中断源的中断;(IE) 设定中断优先级;(IP) 若为外部中断,设定外部中断的触发方式; 启动产生中断的事件运行 (如定时器),以便可以发生中断 编写中断服务程序 正确使用 interrupt 关键字和中断号; 一般使用无入口参数无返回值的函数; 用全局变量在主程序和中断服务程序间交换信息22,8051的中断系统十分重要,C51使你能够用C来声明中断和编写中断服务程序,中断过程通过使用interrupt 关键字和中断号(0 到31)来实现,中断号告诉编译器中断程序的入口地址。

    对于8052,中断号对应着 IE 寄存器中的使能位,换句话说IE寄存器中的0位对应着外部中断0,相应的外部中断0的中断号是0下表反映了这种关系interrupt关键字和中断号,23,中断号 interrupt n,24,第五节 外部中断及应用实例,25,第五节 外部中断及应用实例,IE0、IE1:中断请求标志,有两种方法使其置位,即电平和边沿 IT0(IT1)=0:低电平触发,CPU响应中断后无法自动清除请求位IE0、IE1低电平要保持到CPU响应后,退出中断服务程序前要保证/INT0、/INT1已经变成高电平 IT0(IT1)=1:边沿触发,CPU响应中断后自动清除请求位IE0、IE1 高电平和低电平时间都必须大于1Tm,26,4个独立按键,用中断方式识别相当于外部中断的简单扩充),外部中断的应用: 例 1,27,#include //要用到sfr sbit xIR0=P14; sbit xIR1=P15; sbit xIR2=P16; sbit xIR3=P17; main() P1=0 xff;//P1输入 EA=1; EX1=1; IT1=1;//开INT1中断,边沿触发 for(;;) ;//无限循环作为main的结束 ,程序代码,void delay(void) int i, j ; for(i=0; i<10; i++)for(j=0; j<1000; j++); void key_press(void) interrupt 2 //INT1的中断服务程序 delay(); if((P1//返回 ,外部中断的应用: 例 2,8051单片机的P1口控制8个LED灯,要求8个灯循环移位点亮,当中断来时,灯全灭全亮交替变化6次(闪烁3次),然后继续循环移位点亮。

    30,#include //要用到sfr #include //_crol_() sbit INT0=P32; main() P1=0 xfe;//P1.0上的LED亮,其余灭 EA=1; EX0=1; IT0=0;//开INT0中断,电平触发 for(;;)//无限循环作为main的结束 int i, j; for (i=0; i<50; i++)for(j=0; j<1000; j++);//延时一会 _crol_(P1, 1);// P1左循环移1位 ,程序代码,void key_press(void) interrupt 0 //INT0的中断服务程序 int m, n, j ; for(m=0; m<10; m++)for(n=0; n<300; n++); if(INT0==1) return;//延时约10ms去抖动, for (m=0; m<3; m++) P1=0;//全亮 for( n=0; n<100; n++) for(j=0; j<500; j++); P1=0 xff;//全灭 for( n=0; n<100; n++) for(j=0; j<500; j++); P1=0 xfe;// 回初始状态 while(INT0==0); //等键释放,要不会重复进入中断(电平触发) ,32,作业,P159:1、3、8 、10 补充题: 1、 在例2中,要求8个LED中有一个闪烁,当中断到来时,闪烁位循环移位1次,试编程实现。

    点击阅读更多内容
    卖家[上传人]:wxq362
    资质:实名认证