《单片机_at89s52中断系统》由会员分享,可在线阅读,更多相关《单片机_at89s52中断系统(32页珍藏版)》请在金锄头文库上搜索。
1、第7章 AT89S52中断系统内容: 第一节 概念 第二节 中断源 第三节 中断控制 第四节 中断系统的C51编程方法 第五节 外部中断及应用实例1第一节 概念n中断的概念CPU对外界异步事件的一种响应方法。在执行程序的过程中,由于某种外界的原因,必须打 断当前的程序执行,而去执行相应的处理程序,待处理结 束后,再回来继续执行被终止的程序。这个过程叫中断。相当于有一个独立于CPU的事件管理机制,只在事件 发生后并且满足CPU响应条件,才由CPU予以处理,从一 个侧面看,相当于并行工作。 2中断及其嵌套3n中断技术的优点:n 提高CPU的效率n 提高实时数据的处理时效n 故障处理n中断系统的功能
2、:n 中断优先权排队n 实现中断嵌套 n 自动响应中断n 实现中断返回4AT89S52的中断系统n8个中断源,6个中断矢量,具有二个中断优先级,可 实现二级中断服务程序的嵌套。每个中断源均可软件 编程为高优先级或低优先级中断,允许或禁止向CPU 请求中断。n有关的特殊功能寄存器(SFR)有:n中断允许寄存器IEn中断优先级寄存器IPn中断源寄存器(TCON、SCON中的有关位) 注:均可位寻址。5第二节 AT89S52中断源向CPU申请中断的请求源, AT89S52的8个中断源:n 外部中断/INT0、/INT1;nT0、T1计数中断;n串行口发送中断或接收中断 ;nT2计数中断和捕获中断。n
3、 外中断对应两个中断矢量;nT0、T1中断对应两个中断矢 量;n串行口对应一个中断矢量;nT2对应个一个中断矢量。 6第二节 AT89S52中断源n 外部中断 /INT0、/INT1:在P3.2或P3.3引脚上产生 负跳变或低电平时,置位中断请求标志位IE0或IE1, 外部中 断请求标志和触发方式控制位存在于特殊功能寄存器 TCON的低四位。硬件自动复位IE0和IE1标志位。nT0、T1计数溢出中断:内部定时器/计数器T0、T1的计 数值溢出时,置位中断请求标志TF0、TF1,定时器中断 请求标志和控制位存在于特殊功能寄存器TCON的高四位 。硬件自动复位TF0、TF1标志位。nT2计数溢出中
4、断:内部定时器/计数器T2的计数值溢出 时,置位中断请求标志TF2。必须用软件复位TF2标志位 。nT2捕获中断:当外部输入端口T2EX发生下降沿跳变时 ,只为EXF2,向CPU请求中断。必须用软件复位EXF2标 志位。7第二节 AT89S52中断源n串行口通信中断:串行接口完成一帧的发送或接收时,置 位请求标志TI或RI, 两个标志逻辑或后做为内部的一个中 断源。RI和TI存在于特殊功能寄存器SCON的最低二位。 必须用软件复位TI、RI。8(LSB )(MSB)中断请求位相关寄存器1、TCON,定时器控制寄存器,地址88H,可按 位寻址注意请求位的清除问题:避免对一次事件的多次重复响应9I
5、E0 外部中断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:低电平触发10(LSB )(MSB)中断请求位相关寄存器2、
6、SCON,串口控制寄存器,地址98H,可按位 寻址TI: 完成一个串行帧的发送则 TI置1,需由软件清零 。RI: 完成一个串行帧的接收则 RI置1,需由软件清零 。11(LSB )(MSB)中断请求位相关寄存器3、T2CON,定时器2控制寄存器,地址C8H, 可按位寻址TF2:定时器2溢出标志,响应中断后必须由软件清零 。EXF2: 定时器2捕获中断标志,T2EX(P1.1)引脚 产生下降沿,置位EXF2。需由软件清零。12第三节 中断控制n中断允许控制 IE(A8H)n实现两级控制n注意:复位时,禁止所有中断n 中断优先级控制 IP(B8H)n每一中断源可编程为高优先级或低优先级中断,以实
7、 现二级嵌套。13中断允许寄存器 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)14中断优先级寄存器IP(0B8H,可位寻址) PS:串行口中断优先级设定位;1:高 0:低 PT2:定时器T2中断优先级设定位;1:高 0
8、:低 PT1、PT0:定时器T1、T0中断优先级设定位; 1:高 0:低 PX1、PX0:外中断/INT1、0中断优先级设定位;1:高 0:低(LSB )(MSB)PT215一、主优先级规则,由于IP寄存器的设定,将8个中断源分 为两个级别。中断的发生将遵循下面的2条基本原则: 1、低级中断在响应执行中,可以被高级中断所中断,反 之则不能。 2、一个中断(不论是什么优先级)一旦得到响应,与它 同级的中断则不能再中断它。 二、辅优先级规则 3、当CPU同时收到几个同一级别的中断要求时,CPU响应 哪个中断源取决于硬件的查询顺序。 优先级规则16 当2个以上中断先后发生时(不在同一个机器周期内),
9、 或者当2个以上不同优先级中断同时发生时,由IP寄存器 决定哪个先被响应。 当2个以上同优先级中断同时发生时(在同一个机器周期 内发生),IP寄存器已经不能决定哪个先被响应,要由内 部查询顺序决定哪个先被响应。具体先后顺序如下: IE0 TF0 IE1 TF1 RI+TI TF2+EXF2 优先级规则高低17中断的响应过程n 中断系统每个机器周期都顺序检查每一个中断源,若 查询到某个被允许的中断请求标志位为1, 如果不被下述 条件所阻止,则将在下一个机器周期的转到响应的中断 服务程序。n 阻止条件:n1)CPU正在处理相同或更高级的中断请求;n2)现在的机器周期不是执行指令的最后一个机器周 期
10、(MOV R1,20H);n3)正在执行的指令是RETI或对IE、IP的写操作指 令。(执行这些指令后,至少再执行一条指令后才会 响应中断)。18CPU响应中断时完成工作n置位相应的优先级状态触发器(阻止同级和较低优先级 的中断发生);n执行一条硬件子程序调用(内部),使控制转移到相 应的中断入口地址;nPC的内容进栈(断点地址) ;n被响应的中断服务程序的入口地址送PC。19注意n各个中断源的中断入口地址均已由系统规定,不能改动。中断源 入口地址INT0 0003HT0 000BHINT1 0013HT1 001BH串行口 0023H T2 002BHnC51 用interrupt n 来确
11、定入口地址。即 入口地址=n*8+320第四节 中断系统的C51编程方法n在主程序中对中断初始化n打开相应中断源的中断;(IE)n设定中断优先级;(IP)n若为外部中断,设定外部中断的触发方式; n启动产生中断的事件运行 (如定时器),以便可以发 生中断。n编写中断服务程序n正确使用 interrupt 关键字和中断号;n一般使用无入口参数无返回值的函数;n用全局变量在主程序和中断服务程序间交换信息。218051的中断系统十分重要,C51使你能够用C来声明中 断和编写中断服务程序,中断过程通过使用interrupt 关 键字和中断号(0 到31)来实现,中断号告诉编译器中断程 序的入口地址。对
12、于8052,中断号对应着 IE 寄存器中的 使能位,换句话说IE寄存器中的0位对应着外部中断0,相 应的外部中断0的中断号是0。下表反映了这种关系。interrupt关键字和中断号22中断号 interrupt n23第五节 外部中断及应用实例24第五节 外部中断及应用实例n IE0、IE1:中断请求标志,有两种方法使其置位, 即电平和边沿。n IT0(IT1)=0:低电平触发,CPU响应中断后无 法自动清除请求位IE0、IE1。低电平要保持到CPU响 应后,退出中断服务程序前要保证/INT0、/INT1已 经变成高电平。n IT0(IT1)=1:边沿触发,CPU响应中断后自动 清除请求位IE
13、0、IE1。n高电平和低电平时间都必须大于1Tm254个独立按键,用中断方式识别。(相当于外部中断的简单扩充 )P1.4 P1.5 P1.6 P1.7VCC10kx4/INT1外部中断的应用: 例 126#include /要用到sfr sbit xIR0=P14; sbit xIR1=P15; sbit xIR2=P16; sbit xIR3=P17; main() P1=0xff;/P1输入EA=1; EX1=1; IT1=1;/开INT1中断,边沿触发 for(;) ;/无限循环作为main的结束 程序代码27void delay(void) int i, j ;for(i=0; i/要
14、用到sfr #include /_crol_() sbit INT0=P32; main() P1=0xfe;/P1.0上的LED亮,其余灭EA=1; EX0=1; IT0=0;/开INT0中断,电平触发 for(;)/无限循环作为main的结束 int i, j;for (i=0; i50; i+)for(j=0; j1000; j+);/延时一会_crol_(P1, 1);/ P1左循环移1位 程序代码30void key_press(void) interrupt 0 /INT0的中断服务程序 int m, n, j ;for(m=0; m10; m+)for(n=0; n300; n+);if(INT0=1) return; /延时约10ms去抖动, for (m=0; m3; m+) P1=0;/全亮for( n=0; n100; n+) for(j=0; j500; j+); P1=0xff;/全灭for( n=0; n100; n+) for(j=0; j500; j+); P1=0xfe;/ 回初始状态while(INT0=0); /等键释放,要不会重复进入中断(电平触发) 31作业P159:1、3、8 、10补充题:1、 在例2中,要求8个LED中有一个闪烁,当中断 到来时,闪烁位循环移位1次,试编程实现。32