- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * 5.5 中断程序举例 5.5 中断程序举例 5.5.1 主程序 1.主程序的起始地址 89C51/S51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为各中断源的入口地址。编程时应在0000H处写一条跳转指令(一般为长跳转指令),主程序是以跳转的目标地址作为起始地址开始编写,一般从0030H开始。 2.主程序的初始化内容 初始化:将用到的内部部件或扩展芯片进行初始工作状态设定。单片机复位后,特殊功能寄存器IE、IP内容均为00H,所以应对IE、IP进行初始化编程,以开放中断,允许某些中断源中断和设置中断优先级等。 0000H LJMP 00 30 0030H 主程序 图5-12 主程序地址安排 5.5 中断程序举例 5.5.2 中断服务程序 1.中断服务程序的起始地址 当CPU接收到中断请求信号并予以响应后,CPU把当前的PC内容压入堆栈进行保护,然后转入响应的中断服务程序入口处执行。 中断系统对五个中断源分别规定了各自的入口地址,但这些入口地址相距很近(8个字节)。如中断服务程序的指令代码少于8个字节,则可从规定的中断服务程序入口地址开始,直接编写中断服务程序;如中断服务程序的指令代码大于8个字节,则应采用与主程序相同的方法,在相应的入口处写一条跳转指令,并以跳转指令的目标地址作为中断服务程序的起始地址进行编程。以INT0为例,中断矢量地址为0003H,中断服务程序从0200H开始。 0003H LJMP 02 00 0200H 中断服 务程序 图5-13 中断服务程序地址安排 5.5 中断程序举例 5.5.2 中断服务程序 2.中断服务程序编写中的注意事项 ① 视需要确定是否保护现场。 ② 及时清除那些不能被硬件自动清除的中断请求标志,以免产生错误的中断。 ③ 中断服务程序中的压栈与弹栈指令必须成对使用,以确保中断服务程序的正确返回。 ④ 主程序和中断服务程序之间的参数传递,与主程序和子程序的参数传递方式相同。 注:与5.4节内容重复,加深印象。 5.5 中断程序举例 5.5.3 程序举例 例5-3:如图5-14所示,将P1口的P1.4~P1.7作为输入位,P1.0~P1.3作为输出位。要求利用89C51/S51将开关所设的数据读入单片机内,并依次通过P1.0~P1.3输出,驱动发光二极管,以检查P1.4~P1.7输入的电平情况(若输入为高电平则相应的LED亮)。现要求采用中断边沿触发方式,每中断一次,完成一次读/写操作。 图5-14 外部中断 电路 5.5 中断程序举例 5.5.3 程序举例 解:如图所示,采用外部中断0,中断申请从INT0输入,并采用了去抖动电路。 当P1.0~P1.3的任何一位输出0时,相应的发光二极管就会发光。当开关K来回拔动一次时,将产生一个下降沿信号,通过INT0发出中断请求。中断服务程序的矢量地址为0003H。 主程序如下: ORG 0000H LJMP MAIN;上电,转向主程序 ORG 0003H;外部中断0入口地址 LJMP INSER;转向中断服务程序 ORG 0030H ;主程序 MAIN: SETB EX0 ;允许外部中断0中断 SETB IT0 ;选择边沿触发方式 SETB EA ;CPU开中断 HERE: SJMP HERE ;等待中断 中断服务程序: ORG 0200H ; INSER: MOV A,#0F0H MOV P1,A ;设P1.4~P1.7为输入 MOV A,P1 ;取开关数 SWAP A ;A的高、低四位互换 MOV P1,A ;输出驱动LED发光 RETI ;中断返回 END 5.5 中断程序举例 5.5.3 程序举例 中断与查询结合扩展中断源:当外部中断源多于2个时,可采用硬件请求和软件查询相结合的办法,把多个中断源通过硬件经“或非”门引入到外部中断输入端INTx,同时又连到某个I/O口。这样,每个中断源都可能引起中断。在中断服务程序中,读入I/O口的状态,通过查询就能区分是哪个中断源引起的中断。若有多个中断源同时发出中断请求,则查询的次序就决定了同一优先级中断中的优先次序。 图5-15 利用中断显示系统故障 例5-4: 如图5-15所示,此中断电路可实现系统的故障显示。当系统的各部分正常工作时,四个故障源的输入均为低电平,显示灯全不亮。当有某个部分出现故障时,则相应的输入线由低电平变为高电平,相应的发光二极管亮。 四个故障源 5.5 中断
文档评论(0)