PAGE1
PAGE1
中断系统
中断概述
中断系统是单片机中一个非常重要的特性,它允许单片机在执行当前任务时,能够响应外部或内部的突发事件,从而临时中断当前任务,处理这些事件,然后再返回到中断前的任务。中断系统提高了单片机的实时性和多任务处理能力,使得单片机能够更高效地管理各种资源和事件。
PIC18系列单片机的中断系统较为复杂,支持多个中断源和中断优先级。中断源可以是外部中断、定时器中断、串行通信中断、ADC中断等。每个中断源都可以通过配置寄存器来启用或禁用,并且可以选择中断的优先级。
中断配置
中断配置主要包括以下几个步骤:
启用全局中断:通过设置INTCON寄存器中的GIE位(全局中断使能位)来启用全局中断。
启用外围中断:通过设置INTCON寄存器中的PEIE位(外围中断使能位)来启用外围中断。
配置中断源:通过设置相应的中断标志和中断使能位来启用或禁用特定的中断源。
配置中断优先级:对于支持优先级的中断源,通过设置相应的优先级位来配置中断的优先级。
全局中断使能
全局中断使能位GIE位于INTCON寄存器中。将GIE位设置为1可以使能全局中断,设置为0则禁用全局中断。
//启用全局中断
INTCONbits.GIE=1;
//禁用全局中断
INTCONbits.GIE=0;
外围中断使能
外围中断使能位PEIE也位于INTCON寄存器中。将PEIE位设置为1可以使能外围中断,设置为0则禁用外围中断。
//启用外围中断
INTCONbits.PEIE=1;
//禁用外围中断
INTCONbits.PEIE=0;
配置中断源
每个中断源都有对应的中断标志位和使能位。中断标志位用于指示中断是否发生,使能位用于启用或禁用该中断源。
外部中断配置
外部中断可以通过配置INTCON寄存器中的INTE位和INTF位来启用或禁用。INTE位用于使能外部中断,INTF位用于指示外部中断是否发生。
//启用外部中断
INTCONbits.INTE=1;
//禁用外部中断
INTCONbits.INTE=0;
//清除外部中断标志位
INTCONbits.INTF=0;
定时器中断配置
定时器中断可以通过配置T1CON寄存器中的TMR1IE位和TMR1IF位来启用或禁用。TMR1IE位用于使能定时器中断,TMR1IF位用于指示定时器中断是否发生。
//启用定时器中断
PIE1bits.TMR1IE=1;
//禁用定时器中断
PIE1bits.TMR1IE=0;
//清除定时器中断标志位
PIR1bits.TMR1IF=0;
配置中断优先级
PIC18系列单片机支持中断优先级配置,可以通过设置IPR寄存器中的相应位来配置中断的优先级。例如,定时器中断的优先级可以通过IPR1寄存器中的TMR1IP位来配置。
//设置定时器中断为高优先级
IPR1bits.TMR1IP=1;
//设置定时器中断为低优先级
IPR1bits.TMR1IP=0;
中断向量表
PIC18系列单片机的中断向量表指定了每个中断源对应的中断向量地址。中断向量表如下:
中断源|中断向量地址|处理函数|
|——–|————–|———-|
高优先级中断|0x0008|__high_isr|
低优先级中断|0x0018|__low_isr|
在编写中断服务程序时,需要在相应的中断向量地址处放置中断处理函数。例如,对于高优先级中断,可以使用__high_isr关键字来定义中断处理函数。
void__interrupt(high_priority)high_isr(void){
//处理高优先级中断
if(INTCONbits.INTF){
//外部中断处理
INTCONbits.INTF=0;//清除中断标志位
}
if(PIR1bits.TMR1IF){
//定时器中断处理
PIR1bits.TMR1IF=0;//清除中断标志位
}
}
void__interrupt(low_priority)low_isr(void){
//处理低优先级中断
if(PIR1bits.TXIF){
//串行通信发送中断处理
PIR1bits.TXIF=