PIC单片机中断服务程序
来源:互联网 发布:淘宝app怎么下载不了 编辑:程序博客网 时间:2024/05/22 13:07
中断服务程序有一个特殊的定义方法: void interrupt ISR(void);其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt”。
中断函数可以被放置在原程序的任意位置。因为已有关键词“interrupt”声明,PICC 在最后进行代码连接时会自动将其定位到0x0004 中断入口处,实现中断服务响应。编译器也会实现中断函数的返回指令“retfie”。
一个简单的中断服务示范函数如下:
}
//在此加入TMR1 中断服务
}
} //中断结束并返回
PICC 会自动加入代码实现中断现场的保护,并在中断结束时自动恢复现场,所以编程员无需像编写汇编程序那样加入中断现场保护和恢复的额外指令语句。
但如果在中断服务程序中需要修改某些全局变量时,是否需要保护这些变量的初值将由编程员自己决定和实施。
用C 语言编写中断服务程序必须遵循高效的原则:
1. 代码尽量简短,中断服务强调的是一个“快”字。
2.避免在中断内使用函数调用。虽然PICC 允许在中断里调用其它函数,但为了解决递归调用的问题,此函数必须为中断服务独家专用。既如此,不妨把原本要写在其它函数内的代码直接写在中断服务程序中。
3.避免在中断内进行数学运算。数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。
中档系列PIC 单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
中断函数可以被放置在原程序的任意位置。因为已有关键词“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 单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
阅读全文
0 0
- PIC单片机中断服务程序
- PIC单片机中断服务程序
- PIC单片机之中断程序
- PIC单片机(PIC16F877A)外部中断程序
- PIC单片机之中断
- PIC单片机的中断过程
- PIC中档单片机的中断总结
- PIC单片机入门_中断系统详解
- PIC单片机PIC18F26K80中断优先级图
- PIC RB0外部中断程序
- linux下avr单片机开发:中断服务程序
- PIC单片机编程 (点灯程序)
- PIC单片机(PIC16F877A)DS1302芯片程序
- PIC单片机(PIC16F877A)串行收发程序
- PIC单片机的BCD码处理程序
- 【51单片机】中断程序
- 用中断方式,实现PIC单片机的串口传输
- 单片机C语言函数之中断函数(中断服务程序)
- 琐记2: ++i 的打印顺序问题
- 【技能库】--jvm crash 如何开启 core dump 如何分析(280)
- 排序方法之冒泡(鸡尾酒)、选择、插入(二分插入)、希尔排序
- 扩展gcd
- 时间
- PIC单片机中断服务程序
- OpenCv 如何对图像的像素进行操作(注意多通道图像在内存中的存储方式!!)
- Linux网络编程之socket函数
- 数组
- 笔记15--js基础知识--字符串
- final关键字
- SG定理与SG函数(模板)
- Ceph与Swift简易对比
- C++:重载、覆盖与隐藏