0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于AT89C51系统时钟中断的应用

电子工程师 来源:网络整理 作者:工程师姚远香 2018-07-21 11:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

功能强大的时钟中断

单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。

下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。

定时器初值与中断周期时钟中断无需过于频繁,一般取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初值后,用INCINCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得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,脉冲结束

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 时钟
    +关注

    关注

    11

    文章

    1953

    浏览量

    134548
  • 中断
    +关注

    关注

    5

    文章

    913

    浏览量

    43565
  • AT89C51
    +关注

    关注

    27

    文章

    543

    浏览量

    82897
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    安徽京准:NTP电子时钟系统 子母钟系统 成果展示#

    时钟系统
    ahjzdz
    发布于 :2025年11月26日 10:55:27

    停车的时长准不准?铁路时钟系统、铁路时钟、铁路授时

    时钟系统
    西安同步电子科技有限公司
    发布于 :2025年11月12日 17:41:04

    铁路时钟系统介绍、时钟系统、授时服务器

    时钟系统
    西安同步电子科技有限公司
    发布于 :2025年11月12日 17:39:23

    LMK5C33216 超低抖动时钟同步器

    该LMK5C33216是一款高性能网络时钟发生器、同步器和抖动衰减器,具有先进的参考时钟选择和无中断开关功能,旨在满足通信基础设施应用的严格要求。 该LMK5
    的头像 发表于 09-11 17:19 743次阅读
    LMK5<b class='flag-5'>C</b>33216 超低抖动<b class='flag-5'>时钟</b>同步器

    请问系统时钟源可以从 MS51 系列的外部晶体 (HXT) 中选择吗?

    系统时钟源可以从 MS51 系列的外部晶体 (HXT) 中选择吗?
    发表于 08-25 06:29

    AT89C51 单片机中文资料

    电子发烧友网站提供《AT89C51 单片机中文资料.pdf》资料免费下载
    发表于 06-24 15:29 1次下载

    三相反应式步进电机智能控制系统设计

    方案采用AT89C51单片机内部定时器改变 CP脉冲的频率,从而实现对电机转速进行控制。经过理论及试验研究,该系统实现了步进电机调速与正反转的控制功能,能够在较宽频率范围内实现三相反应式步进电机转逸调节
    发表于 06-13 09:31

    时钟系统推荐,时钟系统哪家好?赛思时钟系统助力中国气象科学研究院构建智慧气象网络

    时钟系统推荐,时钟系统哪家好?赛思时钟系统助力中国气象科学研究院构建智慧气象网络
    的头像 发表于 05-20 09:32 698次阅读
    <b class='flag-5'>时钟</b><b class='flag-5'>系统</b>推荐,<b class='flag-5'>时钟</b><b class='flag-5'>系统</b>哪家好?赛思<b class='flag-5'>时钟</b><b class='flag-5'>系统</b>助力中国气象科学研究院构建智慧气象网络

    51单片机C语言学习笔记

    c51语言快速入门
    发表于 03-24 14:04 3次下载

    DS12C887实时时钟技术手册

    DS12885、DS12887和DS12C887实时时钟(RTC)可用来直接替代DS1285和DS1287。该器件提供一个实时时钟/日历、定时闹钟、三个可屏蔽中断(共用一个
    的头像 发表于 02-27 11:34 1141次阅读
    DS12<b class='flag-5'>C</b>887实时<b class='flag-5'>时钟</b>技术手册

    EE-188:使用C语言在ADSP-219x DSP上实现中断驱动系统

    电子发烧友网站提供《EE-188:使用C语言在ADSP-219x DSP上实现中断驱动系统.pdf》资料免费下载
    发表于 01-15 16:06 0次下载
    EE-188:使用<b class='flag-5'>C</b>语言在ADSP-219x DSP上实现<b class='flag-5'>中断</b>驱动<b class='flag-5'>系统</b>

    AI80C51U倒计时

    AI80C51U倒计时
    的头像 发表于 01-10 11:41 795次阅读

    EE-192:使用C语言在Blackfin处理器上创建中断驱动系统

    电子发烧友网站提供《EE-192:使用C语言在Blackfin处理器上创建中断驱动系统.pdf》资料免费下载
    发表于 01-03 15:03 0次下载
    EE-192:使用<b class='flag-5'>C</b>语言在Blackfin处理器上创建<b class='flag-5'>中断</b>驱动<b class='flag-5'>系统</b>

    STC89C51是不是不可以通过串口读取ADS1118的数据,因为单片机是8位的?

    STC89C51是不是不可以通过串口读取ADS1118的数据,因为单片机是8位的?
    发表于 12-20 06:11