我是靠谱客的博主 乐观香氛,最近开发中收集的这篇文章主要介绍PIC单片机3——外部中断,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

//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——外部中断所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部