PIC C语言编程_PICC中断函数的实现

发布者:Changfeng520最新更新时间:2020-02-24 来源: eefocus关键字:PIC  C语言编程  PICC  中断函数 手机看文章 扫描二维码
随时随地手机看文章

PICC可以实现C语言的中断服务程序。中断服务程序有一个特殊的定义方法:


voidinterruptISR(void);


其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt”。


中断函数可以被放置在原程序的任意位置。因为已有关键词“interrupt”声明,PICC在最后进行代码连接时会自动将其定位到0x0004中断入口处,实现中断服务响应。编译器也会实现中断函数的返回指令“retfie”。一个简单的中断服务示范函数如下:


voidinterruptISR(void)//中断服务程序


{


if(T0IE&&T0IF) //判TMR0中断


{


T0IF=0; //清除TMR0中断标志


//在此加入TMR0中断服务


}


if(TMR1IE&&TMR1IF)//判TMR1中断


{


TMR1IF0; //清除TMR1中断标志


//在此加入TMR1中断服务


}


}


//中断结束并返回


PICC会自动加入代码实现中断现场的保护,并在中断结束时自动恢复现场,所以编程员无需象编写汇编程序那样加入中断现场保护和恢复的额外指令语句。但如果在中断服务程序中需要修改某些全局变量时,是否需要保护这些变量的初值将由编程员自己决定和实施。


用C语言编写中断服务程序必须遵循高效的原则:


1. 代码尽量简短,中断服务强调的是一个“快”字。


2. 避免在中断内使用函数调用。


虽然PICC允许在中断里调用其它函数,但为了解决递归调用的问题,此函数必须为中断服务独家专用。既如此,不妨把原本要写在其它函数内的代码直接写在中断服务程序中。


3. 避免在中断内进行数学运算。


数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。


中档系列PIC单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。

关键字:PIC  C语言编程  PICC  中断函数 引用地址:PIC C语言编程_PICC中断函数的实现

上一篇:PIC C语言编程_PICC中的指针
下一篇:PIC单片机如何定义配置字与芯片标记

推荐阅读最新更新时间:2024-11-12 05:22

