中断服务程序有一个特殊的定义方法: void interrupt ISR(void);其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt”。
中断函数可以被放置在原程序的任意位置。因为已有关键词“interrupt”声明,PICC 在最后进行代码连接时会自动将其定位到0x0004 中断入口处,实现中断服务响应。编译器也会实现中断函数的返回指令“retfie”。
一个简单的中断服务示范函数如下:
void interrupt ISR(void) //中断服务程序
{
if (T0IE && T0IF)//判TMR0 中断
{
T0IF = 0; //清除TMR0 中断标志 //在此加入TMR0 中断服务
}
if (TMR1IE && TMR1IF)//判TMR1 中断 T
{
MR1IF = 0; //清除TMR1 中断标志
//在此加入TMR1 中断服务
}
} //中断结束并返回
PICC 会自动加入代码实现中断现场的保护,并在中断结束时自动恢复现场,所以编程员无需像编写汇编程序那样加入中断现场保护和恢复的额外指令语句。
但如果在中断服务程序中需要修改某些全局变量时,是否需要保护这些变量的初值将由编程员自己决定和实施。
用C 语言编写中断服务程序必须遵循高效的原则:
1. 代码尽量简短,中断服务强调的是一个“快”字。
2.避免在中断内使用函数调用。虽然PICC 允许在中断里调用其它函数,但为了解决递归调用的问题,此函数必须为中断服务独家专用。既如此,不妨把原本要写在其它函数内的代码直接写在中断服务程序中。
3.避免在中断内进行数学运算。数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。
中档系列PIC 单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
关键字:PIC单片机 中断服务
引用地址:
PIC单片机中断服务程序
推荐阅读最新更新时间:2024-11-10 06:57
PIC单片机1X4独立键盘C语言程序
/******************************************** *** 功能:1X4按键 *** 实验内容:按下S1 S2 S3 S4 数码管分别显示出0 1 2 3 *** 开发板连接方法:把J3的的跳线帽跳到1-2(左边) *********************************************/ #include pic.h //包含单片机内部资源预定义 __CONFIG(0xFF32); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 const unsigned char TABLE = {0x3f,0x6,0x5b,0x4
[单片机]
在处理PIC单片机的中断服务程序时需要注意哪些问题
单片机中的中断系统对电子工程师来说是解决突发事件和多任务实时处理的最好方法,熟练掌握中断技术的应用是一个合格电子工程师必备的能力。 PIC与51系列单片机一个显著的区别就是:PIC只有一个中断入口地址(为04H),而51有多个中断源。这样对PIC来说,无论发生何种中断程序将自动转移执行04H处的程序语句,为了区分到底是哪种中断发生就必须在中断服务程序中通过判断中断标志位来确定并转移到相应的中断服务程序中。在发生中断时,断点地址被首先压入硬件堆栈,而现场的一些参数须用户通过软件保存,必须保存的寄存器包括W寄存器、程序寄存器的高位字节PCLATH及状态标志寄存器STATUS等,另外一些在中断服务程序和主程序中均使用到的寄存器也必须
[单片机]
PIC单片机定时器0的使用方法
#include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); void init(); uint intnum; void main() { init(); while(1) { if(intnum==5) { intnum=0; RD0=!RD0; } } } void init() { TRISD=0; PORTD=0; OPTION=0x07; INTCON=0xa0; TMR0=61; } void interrupt time0() { T0IF=0; TMR0=61;
[单片机]
PIC单片机片内EEPROM运用方法
/*============================================================================= 访问PIC16F877A片内EEPROM,运行程序: Begin Test - LED0亮, EEPROM Test OK- LED7亮, Write&Read OK - LED0/2/4/6亮。 =============================================================================*/ //////////////////////////////////////////////
[单片机]
菜鸟学PIC单片机(一)
菜鸟学P IC 单片机 (一):TS1620字符型液晶模块驱动程序编写苦与乐 小弟学习PIC16F87X系列 单片机 已持续半个月了,遇到的困难还是比较多的,幸好单位的图书馆里还有一些相关的书籍,加之购买了第三方的ICD,因此学习起来还是比较充实的。 虽说如此,但在单位里找不到志同道合者一起来琢磨她,不过这里却有许多热心的站友。 今后,小弟打算将自己的一些学习心得和疑问写出来,与论坛里和我一样的初学者一起进步,并殷切希望能得到前辈的指点, 小弟写的第一个程序是控制三位八段 数码管 的显示,还没来得及总结,今天下午调试和总结了一下 LCD 的驱动程序,遇到了很多困难,但也有点小小的收获,拿出来晾晾,大家尽管扔砖,小
[单片机]
pic单片机选型须知与pic单片机选型手册
pic单片机相当于一个小的计算机,pic单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,pic 共享的部分相当于人的神经系统。pic单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于pic的类型。但是它们的最高操作频率大约都在20MHz左右,存储器容量用做写程序的大约1K—4K字节。 用pic单片机使电路做的很小巧变得可能。而且因为pic单片机可以把计算部分、内存、输入和输出等都做在一个芯片内。所以她工作起来效率很高、功能也自由定义
[单片机]
基于PWM模式输出的TMP04型数字式温度传感器的测温系统
1 引言 数字式温度 传感器 主要的输出模式有PWM、SPI、I2C、SMBus等,当今主流的单片机几乎都支持这种接口方式,文中以PWM输出模式为例,讨论了PIC单片机对于这种输出模式的测温方案。PWM模式输出的数字温度 传感器 如TMP03/04、TPM05/06等,都是将 传感器 件测得的温度信息数字化后,经过一定的输出编码,调制成占空比与温度成正比的数字脉冲信号单线输出。输出信号接入微处理器后,只需测得数字脉冲信号的占空比就可由软件运算得到相应的温度信息。而对于微处理器来说,输入信号占空比的计算方式多种多样以PCI系列单片机为例,在PIC16、PIC17、PIC18中均可由CCP模块的捕捉功能、RB端口电平变化中断
[单片机]
用中断方式,实现PIC单片机的串口传输
#include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); //__CONFIG (CP_OFF &WDTE_OFF& BOREN_OFF&PWRTE_OFF &FOSC_HS&WRT_OFF&LVP_OFF&CPD_OFF); int a ={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; int j; //显示一个整形的数组 void Show_array(int array ,int n);//显示一个字符型的数组 void init(); void main()
[单片机]