C51编程:80C51单片机中断服务函数解析
1星 需积分: 16 10 浏览量
更新于2024-11-19
收藏 381KB PDF 举报
“中断,51单片机的中断定义,C51编译器支持中断服务函数的编写,使用interrupt关键字和using关键字进行中断处理。”
在80C51单片机中,中断是一种处理紧急事件的重要机制,它允许单片机在执行当前任务的同时,响应来自外部或内部的突发事件,暂停当前任务,转而执行中断服务程序,然后在完成服务后返回到原先的任务。中断系统提高了单片机处理多任务的能力,使得实时性得到保障。
C51编译器是专门为80C51系列单片机设计的,它扩展了标准C语言,允许在C语言源程序中直接编写中断服务函数。中断服务函数的定义使用了一个特殊的关键词`interrupt`,例如:
```c
interrupt void timer0_isr(void) {
// 中断服务程序代码
}
```
这里的`interrupt`关键字表明`timer0_isr`函数是一个中断服务函数,`void`表示该函数没有返回值,`void`后的括号内可以定义形式参数,但通常中断服务函数不接收参数。
中断号`n`(0~31)用于确定中断向量的位置,80C51单片机有多个中断源,例如:
- 定时器/计数器0中断:中断向量位于0003H
- 外部中断1:中断向量位于0013H
- 定时器/计数器1:中断向量位于001BH
在80C51中,中断向量通常位于内存的特定地址,中断号与向量地址的关系依赖于具体单片机型号。
此外,80C51系列单片机有4个不同的工作寄存器组,每个组包含8个寄存器(R0~R7)。为了在中断服务函数中选择特定的工作寄存器组,C51引入了`using`关键字,例如:
```c
interrupt void timer0_isr(using 1) {
// 使用工作寄存器组1
}
```
`using n`中的`n`(0~3)指定了工作寄存器组。当进入中断服务函数时,当前工作寄存器组会被保存到堆栈,然后切换到指定的寄存器组。在函数结束前,会恢复原来的工作寄存器组,以确保程序的正确运行。
需要注意的是,使用`using`关键字时,必须确保在受控的区域进行寄存器组的切换,否则可能导致程序错误。同时,带有`using`属性的函数一般不应返回`bit`类型值,且`interrupt`和`using`都不应用于外部函数。
在中断服务函数开始时,特殊功能寄存器如ACC、B、DPH、DPL和PSW会被自动保存到堆栈,如果使用了工作寄存器组,那么所有使用到的工作寄存器也会被保存。中断服务完成后,这些寄存器的值会被恢复,以便中断返回后继续执行被打断的程序。这样的设计确保了中断处理的原子性和程序的连续性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-11-25 上传
2012-07-17 上传
2018-03-21 上传
2020-07-25 上传
2010-05-05 上传
点击了解资源详情
tyj0423
- 粉丝: 0
- 资源: 2
最新资源
- 实战Dojo工具包 实战Dojo工具包
- sql教程sqlsqlsqlsql
- linux网络编程.pdf
- 3G技术讲解(化为)
- weblogic guide 中文教程
- 华清远见vxworks的资料
- numbers-parser:工作正在进行中
- Accuinsight-1.0.27-py2.py3-none-any.whl.zip
- FrequencyViewer:简单的 Android 监听器和频率绘图仪
- todo-RestApi-mongoDB
- QT
- my_site:criando umapágina简单-Estudo
- go-gorm-example
- 语法列表:采用字符串元胞数组,并根据标准语法返回带有逗号和“和”的单个字符串-matlab开发
- Face-Detector
- e16-3yp-智能红外射击运动