概述
//RB2(INT2)作为外中断
#include <p18cxxx.h>/*18F系列单片机头文件*/
void PIC18F_High_isr(void);/*中断服务函数声明*/
void PIC18F_Low_isr(void);
#pragma code high_vector_section=0x8
/*高优先级中断响应时,会自动跳转到0x8处*/
/*利用预处理器指令#pragma code来指定后面的程序在ROM中的起始地址为0x08,*/
/*它是告诉连接器定位到特定的代码段,HIGH_INTERRUPT_VECTOR 是该特定代码段的段名*/
void high_vector (void)
{
_asm goto PIC18F_High_isr _endasm/*通过一条跳转指令(汇编指令),跳转到中断服务函数(中断服务程序)处*/
}
#pragma code low_vector_section=0x18
/*低优先级中断响应时,会自动跳转到0x18处*/
void low_vector (void)
{
_asm goto PIC18F_Low_isr _endasm
}
#pragma code
/*这条语句不是多余的,它是告诉连接器回到默认的代码段,*/
/*如果不加的话,连接器就会傻傻地把后面的代码紧跟着上面的代码一直放下去。*/
/*而18f4520.lkr文件里定义了向量区地址最多到0x29,所以如果没加此句通常会报错*/
/*---高优先级中断服务程序---*/
#pragma interrupt PIC18F_High_isr
/*利用预处理器指令#pragma interrupt来声明后面的函数是低优先级中断服务函数(中断服务程序),*/
/*注意:关键字是interrupt,和低优先级中断时不同*/
/*一旦指定后面的函数是低优先级中断服务程序,系统在进入该函数时,会自动保护现场,退出前自动恢复现场,*/
/*同时中断服务程序执行完毕后,会自动返回断点,*/
/*中断服务函数前必须加该语句*/
void PIC18F_High_isr (void)
{
/*如果只有一个同级中断源被使能:*/
/*1、执行中断服务语句部分*/
/*2、清除中断标记*/
/*如果有多个同级中断源被使能:*/
/*1、用查询法确定是哪个中断源提出了中断请求*/
/*2、确定是哪个中断源提出了中断请求后,执行中断服务语句部分*/
/*3、最后清除该中断源中断标志*/
}
/*---低优先级中断服务程序---*/
#pragma interruptlow PIC18F_Low_isr
/*注意:关键字是interruptlow,和高优先级中断时不同*/
void PIC18F_Low_isr (void)
{
PORTBbits.RB4=~PORTBbits.RB4;
INTCON3bits.INT2IF=0;/*清除中断标志*/
}
void main(void)/*主函数*/
{
TRISBbits.TRISB4=0;//B4输出
PORTBbits.RB4=1; //B4输出高电平
INTCONbits.GIE=0;/*关全局中断*/
RCONbits.IPEN=1;/*使能中断优先级*/
INTCON2bits.INTEDG2=0;/*设定外部中断触发边沿*/
INTCON3bits.INT2IP=0;/*设定中断优先级*/
INTCON3bits.INT2IF=0;/*清除中断标志*/
INTCON3bits.INT2IE=1;/*使能中断*/
INTCONbits.GIEL=1;/*开低优先级全局中断*/
INTCONbits.GIE=1;/*开全局中断*/
while(1) ;/*这里写主程序语句*/
}
完整资料打包(含仿真):
PIC单片机1-5程序及仿真合集-单片机文档类资源-CSDN下载
最后
以上就是乐观香氛为你收集整理的PIC单片机3——外部中断的全部内容,希望文章能够帮你解决PIC单片机3——外部中断所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复