本帖最后由 拿起书本 于 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 |