PIC——MCC18中断写法

发布者:灵感狂舞最新更新时间:2016-08-02 来源: eefocus关键字:PIC  MCC18  中断写法 手机看文章 扫描二维码
随时随地手机看文章
MPLAB C18不自动把中断服务程序放在中断向量处。通常将GOTO 指令放在中断向量处,从而把控制权转交给相应的中断服务程序。

PIC18系列的低优先级中断入口地址在0x0018地址,下面的代码是在入口地址处放置一个向量函数,这个向量函数里就是一个内嵌汇编的GOTO指令,GOTO到低优先级的中断服务函数InterruptHandlerLow。

//----------------------------低优先级中断入口-----------------------------------
1 #pragma code InterruptVectorLow = 0x18 //用#pragma伪指令定义一个名字叫InterruptVectorLow的段,并把这个段放到0x18地址起始的代码空间
2 void InterruptVectorLow (void)  //低优先级中断向量函数
3 {
4   _asm  
5   goto InterruptHandlerLow   //内嵌汇编指令
6    _endasm
7 }
8 #pragma code     //这里不是多余的,它是告诉连接器回到默认的代码段,如果不加的话,连接器就会傻傻地把后面的代码紧跟着上面的代码一直放下去。而LKR文件里定义了向量区最多到0x29地址,所以如果没加此行通常会报错

10 #pragma interruptlow InterruptHandlerLow  //这里使用interruptlow这个关键词来声明InterruptHandlerLow这个函数是低优先级中断服务函数,用了关键词后,这个函数将会由编译器自动产生基本的现场保护,并且这个函数的返回将是使用RETFIE返回的。
11 
12 
13 void InterruptHandlerLow (void)
14 {
15       /* 低优先级服务函数的代码写在这里*/
16 }
 

PIC18系列的高优先级中断入口地址在0x0008地址,下面的代码是在这个入口地址处放置一个向量函数,这个向量函数里就是一个内嵌汇编的GOTO指令,GOTO到高优先级的中断服务函数InterruptHandlerHigh 。

//----------------------------高优先级中断入口-----------------------------------

1 #pragma code InterruptVectorHigh = 0x08 //用#pragma伪指令定义一个名字叫InterruptVectorHigh的段,并把这个段放到0x08地址起始的代码空间
 2 void InterruptVectorHigh (void) //高优先级中断向量函数
 3 {
 4   _asm
 5   goto InterruptHandlerHigh //内嵌汇编指令
 6   _endasm
 7 }
 8 #pragma code  //回到默认代码段,原因同上
 9 #pragma interrupt InterruptHandlerHigh 
10 
11 void InterruptHandlerHigh (void)
12 {
13 /* 高优先级服务函数的代码写在这里*/
14 
15   if (INTCONbits.TMR0IF)
16   {//check for TMR0 overflow
17         INTCONbits.TMR0IF = 0;            //clear interrupt flag
18        ;
19      ;
20   }
21 } 

 

对于MPLAB C18,上面的高低优先级的中断向量函数和中断服务函数,各只能出现一次,不能有多个中断服务函数,如果多个中断都是高优先级的,在高优先级中断服务函数里通过判断各自的中断标志位来做对应处理。

 

CONbits.IPEN = 1; //使能中断优先级
INTCONbits.GIEH = 1; //允许/禁止 所有高优先级中断
INTCONbits.GIEL = 1; //允许/禁止 所有低优先级中断

//RCONbits.IPEN = 0; //禁止中断优先级
//INTCONbits.GIE = 1; //允许/禁止 所有中断源
//INTCONbits.PEIE = 1; //允许/禁止 所有外设中断源


当IPEN=1时,中断源使用高优先级中断时GIEH = 1;GIEL 可以=0;
中断源使用低优先级中断时GIEH = 1;GIEL =1;

当IPEN=0时,所有中断均跳转到08H(使用高优先级中断向量入口)
GIEH = 1;GIEL =1;


关键字:PIC  MCC18  中断写法 引用地址:PIC——MCC18中断写法

上一篇:PIC单片机的大数组RAM分配错误解决
下一篇:PIC16F877A 看门狗定时器实验

推荐阅读最新更新时间:2024-03-16 15:02

