打印

单片机中断流程

[复制链接]
4249|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
单片机中断程序流程图如下所示:要使CPU能够正常响应中断请请求,首先应对中断系统进行初始化,这包括优先级设置,总中断使能开关,各中断使能开关,各中断源工作模式的设置,在有些单片机中,还要求对外部中断的管脚进行方向设置等。
图中,需要注意的是对于有些中断源,进入中断服务程序之后,需要关闭中断允许控制位,以防止干扰造成循环中断的发生,中断服务完成之后再打开中断允许控制位,以便允许单片机能够响应下次中断。
C语言程序如下:
● 开0号外部中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 文件名: Interrput.c
// 功能: 基本函数实现
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  OpenExternalInt0
// 功能说明: 开0号外部中断
// 入口参数: 优先级
//     触发模式
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OpenExternalInt0(char level, char edge)
{
PX0 = level &0x01 ;  //设置的优先级
IT0 = edge &0x01 ; ; //设置的触发模式
EX0 = 1 ;    //开INT0中断
EA = 1 ;    //开总中断
}
● 关0号外部中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  CloseExternalInt0
// 功能说明: 关0号外部中断
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void CloseExternalInt0(void)
{
EX0 = 0 ;    //关INT0中断
EA = 0 ;    //关总中断
}
● 开1号外部中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  OpenExternalInt1
// 功能说明: 开1号外部中断
// 入口参数: 优先级
//     触发模式
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OpenExternalInt1(char level, char edge)
{
PX1 = level &0x01 ;  //设置的优先级
IT1 = edge &0x01 ; ; //设置的触发模式
EX1 = 1 ;    //开INT1中断
EA = 1 ;    //开总中断
}
● 关1号外部中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  CloseExternalInt1
// 功能说明: 关1号外部中断
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void CloseExternalInt1(void)
{
EX1 = 0 ;    //关INT1中断
EA = 0 ;    //关总中断
}
● 开0号定时中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  OpenTimerInt0
// 功能说明: 开0号定时中断
// 入口参数: 优先级
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OpenTimerInt0(char level)
{
PT0 = level &0x01 ;  //设置的优先级
ET0 = 1 ;    //开0号定时中断
EA = 1 ;    //开总中断
}
● 关0号定时中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  CloseTimerInt0
// 功能说明: 关0号定时中断
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void CloseTimerInt0(void)
{
ET0 = 0 ;    //关0号定时中断
EA = 0 ;    //关总中断
}
● 开1号定时中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  OpenTimerInt1
// 功能说明: 开1号定时中断
// 入口参数: 优先级
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OpenTimerInt1(char level)
{
PT1 = level &0x01 ;  //设置的优先级
ET1 = 1 ;    //开1号定时中断
EA = 1 ;    //开总中断
}
● 关1号定时中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  CloseTimerInt1
// 功能说明: 关1号定时中断
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void CloseTimerInt1(void)
{
ET1 = 0 ;    //关1号定时中断
EA = 0 ;    //关总中断
}
● 开串口中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  OpenSerialInt
// 功能说明: 开串口中断子
// 入口参数: 优先级
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OpenSerialInt(char level)
{
PS = level &0x01 ;  //设置的优先级
ES = 1 ;    //开串口中断
EA = 1 ;    //开总中断
}
● 关串口中断子程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  CloseSerialInt
// 功能说明: 关串口中断子
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void CloseSerialInt(void)
{
ES = 0 ;    //关串口中断
EA = 0 ;    //关总中断
}
● 0号外部中断服务程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  ExternalInt0_ISR
// 功能说明: 0号外部中断服务程序
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void ExternalInt0_ISR( void ) interrupt 0 using 1
{
char i;
CloseExternalInt0(); //关0号外部中断

i = 0;     //进行中断服务操作
OpenExternalInt0(1,1); //开0号外部中断,高优先级,边缘触发
}
● 1号外部中断服务程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  ExternalInt1_ISR
// 功能说明: 1号外部中断服务程序
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void ExternalInt1_ISR( void ) interrupt 2 using 1
{
char i;
CloseExternalInt1(); //关1号外部中断

i = 0;     //进行中断服务操作
OpenExternalInt1(1,1); //开1号外部中断,高优先级,边缘触发
}
● 0号定时中断服务程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  TimerInt0_ISR
// 功能说明: 0号定时中断服务程序
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void TimerInt0_ISR( void ) interrupt 1 using 1
{
char i;
CloseTimerInt0();  //关0号定时中断

i = 0;     //进行中断服务操作
OpenTimerInt0(1);  //开0号定时中断,高优先级
}
● 0号定时中断服务程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  TimerInt1_ISR
// 功能说明: 0号定时中断服务程序
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void TimerInt1_ISR( void ) interrupt 3 using 1
{
char i;
CloseTimerInt1();  //关1号定时中断

i = 0;     //进行中断服务操作
OpenTimerInt1(1);  //开1号定时中断,高优先级
}
● 串口中断服务程序
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数名:  SerialInt_ISR
// 功能说明: 串口中断服务程序
// 入口参数: 无
// 返回参数: 无
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void SerialInt_ISR( void ) interrupt 4 using 1
{
char i;
CloseSerialInt();  //关串口中断

i = 0;     //进行中断服务操作
OpenSerialInt(1);  //开串口中断,高优先级
}

相关帖子

沙发
拿起书本| | 2012-4-1 22:24 | 只看该作者
呵呵,以下是它地汇编语言程序及讲解:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 文件名: 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

使用特权

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

本版积分规则

482

主题

2214

帖子

11

粉丝