定时计数器与中断系统.ppt

上传人:tia****nde 文档编号:8832118 上传时间:2020-04-01 格式:PPT 页数:51 大小:1.11MB
返回 下载 相关 举报
定时计数器与中断系统.ppt_第1页
第1页 / 共51页
定时计数器与中断系统.ppt_第2页
第2页 / 共51页
定时计数器与中断系统.ppt_第3页
第3页 / 共51页
点击查看更多>>
资源描述
第四章定时 计数器与中断系统中断系统结构中断系统相关寄存器配置应用程序设计外部中断源扩展定时 计数器的工作方式特点定时 计数器的控制寄存器定时 计数器应用程序设计 中断系统基本概念 中断 中断源 中断优先级 中断嵌套 4 1中断系统结构 2 中断响应过程 3 MCS 51的中断系统结构示意图 MCS 51中有5个中断源 包括两个外部中断源和三个内部中断源 52系列增加了一个中断源 定时器 计数器T2 即有6个中断源 两个外部中断源INT0和INT1 外部设备的中断请求信号 掉电等故障信号都可以从INT0或INT1引脚输入 三个内部中断源为定时 计数器T0和T1溢出中断以及串行口中断 5 2 1中断源 4 中断源 1 外部中断外部中断是由外部信号引起的 共有两个外部中断 它们的中断请求信号分别从引脚INT0 P3 2 和INT1 P3 3 上引入 外部中断请求有两种信号触发方式 即电平触发方式和跳变触发方式 可通过设置有关控制位进行定义 当设定为电平有效方式时 若INT0或INT1引脚上采样到有效的低电平 则向CPU提出中断请求 当设定为跳变有效方式时 若INT0或INT1引脚上采样到有效负跳变 则向CPU提出中断请求 5 中断入口地址 4 2中断控制寄存器 1 定时器 计数器控制寄存器TCON IT0 TCON 0 外部中断0触发方式控制位 IT0 0时 低电平有效 当IT0 1时 下降沿有效 IT1 TCON 2 外部中断1触发方式控制位 IT1 0时 低电平有效 当IT1 1时 下降沿有效 TF1 TCON 7 T1溢出标志位 由硬件置位 响应中断时由硬件清0 不用中断时用软件清0 TF0 TCON 5 T0溢出标志位 由硬件置位 响应中断时由硬件清0 不用中断时用软件清0 IE1 TCON 3 IE1 1时 外部中断1中断标志位 IE0 TCON l IE0 1时 外部中断0中断标志位 2 中断允许控制寄存器IE IE寄存器中各位设置 为0时 禁止中断 为1时 允许中断 系统复位后IE寄存器中各位均为0 此时禁止所有中断 与中断有关的控制位共6位 即 EX0 IE 0 外部中断0中断允许位 ET0 IE 1 T0中断允许位 EX1 IE 2 外部中断1中断允许位 ET1 IE 3 T1中断允许位 ES IE 4 串行口中断允许位 EA IE 7 CPU中断允许位 当EA 1 允许所有中断开放 此时各中断的允许或禁止由各中断源的中断允许控制位进行设置 当EA 0时 屏蔽所有中断 IP寄存器中各位设置 为0时 为低中断优先级 为1时 设为高中断优先级 系统复位后IP寄存器中各位均为0 即此时全部设定为低中断优先级 3 中断优先级控制寄存器IP 在同一优先级内有一个由内部查询序列确定的笫二个优先级结构 其排列如下 中断源中断优先级 外部中断0最高 定时器T0中断 外部中断1 定时器T1中断 串行口中断最低 51单片机共有5个中断源 由4个特殊功能寄存器TCON SCON IE和IP进行管理和控制 在中断应用程序设计中 需要对以下几个内容进行设置 中断服务程序入口地址的设定 某一中断源中断请求的允许与禁止 对于外部中断请求 还需进行触发方式的设定 各中断源优先级别的设定 4 3中断服务程序的设计 中断响应很突出的一点是它的随机性 因此中断服务程序中常常要考虑以下几点 保护断点和现场 恢复断点和现场在中断响应过程中 断点的保护主要由硬件电路自动实现 它将断点压入堆栈 再将中断服务程序的入口地址送入程序计数器PC 使程序转向中断服务程序 即为中断源的请求服务 所谓现场是指中断发生时单片机中存储单元 工作寄存器 特殊功能寄存器中的数据或标志位等 一般包括累加器A 工作寄存器R0 R7以及程序状态字PSW等 保护的方法可以有以下几种 通过堆栈操作指令PUSHdirect 通过切换工作寄存器组 通过单片机内部存储器单元暂存 在结束中断服务程序返回断点处之前要恢复现场 与保护现场的方法相对应 而恢复断点也是由硬件电路自动实现的 中断服务程序的最后一条指令必须是RETI指令 利用定时 计数器扩展外部中断源定时加查询方式扩展外部中断源 4 4外部中断源的扩展 利用T0或T1的外部事件输入引脚T0 T1作为边沿触发的外部中断源 这时应设置定时 计数器为计数器方式 而计数常数为满刻度值 外部输入的脉冲在负跳变时有效 计数器加1后即溢出 向CPU申请中断 定时 计数器扩展外部中断源 外部中断源的扩展电路 中断加查询扩展外部中断源 外部中断源查询流程图 INT0的中断服务程序如下 PINTO PUSHPSW 保护现场PUSHACCJBP1 0 LOOP1 转向中断服务程序1JBP1 l LOOP2 转向中断服务程序2JBP1 2 LOOP3 转向中断服务程序3JBP1 3 LOOP4 转向中断服务程序4 INTEND POPACC 恢复现场POPPSWRETILOOP1 中断服务程序1AJMPINTENDLOOP2 中断服务程序2AJMPINTENDLOOP3 中断服务程序3AJMPINTENDLOOP4 中断服务程序4AJMPINTEND 外部中断应用举例 中断控制1盏灯闪烁 4 5定时 计数器结构和工作原理 本质是一致的 都是相当于加法计数器 来一个有效信号 计数单元自动加1 加满后溢出引发中断 计数源不一样 定时器模式下 T0 T1对系统内部时钟计数 即启动T0 T1后 每过一个机器周期 计数单元自动加1 计数器模式下 T0 T1对外部引脚 P3 4 P3 5 信号计数 启动T0 T1后 每次检测到引脚上有一个下降沿信号 计数单元自动加1 51单片机内部有两个定时 计数器T0 T1 既可以工作在定时器模式 也可以工作在计数器模式 定时器 计数器区别与联系 6 2定时器 计数器的控制寄存器1 定时器控制寄存器 TCON TCON寄存器有关定时的控制位共有4位 TF0和TF1 计数溢出标志位 当计数器计数溢出 计满 时 该位置1 使用查询方式时 此位作状态位供查询 但应注意查询有效后应以软件方法及时将该位清0 使用中断方式时 此位作中断标志位 在转向中断服务程序时由硬件自动清0 TR0和TR1 定时器运行控制位 当TR0 TR1 0 停止定时器 计数器工作 TR0 TR1 1 启动定时器 计数器工作 该位根据需要以软件方法使其置1或清0 2 工作方式控制寄存器 TMOD TMOD用于设定定时器 计数器的工作方式 不能位寻址 它的低4位定义T0 高4位定义T1 GATE 门控位 GATE 0时 以运行控制位TRx 1启动定时器 GATE 1 且TRx 1时 以外中断请求信号启动定时器 工作模式选择位 0 定时器模式 1 计数器模式 M1M0 工作方式选择位 其对应关系如表6 1所示 表6 1定时器 计数器工作方式选择 3 中断允许控制寄存器 IE 与定时器 计数器有关的位是 EA ET0 ET1 EA 中断允许总控制位 ET0和ET1 定时 计数中断允许控制位 ET0 ET1 0 禁止定时 或计数 中断 ET0 ET1 1 允许定时 或计数 中断 方式0 几乎不用方式1 重点掌握方式2 重点掌握方式3 很少用 6 3定时 计数器工作方式 1 方式0方式0下的电路逻辑结构如图6 2所示 以T0为例 内部计数器是13位 由TH0的8位和TL0的低5位构成 当TL0低5位计数溢出时向TH0进位 TH0计数满时则将TF0置1 如图所示 当 0时 多路开关接通振荡脉冲的12分频输出 为定时工作方式 当 l时 多路开关接通计数引脚 TO 外部计数脉冲由引脚TO输入 为计数工作方式 当GATE 0时 由TR0控制计数器的接通与断开 TR0 T0工作 TR0 0 T0停止工作 当GATE 1 且TR0 1时 由INTO控制计数器的接通与断开 INT0 1 T0工作 INT0 0 T0停止工作 当为计数工作方式时 计数值的范围是 1 213当为定时工作方式时 定时时间的计算公式为 213 计数初值 晶振周期 振荡周期 12或 213 计数初值 机器周期 2 方式1方式1是16位计数结构的工作方式 与方式0的区别仅在于计数器的位数不同 由TH0的8位和TL0的8位构成 如图6 3所示 当为计数工作方式时 计数值的范围是 1 216当为定时工作方式时 定时时间的计算公式为 216 计数初值 晶振周期 12或 216 计数初值 机器周期 3 方式2方式2具有自动重新加载计数初值的8位计数器 即以TL作计数器 TH作预置寄存器 初始化时把计数初值分别装入TL和TH中 当计数溢出后 置TF为1的同时 由TH自动给TL重新加载 这样 可以省去在程序中重装常数的操作 但方式3计数位数少 计数范围小 最大只能到255 如图6 4所示 当为计数工作方式时 计数值的范围是 1 28当为定时工作方式时 定时时间的计算公式为 28 计数初值 晶振周期 12或 2n 计数初值 机器周期 4 方式3在工作方式3下 T0拆成两个独立的8位计数器TL0和TH0 TL0使用T0的各控制位和引脚信号 其工作情况与方式0或方式1完全相同 而TH0只能作为简单的定时器使用 借用TR1作为运行控制位 计数溢出置位TF1 如果T0已工作在工作方式3 则T1只能工作在方式0 方式l或方式2下 因为TR1 TF1已被T0借用 T1没有运行控制和溢出中断功能 此时定时器T1仅由控制位切换其定时或计数功能 当计数器计数满溢出时 只能将输出送往串行口 所以 T1常作为串行口的波特率发生器使用 或不需要中断的场合 因定时器1的TR1被占用 因此其启动和关闭较为特殊 当设置好工作方式时 定时器1即自动开始运行 若要停止操作 只需送入一个设置定时器1为方式3的方式字即可 工作方式3 5 位 T0工作于方式3时T1工作于方式0的功能框图 6 4定时 计数器应用举例MCS 51的定时器 计数器是可编程的 因此 在利用定时器 计数器进行定时或者计数之前 首先要通过软件对它进行初始化 初始化包括下述几个步骤 1 配置定时 计数器工作方式 TMOD 2 计数单元赋初值 THx TLx 3 是否开中断 EA ETx 4 启动定时 计数器 TRx 一 确定工作模式 工作方式 计算初始值 定时器模式 t 定时时间Tc 机器周期TC 定时 计数器初始值Fosc 晶体振荡器频率L 计数单元的长度 计数器模式 S 2L TC S 脉冲信号计数值L 计数单元的长度TC 计数单元初始值 二 初始化定时 计数器 三 设计程序流程图 四 编程实现 调试 例6 1 电路如图所示 编程实现单片机控制8盏灯循环闪烁 每盏灯点亮时间为50ms 系统晶振为12MHz ORG0000HAJMPSTART 跳转到程序开始处ORG0030HSTART MOVSP 68H 堆栈指针上移MOVP2 0FFH 初始化 LED全灭MOVA 0FEH 初始化 累加器A保存LED状态信息MOVTMOD 10H 设置T1工作在定时模式 方式1MOVTH1 3CH 定时器计数单元赋初值MOVTL1 0B0HSETBTR1 启动定时器LED LOOP JNBTF1 定时时间没有到 继续等待CLRTF1 手动清除中断标志位MOVP2 A 改变LED状态RLA 循环左移一位MOVTH1 3CHMOVTL1 0B0HSJMPLED LOOPEND 中断方式 程序代码如下 ORG0000HAJMPSTART 跳转到程序开始处ORG001BHAJMPINT T1 跳转到定时中断1处理程序处ORG0030HSTART MOVSP 68H 堆栈指针上移MOVP2 0FFH 初始化 LED全灭MOVA 0FEH 初始化 累加器A保存LED状态信息MOVTMOD 10H 设置T1工作在定时模式 方式1MOVTH1 3CH 定时器计数单元赋初值MOVTL1 0B0HSETBTR1 启动定时器SETBEA 开总中断SETBET1 开定时中断T1SJMP 等待中断INT T0 PUSHPSW 本次需要利用累加器A传递LED状态 故不必将A的内容压入堆栈MOVTH1 3CH 重新赋初值MOVTL1 0B0HMOVP2 A 改变LED状态RLA 循环左移一位POPPSWRETIEND 例6 2 电路如图所示 系统晶振为12MHz 程序控制8盏灯轮流点亮 但要求看起来8盏灯同时点亮 分析 人眼的视觉停留时间大约20ms左右 要想8盏灯轮流点亮而看起来一齐亮 则每盏灯第一次点亮和第二次点亮的时间间隔不能超过20ms 不妨设计为每盏灯点亮200us 然后依次循环 则每盏灯中途熄灭的时间间隔大约1 4ms 远远小于人眼视觉停留时间 这样人眼将不会分辨出灯曾经熄灭过 从而达到看起来一齐亮的效果 这一设计思路在数码管动态扫描显示中常常用到 选择定时器T1 短时间定时采用方式2 定时200us 初始值计算 TC 2L t Fosc 12 28 200 10 6 12 106 12 56 38H 中断方式程序代码如下 ORG0000HAJMPSTART 跳转到程序开始处ORG001BHAJMPINT T1 跳转到定时中断1处理程序处ORG0030HSTART MOVSP 68H 堆栈指针上移MOVP2 0FFH 初始化 LED全灭MOVA 0FEH 初始化 累加器A保存LED状态信息MOVTMOD 20H 设置T1工作在定时模式 方式2MOVTH1 38H 定时器计数单元赋初值MOVTL1 38HSETBTR1 启动定时器SETBEA 开总中断SETBET1 开定时中断T1SJMP 等待中断INT T0 PUSHPSWMOVP2 A 改变LED状态RLA 循环左移一位POPPSWRETIEND 例6 3 系统晶振为12MHz 利用定时器T0的工作方式1实现P1 0管脚输出周期为2s的方波 分析 在晶振为12MHz时 方式1最大能实现的定时时间为216 1us 65536us 要使P1 0输出周期为2s的方波 定时时间为1s 对于类似的长时间定时要求 可以采用基准定时加循环的方法 比如要求定时1s 选择T0的方式1 基准定时50ms 循环20次即为1s ORG0000HAJMPSTART 跳转到程序开始处ORG000BHAJMPINT T0 跳转到定时中断0处理程序处ORG0030HSTART MOVSP 68HSETBP1 0 初始化P1 0MOVR7 20 循环次数赋初值MOVTMOD 01H 设置T0工作在定时模式 方式1MOVTH0 3CH 定时器计数单元赋初值MOVTL0 0B0HSETBTR0 启动定时器SETBEA 开总中断SETBET0 开定时中断T0SJMP 中断服务程序 INT T0 PUSHACCPUSHPSWMOVTH0 3CH 重新赋初值MOVTL0 0B0HDJNZR7 EXIT 未到1s 退出中断MOVR7 20 循环次数重新赋初值CPLP1 0 1s定时时间到 改变P1 0状态EXIT POPPSWPOPACCRETIEND
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!