PIC单片机双机同步通信设计
1. 单片机 PIC1编程(主控发送) LIST P=16F876 #INCLUDE P16F876.INC CBLOCK 0X24 ;保留三个字节作为显示用 COUNT ;作计数器或暂存器用 ENDC ORG 0X0000 ;程序复位入口 NOP START GOTO M AI N ORG 0X0100 MAIN MOVLW 0X30 MOVWF FSR ;以下将从30H单元开始的 RAM 内容初始化 MOVLW 0X30 ;将值30H赋给单元30H MOVWF COUNT INTRAM MOVF COUNT,0 ;将30H~7FH赋给单元30H~7FH MOVWF INDF INCF COUNT,1 INCF FSR
[单片机]
<font color='red'>PIC</font>单片机双机同步通信设计
PIC单片机实例七:SED1565型液晶串行驱动
本来我一直以为只要学会了一种液晶控制器,就够了,所以我一直使用的是KS0108,但最近有网友让我写一个液晶串行驱动.我想了一下,的确有必要,因为他的最大优点在于他省了很多端口.所以,我找到SED1565系列(和ST7565差不多)尝试写了个驱动,以回馈网友,并用PROTEUS软件仿真通过,我想实际也基本可以用的. 一,原理图 芯片的接线很少,只使用了四个口,实际的液晶端口很多,但串行只用这四个就够了. 如液晶资料上说的,当P/S端接低电平时为串口模式. 串行传输时的时序如下所示: 所以CS2端口可以不用,一直接高电平.A0是指示输入的是数据或是命令,高电平为数据,低电平为命令. 在时钟上升沿时,数据输入. 二
[单片机]
<font color='red'>PIC</font>单片机实例七:SED1565型液晶串行驱动
PIC单片机开发过程中软、硬件设计一些经验、技巧
本文总结了作者PIC单片机开发过程中一些经验、技巧,供同行参考。 1 怎样进一步降低功耗 功耗,电池供电仪器仪表中是一个重要考虑因素。PIC16C 系列单片机本身功耗较低(5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,保证满足工作要求前提下,可采用降低工作频率方法,工作频率下降可大大降低功耗(如PIC16C 3V,32kHz下工作,其电流可减小到15 A),但较低工作频率可能导致部分子程序(如数学计算)需占用较多时间。这种情况下,当单片机振荡方式采用RC电路形式时,可以采用中途提高工作频率办法来解决。 具体做法是闲置一个I/O脚(如RB1)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB1=0。
[单片机]
PIC24单片机在血糖仪上的应用
  糖尿病是一种常见严重危害人类健康的慢性疾病,近年来的发病人数逐年上升,患者必须定时进行血糖监测,才能控制病情并有针对性的治疗。血糖仪已经成为一种常见的家庭医疗器械,市面上大多数的血糖仪价格和精度难以兼得。随着电子技术的发展,一款功能强大而价格便宜的血糖仪应运而生,本文将介绍一款采用Microchip PIC24”GC”系列MCU,利用CTMU功能测定血糖浓度的新方法。   血糖仪测试原理   血糖值的检测方法采用的是生物电化学方法,其原理:血糖测试条插入血糖仪后,在测试条的顶端滴入血样,血液中的葡萄糖与血糖测试条上的酶发生化学反应,产生电子或微电流,   电子数量或者微电流的强弱随着血液中血糖浓度的增加而增加。   普
[单片机]
<font color='red'>PIC</font>24单片机在血糖仪上的应用
武林教你学PIC32(三)教你用库函数中断按键
我接触的32位单片机:STM32,LM3S都有库函数,利用库函数能够加快项目进度,不需要去底层查看寄存器等等。PIC32的库函数位置在: D:\Program Files\Microchip\MPLAB C32\pic32-libs\peripheral 如果你安装在C盘,改下路径就可以了,我们可以到了各个外设都封装好了。网络上有个库函数说明书,我网络不好下载不了,就把地址发出来吧: http://hades.mech.northwestern.edu/images/5/5e/32-bit-Peripheral-Library-Guide.pdf 下面就教大家使用库函数做中断按键触发LED亮灭 从按键的连接看
[单片机]
武林教你学<font color='red'>PIC</font>32(三)教你用库<font color='red'>函数</font>写<font color='red'>中断</font>按键
PIC16f877a单片机DS18b20源程序
//调试总结: //显著的问题是,写时序、读时序中,PIC MCU向总线写1是通过改方向为输入方向由上拉电阻拉高数据线实现的,而非在输出方向下输出1,与AVR不同 //某IO口8位未全使用时,对整个IO口读取进行位运算无效 //使用if(dat2&0xf8==0xf8)时,进错分支导致显示乱码仍未找到原因,用if(dat2 =240)代替正常 #include pic.h #define uchar unsigned char #define uint unsigned int #define rs_h (PORTC|=0x01) #define rs_l (PORTC&=0xfe) #define rs_o (TRISC&
[单片机]
武林教你学PIC32(六)串口发送数据
1准备工作 串口是必备的,用处非常广,可以把信息打印到屏幕上等等。 首先我们找下串口在开发板上的位置,如下图所示,串口1在JE插槽,串口2在JH插槽处。 由于没有申请串口模块。所以自己焊了一个串口模块,采用的是MAX232电平转换芯片。焊接效果如下图,大家也要自己动手哦,后面几讲要用到串口哦。 2 波特率计算公式 3串口编程 首先配置时钟(见第四讲)系统时钟80M,外设设置10M 然后配置串口波特率: OpenUART2(UART_EN, UART_TX_ENABLE, pbClk/16/DESIRED_BAUDRATE-1);//使能串口,发功能,配置波特率 最后发数据就用: putsUART2( E
[单片机]
武林教你学<font color='red'>PIC</font>32(六)串口发送数据
PIC单片机低功耗的实现
  许多人说PIC 单片机 一大的优势就是低功耗,那我们就来讨论,讨论低功耗的实现。   1,睡眠(sleep)   睡眠方式是我们最常用的一种方式来降低功耗,但睡眠期间单片机不能做任何的事情。对于那些没事情就睡着,有事情就做一下的情况睡眠无疑是功耗最低的处理方式。   比如:   睡眠+ I/O电平变化中断唤醒 当按键没按下时,单片机睡眠,当按键按下后,执行相应的工作。   睡眠+数据接收中断唤醒 这样单片机就可以再没有接收到数据时候进入睡眠状态,接收到数据的时候就唤醒然后处理数据。当然首先单片机要有相关的外设比如SPI ,I2C,USART,等这些支持这些通讯的模块。   睡眠+看门狗唤醒 这个可以用在需要定时唤醒
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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