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下载

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fengyuzhe13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值