在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。那么你对时钟中断了解多少呢?以下是由学习啦小编整理关于什么是时钟中断的内容,希望大家喜欢!

时钟中断的电路

一种时钟中断检测电路,包括:对输入时钟以不同分度值进行分频并输出多个分频时钟的分频器电路;对输入时钟和多个分频时钟进行“与”操作的“与”电路;将具有最大分度值的分频时钟反相的反相器;对输入时钟中其余分频时钟和反相器输出进行“与”操作的“与”电路;第一和第二开关,具有被提供以各个“与”电路输出的控制端,控制第一和第二电容器放电路径的开/关;第一和第二波形形成缓冲器电路,被提供以第一和第二电容器的端电压;根据延迟电路中使反相器输出延迟预定时间长度所得的选择控制信号选择第一和第二波形形成缓冲器电路的一个输出的选择电路。其通过单输入时钟系统使时钟中断能被检测,集成更容易,并使时钟中断时间能精确地检测。

时钟中断的举例

定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,20mS中有10000个机器周期。(10000)10=(2710)16,则0FFFFh-2710h+1=0D8F0h。由于响应中断、保护现场及重装初值还需要7~8个机器周期,把这个值再加上7,即T0应装入的初值是0D8F7h。每次中断进入后,先把A及PSW的值压入堆栈,然后即把0D8F7h装入T0。

设置一个单元,每次中断加1 我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INC INCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得20mS的1~256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DISP,用/MOV A,INCPI/ADD A,#25/MOV W_DISP,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DISP再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。

在中断中读键 通常,我们在主程序中读键盘,步骤为:扫描键盘,若有键按下,则延时几十毫秒去抖动,再次确认此键确实按下,然后处理该键对应的工作,完成后再次重上述步骤。但这有两点不足:1.处理相应工作时无法锁存按键的输入,即可能漏键。2.延时去抖时CPU无法做其它事情,效率不高。如果把读键放入时钟中断中,则可避免上述不足。方法为:如果两次相邻的中断中都读到同一个键按下,则这个键是有效的(达到了去抖目的),并将其锁存到先入先出(队列)的键盘缓冲区,等主程序来处理。这样,主程序处理按键的同时,仍可响应键盘的输入。缓冲区深度通常可设为8级,若锁存的键数多于8个,则忽略新的按键,并报警提示用户新的按键将无效。若键盘缓冲队列停滞的时间大大长于主程序处理按键所需要的最大时间,说明主程序已出错或跑飞,可以在中断用指令将系统复位,起到了看门狗的目的。

主程序中的延时 由于有常开的时钟中断,所以当主程序中有需要时间较短、精度较高的延时时,应暂时把时钟中断关闭。而程序中需要时间较长、精度不高的延时时,便可仿照下需的写法,避免多层嵌套的循环延时。

例:在P1.1输出1秒的高电平脉冲

MOV A,INCPI

INC A

CJNE A,INCPI$ ;等待一次中断处理完成

SETB P1.1 ;设P1.1为H,脉冲开始

ADD A,#50 ;50个20mS为1秒

CJNE A,INCPI,$ ;等中断将INCPI加一50次

CLR P1.1 ;设P1.1为L,脉冲结束

下面用MCS-51为例:

MCS-51的中断响应过程:

1、中断响应的条件:讲到这儿,我们依然对于计算机响应中断感到神奇,我们人可以响应外界的事件,是因为我们有多种“传感器“――眼、耳可以接受不同的信息,计算机是如何做到这点的呢?其实说穿了,一点都不希奇,MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。。。。很蠢,不是吗?可计算机本来就是这样,它根本没人聪明。

了解了上述中断的过程,就不难解中断响应的条件了。在下列三种情况之一时,CPU将封锁对中断的响应:

CPU正在处理一个同级或更高级别的中断请求。 现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。

当前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才可以响应中断。

2、中断响应过程

CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将相应的中断入口地址送入PC,PC是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。这些工作都是由硬件来完成的,不必我们去考虑。这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003-000B,在如此少的空间中如何完成中断程序呢?很简单,你在中断处安排一个LJMP指令,不就可以把中断程序跳转到任何地方了吗?

一个完整的主程序看起来应该是这样的:

ORG 0000H

LJMP START

ORG 0003H

LJMP INT0 ;转外中断0

ORG 000BH

RETI ;没有用定时器0中断,在此放一条RETI,万一 “不小心“产生了中断,也不会有太大的后果。

中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。注意:CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们,还要保证回到主程序后这里面的数据还是没执行中断以前的数据,就得自己保护起来。

时钟中断的评价

要灵活地应用时钟中断,将任务合理分配给中断和主程序,并且二者要分工明确,接口简单。这其中的技巧还需要大家在实践中多多摸索与体会。另外要注意:应尽量缩短中断处理程序的执行时间,更不要长于20mS。

看过“时钟中断的举例”的人还看了:

