当前课程知识点:单片机原理及应用 > 6 中断与定时系统 > 6.5 外部中断举例 > 外部中断举例
同学
你好
我们前面已经对51单片机的相关的
中断的全部的技术进行了一个详细的介绍
今天我们将来看一个
外部中断申请的例题
通过这个例题同学们可以体会一下
51单片机中断的应用的方法
我们来看这个例题
是编写程序使得每按动一次按键
外接的发光二极管led的亮灭状态
都会改变一次
如图所示
我们用外部中断0的输入引脚INT0来
连接一个按键
由于INT0对应的是51单片机的
P3.2的引脚
同学们一定要注意一下
用51单电机的P1.2引脚
来连接LED发光二极管
程序的总体思路是
当按键按下时
相当于通过单片机的INT0引脚
向单片机发送了一个外部中断0的中断申请
此时如果单片机允许响应外部中断0的中断申请
单片机就会暂停正在执行的主程序
转而去执行外部中断0的中断响应服务程序
而外部中断0的服务程序
是在ROM的0003H存放
此处我们可以放一条转移指令
转到中断服务程序
真正的存放地址
在ROM的0300H的位置去执行相关的
真正的中断服务程序
而此处中断服务程序要做的就是
通过把引脚P1.2取一个反
来改变发光二极管的亮灭的状态
由于外部中断申请
我们说过有两种触发方式
一种是负脉冲触发
一种是电平触发
这两种方式的主要区别在于
中断申请标志位的撤销的方式有所不同
我们先来看一看这个比较简单的第一种方法
就是用外部中断0的负跳变来触发
即在INT0引脚每输入一次电压的负跳变
就引起一次中断请求
那么整个的程序分成了两个部分
就是主程序和中断服务程序
主程序从MAIN开始
中断响应的服务程序
从L1开始
主程序MAIN 里通过三条SETB指令
来开启中断允许总开关和外部中断0
允许的分开关
并把外部中断0设为负跳变的触发方式
随后通过一条原地址跳转指令
模拟执行其他的任务
而在中断服务程序L1里
我们通过一条CPL就取反指令
把引脚P1.2的输出值取反
从而来改变发光二极管的亮灭状态
主程序MAIN和中断服务程序LE都比较简单
关键是同学们要掌握整个程序执行的逻辑顺序
在正常情况下
当单片机上电启动或复位时
单片机首先我们知道从ROM0000H单元开始
来执行指令
该单元我们存放的是一条
转移到主程序MAIN的转移指令
所以正常情况下单片机就会马上转移
去执行主程序
主程序的最后
我们知道是一个原地跳转的指令
所以正常情况下不会执行中断服务程序L1
什么时候会执行中断服务程序L1
只有当INT0引脚收到一个负跳变信号时
由于在主程序中已经设定单片机允许响应
负跳变的外部中断0的申请
所以当INT0有了负跳变的信号输入时
单片机就会暂停正在执行的原地跳转的主程序
转而去执行存放在ROM 0003H单元的
外部中断0的服务程序
但是实际上我们此处
放的是转移到L1处的一个转移指令
所以单片机最后会转移到ROM的L1处
去执行真正的中断服务程序L1
当L1执行完之后
会通过一条RETI指令
首先清除掉外部中断零的标志位
然后再返回到主程序中
继续去执行原地跳的指令
请同学们根据这个程序的注释
仔细地阅读该程序
领会外部中断程序设计和运行的内涵
最后我们来看一下第二种方法
即电平触发外部中断的方法
需要注意的是
为避免一次按键引起多次中断响应
我们需要在程序中编程
等待这个按键释放撤销中断申请电平
方法二的程序结构和运行逻辑与方法一
基本相同
不同点有两处
一处在主程序MAIN中要用一条CLR IT0
清零的指令来设定外部中断0为
低电平触发的中断申请
另一处不同点就是在中断响应服务程序L1中
要加一条JNB P3.2 逗号 L2
来判位转移指令
该指令的目的是在中断服务程序结束前
一定要等待这个按键释放
使得INT0引脚回复高电平
然后才能结束中断服务程序并返回到主程序
如果中断服务程序中不等待按键释放
就返回到主程序
我们单片机就会一直认为
INT0的中断低电平申请有效
从而造成单片机不停的去响应中断服务程序L1
请同学们根据这个程序的注释
也是要仔细的阅读该段程序
领会一下电平方式的外部中断程序设计
和运行的精髓
以上就是今天课程的全部内容
今天我们主要通过一个例题
使同学们能够领会到中断服务程序的意义
中断服务程序的设计
是我们单片机程序设计的一个重要技术
请同学们下去之后一定要好好的练习
掌握好中断程序设计的方法
好的
今天课程就到这里
同学们再见
-1.1 单片机的名称
--单片机的名称
-1.2 单片机的相关概念
--单片机的相关概念
-1.3 单片机的设计语言及软件
-1.4 单片机的发展
--单片机的发展
-1.5单片机的应用
--单片机的应用
-1.6 第一单元作业
-2.1 单片机的结构框图
--单片机的结构框图
-2.2 80C51内部结构
-2.3 信号引脚
--信号引脚
-2.4 内部数据存储器RAM
-2.5 特殊功能寄存器
--特殊功能寄存器
-2.6 堆栈
--堆栈
-2.7 内部程序存储器ROM
-2.8 存储器的结构特点
--存储器的结构特点
-2.9 并行输入输出接口电路
-2.10 并口功能与时序
--并口功能与时序
-2.11 工作方式
--工作方式
-2.12 最小应用系统
-- 最小应用系统
-2.13 第二单元作业
-3.1 指令格式
--指令格式
-3.2 立即寻址与直接寻址
-3.3 寄存器寻址与寄存器间接寻址
-3.4 变址间接寻址与位寻址
-3.5 内部RAM传送指令
-3.6 外部RAM传送指令
-3.7 ROM传送指令
--ROM传送指令
-3.8 交换指令
--交换指令
-3.9 堆栈操作指令
--堆栈操作指令
-3.10 传送类指令习题讲解
-3.11 算术运算类指令特点
-3.12 加法指令
--加法指令
-3.13 加法习题、减法和乘除指令
-3.14 逻辑运算指令
--逻辑运算指令
-3.15 布尔变量操作指令
--布尔变量操作指令
-3.16 无条件转移指令
--无条件转移指令
-3.17 条件转移指令
--条件转移指令
-3.18 循环转移指令
--循环转移指令
-3.19 子程序相关指令
--子程序相关指令
-3.20 并口访问指令及指令小结
-3.21 第三单元作业
-4.1 汇编程序约定
--汇编程序约定
-4.2 宏指令
--宏指令
-4.3 汇编控制指令
--汇编控制指令
-4.4 汇编语言程序设计步骤
-4.5 顺序程序举例
-- 顺序程序举例
-4.6 单重分支结构
--单重分支结构
-4.7 多重分支结构
--多重分支结构
-4.8 单重循环结构
--单重循环结构
-4.9 计数控制循环程序
--计数控制循环程序
-4.10 特征控制循环程序
-- 特征控制循环程序
-4.11 多重循环程序
--多重循环程序
-4.12 子程序的概念
--子程序的概念
-4.13 子程序设计注意事项
-4.14 子程序举例
--子程序举例
-4.15 第四单元作业
-5.1 系统扩展
--系统扩展
-5.2 51单片机扩展方法
-5.3 存储器单元位数扩充方法
-5.4 存储器容量单元扩充方法
-5.5 译码线选法
--译码线选法
-5.6 程序存储器的类型
--程序存储器的类型
-5.7 程序存储器的扩展
--程序存储器的扩展
-5.8 数据存储器的扩展
--数据存储器的扩展
-5.9 存储器综合扩展
--存储器综合扩展
-5.10 单片机存储器系统的特点
-- 单片机存储器系统的特点
-5.11 第五单元作业
-6.1 中断技术
--中断技术
-6.2 中断优先级及中断系统内部结构
-6.3 中断控制寄存器及中断响应过程
-6.4 中断请求的撤消
--中断请求的撤消
-6.5 外部中断举例
--外部中断举例
-6.6 定时器/计数器
--定时器/计数器
-6.7 定时计数器工作方式及程序编写
-6.8 定时器举例
--定时器举例
-6.9 第六单元作业
-7.1 并行接口
-- 并行接口
-7.2 并口举例
--并口举例
-7.3 并口扩展芯片
--并口扩展芯片
-7.4 8155连接方式及编程
-7.5 键盘接口技术
--键盘接口技术
-7.6 按键处理程序及举例
-7.7 键盘扫描子程序
-- 键盘扫描子程序
-7.8 显示接口技术
--显示接口技术
-7.9 多位字符静态显示
--多位字符静态显示
-7.10 多位字符动态显示
--多位字符动态显示
-7.11 第七单元作业
-8.1 流水灯控制系统设计
--html
-8.2 数码管显示系统设计
--html
-8.3 按键控制系统设计
--html
-8.4 中断控制系统设计
--html
-8.5 定时计数器系统设计
--html
-8.6 串口通信系统设计
--html
-8.7 汉字显示系统设计
--html
-8.8 单片机烧录方法
--单片机烧录方法
-8.9 第八章作业-作业







