Microchip PIC系列8位单片机入门教程(4):中断

控制/MCU

1842人已加入

描述

01第一节 知识点

(1)中断

PIC18F2420/2520/4420/4520 器件提供多个中断源及一个中断优先级功能,可以给大多数中断源分配高优先级或者低优先级。高优先级中断向量地址为0008h,低优先级中断向量地址为0018h。高优先级中断事件将中断所有可能正在进行的低优先级中断。

(2)中断相关寄存器

有10 个寄存器用于控制中断的操作。它们是:
• RCON :
• INTCON
• INTCON2
• INTCON3
• PIR1 和PIR2
• PIE1 和PIE2
• IPR1 和IPR2

(3) 控制中断源的操作

• 标志位表明发生了中断事件

• 使能位允许程序跳转到中断向量地址处执行(当标志位置1 时)

• 优先级位用于选择是高优先级还是低优先级

我们看一下PIC18单片机的中断逻辑框图:

中断

我们一般关注中断需要四个点:
(1)中断的使能,例如 TMR0IE 定时器0中断使能位;

(2)中断标志位,例如 TIMR0IF 定时器0中断标志位,这个可以观察是否中断已经发生。

(3)中断优先级位,例如TIMR0IP定时器0中断优先级,是高优先级还是低优先级,中断的服务函数要对应,PIC18 只有两个优先级,高优先级和低优先级两个服务函数。

(4)全局中断中断使能吗GIE, 外设中断允许位,PEIE。

那么,PIC18 共有哪些中断呢?

我们看,定时器中断(TIMR0,TIMR1,TIMR2,TIMR3),RB端口电平变化中断,外部中断(INT0,INT1,INT2),ADC中断,SSP中断,比较器中断,高/低压检测中断,CCP捕获中断,EUSART 中断。
我们在使用具体的外设功能的时候考虑是否使用中断功能。

中断寄存器

(1)图1
中断
(2)图2
中断
(3)图3
中断
(4)图4
中断
(5)图5
中断
(6)图6
中断
(7)图7
中断

我们以定时器0为例,看到定时器相关的中断寄存器需要哪些设置,具体的含义贴在图片上了。
我们从图7 可以看到,要使用TIMR0的中断功能,必须设置INTCON的具体寄存器值。

02第二节 代码编写

INTCONbits.GIE=1;//允许全局中断
INTCONbits.PEIE=1;// 允许外设中断
RCONbits.IPEN=1;  // 中断优先级使能位
// 中断timer0 使能
TMR0IE=0; // timer0 允许中断
TMR0IF=0; // 中断标志位清零
TMR0IP=1;// timer0 设置为高级优先中断

之后的代码就可以配置定时器0具体是使用8位定时还是16位定时,定时的时间是多少溢出,定时器的时钟怎样选择。这个在定时器的使用过程中我们具体看。

中断服务函数是具体中断发生后如何处理的操作。

// 高级优先级中断服务子程序
void interrupt high_priority inrt_isr_high(void)
{    //usart 服务
if(RCIF&&RCIE)
{
RCIF=0; // 必须先清楚RC中断标志位
usart_send_byte(RCREG);
}
//timer 0 服务
if(TMR0IE&&TMR0IF)
{
TMR0IF=0;
timer0num++;
if(timer0num==39063)
{
usart_send_string("timer0 is count for 1s!rtn");
timer0num=0;
}
}
}

这儿的例子是中断发生后在串口发送数据,代码的含义注释的比较清楚。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分