呵呵,以下是它地汇编语言程序及讲解:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 文件名: Interrput.ASM
; 功能: 基本函数实现
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: OpenExternalInt0
; 功能说明: 开0号外部中断
; 入口参数: 优先级
; 触发模式
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PR_OpenExternalInt0INTERRPUT
_OpenExternalInt0:
MOV A,R7 ;设置的优先级
RRC A
MOV PX0,C
MOV A,R5 ;设置的触发模式
RRC A
MOV IT0,C
SETB EX0 ;开INT0中断
SETB EA ;开总中断
RET
● 关0号外部中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: CloseExternalInt0
; 功能说明: 关0号外部中断
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PRCloseExternalInt0INTERRPUT
CloseExternalInt0:
CLR EX0 ;关INT0中断
CLR EA ;关总中断
RET
● 开1号外部中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: OpenExternalInt1
; 功能说明: 开1号外部中断
; 入口参数: 优先级
; 触发模式
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PR_OpenExternalInt1INTERRPUT
_OpenExternalInt1:
MOV A,R7 ;设置的优先级
RRC A
MOV PX1,C
MOV A,R5 ;设置的触发模式
RRC A
MOV IT1,C
SETB EX1 ;开INT1中断
SETB EA ;开总中断
RET
● 关1号外部中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: CloseExternalInt1
; 功能说明: 关1号外部中断
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PRCloseExternalInt1INTERRPUT
CloseExternalInt1:
CLR EX1 ;关INT1中断
CLR EA ;关总中断
RET
● 开0号定时中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: OpenTimerInt0
; 功能说明: 开0号定时中断
; 入口参数: 优先级
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PR_OpenTimerInt0INTERRPUT
_OpenTimerInt0:
MOV A,R7 ;设置的优先级
RRC A
MOV PT0,C
SETB ET0 ;开0号定时中断
SETB EA ;开总中断
RET
● 关0号定时中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: CloseTimerInt0
; 功能说明: 关0号定时中断
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PRCloseTimerInt0INTERRPUT
CloseTimerInt0:
CLR ET0 ;关0号定时中断
CLR EA ;关总中断
RET
● 开1号定时中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: OpenTimerInt1
; 功能说明: 开1号定时中断
; 入口参数: 优先级
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PR_OpenTimerInt1INTERRPUT
_OpenTimerInt1:
MOV A,R7 ;设置的优先级
RRC A
MOV PT1,C
SETB ET1 ;开1号定时中断
SETB EA ;开总中断
RET
● 关1号定时中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: CloseTimerInt1
; 功能说明: 关1号定时中断
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PRCloseTimerInt1INTERRPUT
CloseTimerInt1:
CLR ET1 ;关1号定时中断
CLR EA ;关总中断
RET
● 开串口中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: OpenSerialInt
; 功能说明: 开串口中断子
; 入口参数: 优先级
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PR_OpenSerialIntINTERRPUT
_OpenSerialInt:
MOV A,R7 ;设置的优先级
RRC A
MOV PS,C
SETB ES ;开串口中断
SETB EA ;开总中断
RET
● 关串口中断子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: CloseSerialInt
; 功能说明: 关串口中断子
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG PRCloseSerialIntINTERRPUT
CloseSerialInt:
CLR ES ;关串口中断
CLR EA ;关总中断
RET
CSEG AT 00003H
LJMP ExternalInt0_ISR
● 0号外部中断服务程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: ExternalInt0_ISR
; 功能说明: 0号外部中断服务程序
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG DTExternalInt0_ISRINTERRPUT
ExternalInt0_ISRBYTE:
i1047: DS 1
RSEG PRExternalInt0_ISRINTERRPUT
USING 1
ExternalInt0_ISR:
PUSH ACC
PUSH PSW
USING 1
MOV PSW,#08H
LCALL CloseExternalInt0 ;关0号外部中断
MOV i1047,#00H ;进行中断服务操作
MOV R5,#01H ;开0号外部中断,高优先级,边缘触发
MOV R7,#01H
LCALL _OpenExternalInt0
POP PSW
POP ACC
RETI
CSEG AT 00013H
LJMP ExternalInt1_ISR
● 1号外部中断服务程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: ExternalInt1_ISR
; 功能说明: 1号外部中断服务程序
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG DTExternalInt1_ISRINTERRPUT
ExternalInt1_ISRBYTE:
i1148: DS 1
RSEG PRExternalInt1_ISRINTERRPUT
USING 1
ExternalInt1_ISR:
PUSH ACC
PUSH PSW
USING 1
MOV PSW,#08H
LCALL CloseExternalInt1 ;关1号外部中断
MOV i1148,#00H ;进行中断服务操作
MOV R5,#01H ;开1号外部中断,高优先级,边缘触发
MOV R7,#01H
LCALL _OpenExternalInt1
POP PSW
POP ACC
RETI
CSEG AT 0000BH
LJMP TimerInt0_ISR
● 0号定时中断服务程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: TimerInt0_ISR
; 功能说明: 0号定时中断服务程序
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG DTTimerInt0_ISRINTERRPUT
TimerInt0_ISRBYTE:
i1249: DS 1
RSEG PRTimerInt0_ISRINTERRPUT
USING 1
TimerInt0_ISR:
PUSH ACC
PUSH PSW
USING 1
MOV PSW,#08H
LCALL CloseTimerInt0 ;关0号定时中断
MOV i1249,#00H ;进行中断服务操作
MOV R7,#01H ;开0号定时中断,高优先级
LCALL _OpenTimerInt0
POP PSW
POP ACC
RETI
CSEG AT 0001BH
LJMP TimerInt1_ISR
● 1号定时中断服务程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: TimerInt1_ISR
; 功能说明: 0号定时中断服务程序
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG DTTimerInt1_ISRINTERRPUT
TimerInt1_ISRBYTE:
i1350: DS 1
RSEG PRTimerInt1_ISRINTERRPUT
USING 1
TimerInt1_ISR:
PUSH ACC
PUSH PSW
USING 1
MOV PSW,#08H
LCALL CloseTimerInt1 ;关1号定时中断
MOV i1350,#00H ;进行中断服务操作
MOV R7,#01H ;开1号定时中断,高优先级
LCALL _OpenTimerInt1
POP PSW
POP ACC
RETI
CSEG AT 00023H
LJMP SerialInt_ISR
● 串口中断服务程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 函数名: SerialInt_ISR
; 功能说明: 串口中断服务程序
; 入口参数: 无
; 返回参数: 无
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RSEG DTSerialInt_ISRINTERRPUT
SerialInt_ISRBYTE:
i1451: DS 1
RSEG PRSerialInt_ISRINTERRPUT
USING 1
SerialInt_ISR:
PUSH ACC
PUSH PSW
USING 1
MOV PSW,#08H
LCALL CloseSerialInt ;关串口中断
MOV i1451,#00H ;进行中断服务操作
MOV R7,#01H ;开串口中断,高优先级
LCALL _OpenSerialInt
POP PSW
POP ACC
RETI |