历史上的今天
今天是:2025年01月31日(星期五)
2020年01月31日 | PIC单片机中断服务程序
2020-01-31 来源:eefocus
中断服务程序有一个特殊的定义方法: 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 单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
史海拾趣
|
Intel82551网卡大包(65535 bytes)不通问题 小弟正在做MPC8377的板子,板载一片Intel82551 PCI网卡,还有Intel82574 pci-e网卡,vxworks的版本是6.6,之前我是使用命令行编译的,这两个网卡的大包(65535字节)都不通.后来,使用workbench编译,通过比较prjParams.h文件,添加了大包的相关组件后, 82574 ...… 查看全部问答> |
|
在wince 4.2 的引用过程中碰到如下几个问题,由于版本过老,很难找到资料,望高手指点 1.原IE是4.0,需要升级到6.0,网上很难找到IE升级包,有没有什么方法可以解决呢?主要是用在远程监控的IE访问,要安装插件(诚风的远程监控 硬盘录像机),有 ...… 查看全部问答> |
|
请大家帮帮忙,怎么才能在PB5.0与开发板之间建立内核调试关系。急!!! 请大家帮帮忙,怎么才能在PB5.0与开发板之间建立内核调试关系。 我希望能够在开发板启动的时候,PB5.0能够对WinCE5.0镜像进行单步调试,断点调试。 很急呀!!!… 查看全部问答> |
|
目前在wince6 R3环境下开发Silverlight程序,计划采用DirectDraw作为2D加速方式。处理器为pxa310,是支持DirectDraw的2D硬件加速的。 按照msdn上的介绍配置好环境变量,SYSGEN_XAML_RUNTIME,BSP_XRPLUGIN_DDRAW and BSP_XRPLUGIN_OPENGL。在系统b ...… 查看全部问答> |
|
我下了个uclinux-dist-200608...tar.gz,里面的linux-2.6.x不好用,编译gcc的时候会找不到头文件,我看了下arm-elf声称的头文件中小而且东西齐全,我该怎样去制作这个头文件,对了我的板子lpc22xx,有什么下补丁的地方吗?… 查看全部问答> |
|
我在XST综合时,未接输出端口的寄存器被优化掉了,但我需要保留这些寄存器以获得一些功耗方面的信息。 请问如果约束优化,使这些寄存器得以保存下来呢?? 等待高手解答!!!!!!!!!!!!!!!!… 查看全部问答> |
|
uart1 需要自己搭外设。 看着datasheet配置完uart1 还是不行。到后来才发现 板子上的uart0 “对应”PC机上的虚拟串口在这里写下来,让有出现同样情况的朋友们明白下·~共同学习~~… 查看全部问答> |
|
真正使用430是这次换工作以后,新项目是用430单片机来实现的,主要是430的微功耗功能,确实让我感受到这款单片机的强大。以前做项目采用c8051单片机,功能在10mA左右,认为这种功耗已经很小了,接触430后才感觉到TI对MCU的设计的水平,能够很好的把 ...… 查看全部问答> |




