版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章C51中断编程一、中断1.概念:所谓中断,是指在计算机执行程序的过程中,当出现某种情况,如发生紧急事件或其他情况时,由服务对象向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行,而转去执行相应的处理程序,待处理程序执行完毕后,再返回来继续执行原来被中断的程序。2看电视中断处理中断请求实际生活中断返回电话铃响接听电话主程序计算机事件发生事件处理主程序看电视2.中断系统89C51中断系统共有5个中断请求源:(1)——外部中断请求0,中断请求信号由引脚输入,中断请求标志为IE0。(2)——外部中断请求1,中断请求信号由
引脚输入,中断请求标志为IE1。(3)定时器/计数器T0计数溢出发出的中断请求,中断请求标志为TF0。(4)定时器/计数器T1计数溢出发出的中断请求,中断请求标志为TF1。(5)串行口中断请求,中断请求标志为发送中断TI或接收中断RI。34中断系统结构示意图中断请求标志寄存器5个中断请求源的中断请求标志分别由定时器/计数器的控制寄存器TCON和串行口控制寄存器SCON的相应位锁存。5中断允许寄存器IEAT89C51的对各中断源的开放或屏蔽,是由中断允许寄存器IE控制的。6中断优先级寄存器IP中断请求源有两个中断优先级,可实现两级中断嵌套。两条基本规则:(1)低优先级可被高优先级中断,高优先级不能低优先级中断。(2)任何一种中断一旦得到响应,不会再被它的同级中断源所中断。7中断响应的过程:首先由硬件自动生成一条长调用指令“LCALLaddr16”。就是程序存储区中相应的中断入口地址。例如,对于外部中断1的响应,硬件自动生成的长调用指令为
LCALL0013H首先将程序计数器PC的内容压入堆栈以保护断点,再将中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。8各中断源服务程序的入口地址:两个中断入口间只相隔8字节,难以安放一个完整的中断服务程序。因此,通常在中断入口地址处放置一条无条件转移指令,使程序执行转向中断服务程序入口。910二、
C51中断服务函数的定义 由于标准C没有处理单片机中断的定义,为直接编写中断服务程序,C51编译器对函数的定义进行了扩展,增加了一个扩展关键字interrupt,使用该关键字可以将一个函数定义成中断服务函数。
由于C51编译器在编译时对声明为中断服务程序的函数自动添加了相应的现场保护、阻断其他中断、返回时恢复现场等处理的程序段,因而在编写中断服务函数时可不必考虑这些问题,减轻了用汇编语言编写中断服务程序的繁琐程度,而把精力放在如何处理引发中断请求的事件上。11 中断服务函数的一般形式为: 函数类型
函数名(形式参数表)[interruptn][usingn] 关键字interrupt后面的
n是中断号,对于89C51,取值为0~4,编译器从8×n+3处产生中断向量。89C51中断源对应的中断号和中断向量表:中断号n中断源中断向量(8×n+3)0外部中断00003H1定时器0000BH2外部中断10013H3定时器1001BH4串行口0023H其他值保留8×n+312
AT89C51在内部RAM中有4个工作寄存器区,每个寄存器区包含8个工作寄存器(R0-R7)。C51扩展了一个关键字using,专门用来选择AT89S51的4个不同的工作寄存器区。在定义一个函数时,using是一个选项,如果不选用该项,则由编译器选择一个寄存器区作为绝对寄存器区访问。 关键字using对函数目标代码的影响如下: 在中断函数的入口处将当前工作寄存器区内容保护到堆栈中,函数返回前将被保护的寄存器区的内容从堆栈中恢复。 使用关键字using在函数中确定一个工作寄存器区时必须小心,要保证工作寄存器区切换都只在指定的控制区域中发生,否则将产生不正确的函数结果。还要注意,带using属性的函数原则上不能返回bit类型的值,且关键字using和关键字interrupt都不允许用于外部函数,另外也都不允许有一个带运算符的表达式。1314 例如,外中断1(
)的中断服务函数书写如下:voidint1()interrupt2using0/*中断号n=2,选择0区工作寄存器区*/ 编写AT89S51中断程序时,应遵循以下规则:(1)中断函数没有返回值,如果定义了一个返回值,将会得到不正确的结果。因此建议在定义中断函数时,将其定义为void类型,以明确说明没有返回值。(2)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。15(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由指令RETI完成的。RETI指令会影响89C51中的硬件中断系统内的不可寻址的中断优先级寄存器的状态。如果在没有实际的中断请求的情况下,直接调用中断函数,也就不会执行RETI指令,其操作结果有可能产生一个致命的错误。(4)如果在中断函数中再调用其他函数,则被调用的函数所使用的寄存器区必须与中断函数使用的寄存器区不同。16三、C51中断程序的编写为响应中断请求而进行中断处理的程序称为中断程序。由中断初始化程序和中断服务程序两部分组成。中断初始化程序的位置位于主程序中,主要包括选择外部中断的触发方式、开中断、设置中断优先级等。例:控制8只LED交替闪烁的电路17 【例】在单片机系统的P1口上接有8只LED,LED的阳极接+5V,阴极接P1口的引脚。当P1口某一口线输出为0时,将LED点亮。在外部中断0输入脚P3.2(
)引脚接上拉电阻并接有一只按钮开关K1。用K1按钮来产生外部中断0的输入信号。接口电路如图所示。 要求将外部中断0设为负跳沿触发。在程序刚启动时,P1口上的8只LED亮。按一次按钮开关K1,使引脚P3.2接地,产生一个外中断0的中断请求,在中断服务程序中,让低4位LED和高4位LED交替闪烁。参考程序:18#include<reg51.h>voidDelay(unsignedinti) /*定义延时函数Delay(),i是形式参数,不能赋初值*/{ unsignedintj; for(;i>0;i--) for(j=0;j<333;j++) /*晶振为12MHz*/ {;} /*空函数*/}voidmain() /*主函数*/{ EA=1; /*总中断允许*/ EX0=1; /*外部中断0中断允许*/ IT0=1;/*选择外部中断0为跳沿触发方式,也可改为IT0=0电平触发方式*/ while(1)/*循环*/ {P1=0;}/*P1口的8只LED全亮*/}1920voidint0()interrupt0using0/*外中断0的中断服务函数*/{unsignedintk;
EX0=0; /*禁止外部中断0中断*/ for(k=0;k<10;k++) /*循环10次*/ { P1=0x0f; /*低
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度个人商铺租赁合同(含装修补偿条款)3篇
- 二零二五年度建筑塔吊租赁及劳务分包施工合同
- 2025民法典合同编修订版修订咨询合同3篇
- 2025年度个人担保业务合同模板2篇
- 二零二五年度文化旅游项目派遣员工劳动合同及文化交流协议4篇
- 养老院物业管理劳务合同范本(二零二五年度)3篇
- 2025年度美食城档口租赁合同参考范本3篇
- 2025年度个人独资企业股权转让合同范本与法律风险分析3篇
- 二零二五年度木工班组职业健康与安全协议合同3篇
- 2025年度农业设施搭棚种植技术服务合同3篇
- 肺炎临床路径
- 外科手术铺巾顺序
- 创新者的窘境读书课件
- 综合素质提升培训全面提升个人综合素质
- 如何克服高中生的社交恐惧症
- 聚焦任务的学习设计作业改革新视角
- 移动商务内容运营(吴洪贵)任务三 APP的品牌建立与价值提供
- 电子竞技范文10篇
- 食堂服务质量控制方案与保障措施
- VI设计辅助图形设计(2022版)
- 眼科学常考简答题
评论
0/150
提交评论