计算机系统时钟中断,什么是时钟中断时钟中断的举例相关推荐

  1. Linux之时钟中断

    from:深入分析Linux内核源码(http://oss.org.cn/kernel-book/) 时钟中断的产生 Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入 ...

  2. (62)时钟中断切换线程,时间片管理, KiDispatchInterrupt

    一.回顾 前面的课程,我们分析了API主动切换线程的流程,分析了 KiSwapContext 和 SwapContext 函数,这两个是切换线程的函数.分析了 KiSwapThread 函数,功能是找 ...

  3. Linux 时钟中断详解

    在Linux的0号中断是一个定时器中断.在固定的时间间隔都发生一次中断,也是说每秒发生该中断的频率都是固定的.该频率是常量HZ,该值一般是在100 ~ 1000之间.该中断的作用是为了定时更新系统日期 ...

  4. java时钟中断_Linux之时钟中断详解

    在Linux的0号中断是一个定时器中断.在固定的时间间隔都发生一次中断,也是说每秒发生该中断的频率都是固定的.该频率是常量HZ,该值一般是在100 ~ 1000之间.该中断的作用是为了定时更新系统日期 ...

  5. 深入理解计算机系统:计算机系统概述

    文章目录 C语言程序举例 为什么要学习计算机系统 冯诺依曼结构的主要思想 现代计算机结构模型 从机器语言到高级语言编程 程序的开发和执行及其支撑环境 编程语言和计算机系统层次 课程介绍 C语言程序举例 ...

  6. 某计算机系统中 时钟中断处理程序,2017年北京语言大学计算机系统结构839计算机系统与设计之计算机操作系统考研题库...

    一.选择题 1. 下面有关选择进程调度算法的准则错误的是( ). A. 尽量提高处理器利用率 B. 尽可能提尚系统吞吐量 C. 适当增长进程在就绪队列中的等待时间 D. 尽快响应交互式用户的请求 [答 ...

  7. 微型计算机原理与接口技术(无指令)

    目录 第一章微型计算机基础 第一节 数制 第二节 计算机系统的基本组成 一.计算机系统组成 二.微型机的硬件结构 三.微型计算机的存储器 四.基本属于读.写 五.微型计算机的基本工作过程 第三节 存储 ...

  8. 深入分析Linux内核源码oss.org.cn/kernel-book/

    本html页面地址:http://oss.org.cn/kernel-book/ 深入分析Linux内核源码 前言         第一章 走进linux 1.1 GNU与Linux的成长 1.2 L ...

  9. linux HZ Tick Jiffies

    1.linux HZ Linux核心几个重要跟时间有关的名词或变数,底下将介绍HZ.tick与jiffies. HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),H ...

  10. 【操作系统篇】第五篇——调度(概念,层次,调度时机,切换与过程,方式,评价指标)

    ​基本概念 ​三个层次 ​高级调度(作业调度) ​中级调度(内存调度) ​低级调度(进程调度) ​三层调度的联系,对比 ​补充知识 ​进程的"挂起态"与七状态模型 ​时机 ​什么时 ...

最新文章

  1. 美媒全球大学排名:清华超麻理跃居计算机专业第一
  2. 华中科技大学通报:取消张某某研究生导师资格,调离教师岗位,停止其教师资格...
  3. 宿主机訪问virtualBox中Ubuntu
  4. linux 读写设备文件,linux-中块设备文件及字符设备文件的本质区别
  5. C++智能指针简单剖析
  6. 第二百七十五节,MySQL数据库安装和介绍
  7. php输出pre自动换行,解决 html pre 标签的内容自动换行的问题
  8. 水晶报表工具栏出现红叉叉无法打印导出等问题的解决方法
  9. java表达式1 2_Aviator 2.1.1 发布,Java表达式引擎
  10. 雷军晒3亿估值,意欲“收编”台湾硬件创业者?
  11. 2019写给对象的话_恋爱中写给对象看的说说 2019最流行的情侣间情话
  12. 在 Google 工作是什么体验?
  13. Spring AOP/DI/IOC 简述及使用
  14. hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】...
  15. Linux之mmap
  16. React 预览图片 视频 音频_HDMI录制盒斗鱼虎牙高清视频游戏直播器1080监控switch/ps4采集卡...
  17. 前端随心记---------WebSocket
  18. 华为推送服务(Push)
  19. 《大数据之路:阿里巴巴大数据实践》-第4篇 数据应用篇 -第16章 数据应用
  20. html显示隐藏表格内外边框

热门文章

  1. DNS服务器解析偶尔失败
  2. 微信小程序开发VIP商城项目
  3. 温习2021年 Java 面试题汇总【100题】
  4. WORD两个表格合并为一个表格(删除两个表格之间多余的空格)
  5. C300 之SFU设备配置指导
  6. 关于Pascal和二项式系数
  7. 周末闲暇用javascript写个网页“斗兽棋”小游戏
  8. Python必学的OS模块详解
  9. 关于int.prase的一些解析
  10. 用matlab表白,用函数表达对她的爱