历史上的今天
今天是:2025年02月24日(星期一)
2020年02月24日 | PIC C语言编程_PICC中断函数的实现
2020-02-24 来源:eefocus
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单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
史海拾趣
|
DIY FPGA开发板活动开幕词 同仁诸君: 当今电子工业发展之迅猛,DSP、FPGA、CPLD之迅速崛起与普及业内对于各种芯片的评估开发板的需求日益增多。市售各种开发板产品、功能、品牌之繁杂,价格之天文、质 ...… 查看全部问答> |
|
wince5.0使用DnsQuery_W()实现gethostbyname时系统不支持 在wince5.0使用DnsQuery_W()实现gethostbyname时,返回值总是120(系统不支持的函数), 头文件、lib文件正确包含调用,不知道为什么系统不支持呢? 代码调用如下: PDNS_RECORD pDNS_RECORD ; &n ...… 查看全部问答> |
|
一直对怎么去计算程序占用的ROM和RAM空间大小不解,而且做项目的时候一般需要估算一下程序可能需要占用空间大小才好选取用多大ROM和RAM空间的MCU来做,举个简单的程序吧:程序功能实现LED闪烁: #include #include #define uint unsigned int ...… 查看全部问答> |
|
中 美 爱 梯.NET培训基地学员被邀请为微软MSDN特约讲师 热烈祝贺中 美 爱 梯.NET培训基地学员被邀请为微软MSDN特约讲师 学员简介:穆**于2006年4月参加中 美 爱 梯.NET培训,由中 美 爱 梯推荐至中讯汉扬任.NET软件工程师,后参加以及等系统开发,担任数据库信息提取以及中间层代码的编写工作,从事过多 ...… 查看全部问答> |
|
德州仪器 便携式电源系统工程师Oliver Nachbaur与您分享白光 LED 电源设计技术,传授一个新的电源设计解决方案,一起来学学吧。 摘要 随着彩色显示屏在便携市场(如手机、PDA 以及超小型 PC)中的广泛采用,对于一个单色 LCD 照明而 ...… 查看全部问答> |
|
几年以前,视频监控应用的通道数不多,对图像质量和实时性等也要求不高,很少有人用FPGA;但是,随着监控由标清转向高清,从单通道转到八通道,从非实时转到对实时的要求,外加人脸识别和运动估计等分析功能,DSP表现得越来越吃 ...… 查看全部问答> |




