打印

可编程中断控制器8259A扩展中断

[复制链接]
1997|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 拿起书本 于 2012-4-3 18:26 编辑

8259A是可编程中断控制器,可以配合51单片机来扩展外部中断源个数, 一片8259A有8级优先级控制能力,9片8259A级可以组成64级中断优先级管理系统,使51单片机外部中断源可以扩展到64个。
51单片机基于8259A扩展外部中断源的电路设计图如下,扩展出的8个外部中断共用51外部中断INT0中断服务程序入口地址0003H。

下图为程序流程图

C语言
*******************************************************************************
程序功能为51单片机通过外部扩展8259A可编程中断控制器将外部中断0端口扩展8个外部中断源,通过8259实现对8个外部中断源的管理。
*******************************************************************************
//程序结构
ORG 0000H
LJMP  MAIN
ORG  0003H
LJMP  INT0
//主程序开始
ORG  0030H
MAIN:  MOV SP,#70H
         MOV DPTR,#7FFEH      ;向8259A写ICW1
         MOV  A,#16H
         MOVX  @DPTR,A
         INC   DPTR
         MOV  A,#07H           ; 向8259A写ICW2
         MOVX   @DPTR,A
         SETB  EA               ;开中断总开关
         SETB  EX0              ;开外部中断0
         SETB  IT0
         SJMP   $
//中断服务程序:
INT0: PUSH  PSW               ;压栈
        PUSH  ACC
        MOV  DPTR,#7FFEH
        MOVX  A,@DPTR       ;读扩展中断向量
        MOVX  A,@DPTR       ;读中断地址
        MOV   DPL,A           ;DPTR指向子中断程序地址
        MOVX  A,@DPTR
        MOV   DPH,A
        CLR    A
        JMP   @A+DPTR         ;程序转移到相应子中断程序
ORG  0700H                ; 扩展中断0服务程序入口地址
LJMP  IR0
ORG  0704H                ; 扩展中断1服务程序入口地址
LJMP  IR1


ORG  071CH                ; 扩展中断7服务程序入口地址
LJMP  IR8
IR0 : …                     ;扩展中断0服务程序

LJMP CONT                  ;中断服务功能完毕,准备推出中断


IR7 : …                     ;扩展中断7服务程序

LJMP CONT                   ;中断服务功能完毕,准备推出中断
;各中断执行完毕后出口,返回主程序
CONT:MOV   DPTR,#7FFEH
        MOV   A,#20H          ;非指定EOI命令送8259
        MOVX  @DPTR,A
        POP    ACC             ; 恢复现场
        POP    PSW
        RETI
END

相关帖子

沙发
tianli1980| | 2012-4-3 22:34 | 只看该作者
了解一下讲得很详细,不错。最后看到8259可以通过1片+8片级联扩展出64个外部中断,如何才能实现呢?

使用特权

评论回复
板凳
拿起书本|  楼主 | 2012-4-3 22:39 | 只看该作者
2# tianli1980
这个具体实现比较复杂,可以参考8259在8086微机系统扩展的相关资料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