PIC中档单片机汇编指令详解(2)
DECF 数据寄存器的内容递减1 语法形式:DECF f,d 操作数:f为数据寄存器的低7位地址(0x00~0x7F) d为目的寄存器的低7位地址(0x00~0x7F) 当d=f时,结果放在f数据寄存器,f数据寄存器自减1 当d=W时,结果放在W寄存器中,W寄存器内容自减1 执行时间:一个指令周期 执行过程:【f】-1 d 状态标志影响:Z 说明:该指令对数据寄存器的内容做减1运算。如果减1后的结果为0,则置位0标志寄存器Z 指令范例: CLRF Count ;Count=0x00 DECF Count,f ;Count=0x00,f=0xFF DECF f,W ;f=0xFF,W=0xFE INCF 数据
[单片机]
PIC16F877单片机DS18B20数码管温度计仿真程序 可显示负温度
电路原理图如下: //********************************************************* // 实现的功能:数码管显示实时温度,支持负温度 // 芯片PIC16F877 // XT:4MHZ //********************************************************* #include pic.h //包含单片机内部资源预定义 #define LVP 0x3f39 // 晶振:XT;代码:没有代码保护;上电延时定时器关闭; // 低电压复位禁止;看门狗关闭 ;低电压编程禁止 __CONFIG (XT & UNPR
[单片机]
<font color='red'>PIC</font>16F877单片机DS18B20数码管温度计仿真程序 可显示负温度
PIC16F877A单片机SPI学习
PIR1 Register The PIR1 register contains the individual flag bits for the peripheral interrupts. PIR1 REGISTER PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF SSPIF:Synchronous Serial Port Interrupt Flag bit 1 = The SSP interrupt condition has occurred and must be cleared in software before returning from the int
[单片机]
PIC16C73单片机实现十二位A/D转换器
1 引言 为监测海洋生态环境,研制了用于海水有机磷农药现场监测的生物传感器。为测定生物传感器的信号,使传感器可用于船载及台站的海洋生态环境现场自动监测,需要对整个的采样和排液装置进行控制以及对传感器来的信号进行实时采集处理,形成有机磷的浓度传给上位机。为此,开发了以PIC16C73单片机为核心的小型测控仪器,很好的完成了上述功能。PIC1673单片机自带8位的A/D转换器,但不能满足系统对精度的要求,本设计在单片机自带8位A/D基础上加少量的硬件和软件开销,使其扩展为十二位A/D转换器,满足了系统的要求。 2 系统构成原理 PIC16C73单片机最大的特点是自带8位A/D转换部件,共有5路A/D通道模拟输入。
[单片机]
用<font color='red'>PIC</font>16C73单片机实现十二位A/D转换器
PIC单片机用于LCD段驱动器的键盘接口
  4×4小键盘的典型数字接口使用8个数字I/O引脚。但使用8个引脚作为数字I/O会占用可用于连接LCD的段驱动器引脚的数量。   通过使用2个数字I/O引脚和2个模拟输入引脚,可以向PIC单片机添加一个4×4小键盘,而无需牺牲它的任何LCD段驱动器引脚。   下图中显示了小键盘连接示意图。示例中使用的是PIC18F8490,但该技术可以用于任意LCDPIC MCU。   图中使用的两个数字I/O引脚是RBO和RB5,也可以使用任意两个其他的数字I/O引脚。所使用的两个模拟引脚是ANO和AN1。   要读取小键盘,请遵循以下步骤:   1.首先,将RBO设计为输出高 电平 ,将RB5设为输入(呈高 阻抗 )。   2.执行两次
[单片机]
<font color='red'>PIC</font>单片机用于LCD段驱动器的键盘接口
PIC32MZ tutorial -- External Interrupt
  In my older blog PIC32MZ tutorial -- Key Debounce , I shows how to acheive key debounce with port polling. At this moment, I write an application which uses External Interrupt. Therefore, only generates interrupt and starts debounce when the falling or raising edge happens, so it will eliminate the MCU load of port
[单片机]
基于PIC32的医院新生婴儿防盗系统设计
  1项目概述   研究内容   本项目主要是完成具有防错抱、防被偷及门禁功能的新生婴儿防盗系统研究与实现,具体工作包括以下部分:   系统基本功能:   建立主动式电子标签(纽扣电池供电);   实现对电子标签识别与应答的阅读器;   研究PIC32单片机的中心处理硬件的开发;   在相关的出口建立检测器;   建立异常情况处理机制,例如婴儿标记被破坏,标记检测不到,婴儿进去非法区域等,系统对于相应的情况进行相关的处理;   扩展功能:   实现与医院网络连接,并和医院的包围中心进行联动;   可以加入电子温度感应,对新生婴儿进行体温测量,防止婴儿发烧或者低烧,发现较晚引起不良的结果。   1.2开发背景   无线射频识别(RF
[电源管理]
Microchip新增低成本USB PIC单片机
2008年6月3日,单片机和模拟半导体供应商——Microchip Technology Inc.(美国微芯科技公司)今天宣布新增一系列支持USB应用的8位PIC®单片机(MCU)。PIC18F13K50及PIC18F14K50(PIC18F1XK50)是目前Microchip所有USB单片机中成本最低的,可提供多种其他平价8位单片机欠缺的功能,使得更多应用能添加嵌入式USB功能。 有了这一新的产品系列,Microchip现拥有业界最全面的8位、16位及32位USB单片机产品线,且均由单一集成开发环境——免费的MPLAB® IDE支持。该集成开发环境为所有PIC单片机提供了统一的开发平台,为设计工程师研发性能更高及功
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved