单片机教程练习9 定时器实验1

发布于:2024-07-17 编辑:匿名 来源:网络

1.使用定时器来实现灯光的闪烁。

当我们学习微控制器时,我们的第一个例子是灯光的闪烁。

这是通过延迟程序完成的。

现在回想起来,这并不是很实用。

合适,为什么?我们的主程序就闪灯了,不能再做其他事情了。

这是微控制器工作的唯一方式吗?当然不是,我们可以使用定时器来实现灯的闪烁功能。

? / 计数器 0 工作模式为 1   MOV TH0, #15H   MOV TL0, #0A0H;计数  SETB TR0;定时器/计数器0开始运行   LOOP:JBC TF0,NEXT;如果 TF0 等于 1,则清除 TF0 并转到 NEXT    AJMP LOOP;否则跳到LOOP并运行    NEXT:CPL P1.0   MOV TH0,#15H   MOV TL0,#9FH;重复设置定时器/计数器的初始值   AJMP LOOP    END AJMP LOOP   END   输入程序,你看到什么?灯在闪烁。

这是通过定时器完成的,不再是主程序的循环。

简单分析一下程序,为什么要用JBC? TF0 是定时器/计数器 0 的溢出标志位。

当定时器溢出时,该位由 0 变为 1,因此通过查询该位可以知道时间是否已到。

该位设置为 1 后,必须用软件将该标志位清零,以便在下一个定时器到期时该位由 0 变为 1。

因此,使用JBC指令。

当判断该位转为1时,该位??也会转为1。

清除为0。

  上面的程序可以实现灯的闪烁,但是主程序除了闪烁之外仍然不能做其他事情。

光!不,这是不对的,我们可以在LOOP:...和AJMP LOOP指令之间插入一些指令来做其他事情,只要这些指令的执行时间小于预定的时间即可。

那么我们在使用软件延时程序的时候,是不是也可以使用一些指令来代替DJNZ呢?是的,但是这需要你精确计算所使用的指令的时间,然后减去相应的DJNZ周期数,这是非常不方便的。

现在只要求所用指令的时间小于计时时间,显然偏低了。

当然这种方法还是不好,所以我们经常使用下面的方法来实现。

  程序2:使用中断实现   ORG H   AJMP START   ORG BH ;定时器0的中断向量地址   AJMP TIME0 ;跳转到实时程序   ORG 30H   START:   MOV P1,#0FFH ;关灯   MOV TMOD,#B ;定时器/计数器0工作在模式1   MOV TH0,#15H   MOV TL0,#0A0H ;即  SETB EA ;打开总中断使能   SETB ET0 ;打开定时器/计数器0使能   SETB TR0 ;定时/计数器0开始运行   LOOP: AJMP LOOP ;真正工作时,可以在这里编写任何程序   TIME0: ;定时器0的中断处理程序   PUSH ACC   PUSH PSW ;推送PSW和ACC堆栈保护    CPL P1.0   MOV TH0,#15H   MOV TL0,#0A0H ;复位定时常数   POP PSW   POP ACC   RETI   END  在上面的例子,一旦定时时间到了,TF0由0变为1,就会触发中断。

CPU会自动去B地址寻找程序并执行。

由于留给定时器中断的空间只剩下8个字节,显然是不够写所有的中断处理程序的,所以在B处安排了一条跳转指令,去到真正处理中断的程序中。

这样,中断程序就可以写在任何地方、任意长度。

进入定时中断后,首先要保存当前的一些状态。

该程序仅演示保存 ACC 和 PSW。

实际工作中,应该根据需要将可能发生变化的单位的值压入堆栈进行保护(实际上本程序中不需要保存任何值,这只是为了演示)。

  运行以上两个程序后,我们发现灯闪烁的速度非常快,根本无法区分。

我们只是在视觉上感觉到光线有点晃动。

为什么?我们可以计算出定时器中预设的数字是,所以每计数到0个脉冲,计时时间就到了。

这些 0 脉冲的时间是多少?我们的晶振是12M的,所以是0微秒,也就是60毫秒,所以速度很快。

如果我想实现1S定时该怎么办?在此晶振失效率下,最长计时为65毫秒!上面给出了一个例子。

   ORG H   AJMP START   ORG BH ;定时器0的中断向量地址    AJMP TIME0 ;跳转到实时定时器程序    ORG 30H   START:   MOV P1, #0FFH;关闭所有灯   MOV 30H,#00H;预清除软件计数器至0   MOV TMOD,#B ;定时器/计数器 0 工作在模式 1   MOV TH0,#3CH   MOV TL0,#0B0H ;即计数 6   SETB EA ;使能总中断使能   SETB ET0;打开定时器/计数器 0 并允许    SETB TR0 ;定时器/计数器 0 开始运行   LOOP: AJMP LOOP ;实际工作时,可以在这里编写任何程序   TIME0: ;定时器 0 中断处理程序   PUSH ACC   PUSH PSW ;将 PSW 和 ACC 推入堆栈保护    INC 30H   MOV A,30H   CJNE A,#20,T_RET ;30H 单元的值是否已达到 20? ?设置时序常数   POP PSW   POP ACC   RETI   END  先自己分析一下,看看它是如何实现的?这里用到了软件计数器的概念。

想法如下。

首先使用定时器/计数器0制作一个50毫秒的定时器。

定时器超时后,P10 并不立即反转,而是将软件计数器中的值加 1。

如果软件计数器达到 20,则将 P10 反转并清除软件计数器中的值。

单片机教程练习9 定时器实验1

否则直接返回。

这样,在将P10反转一次之前就变成了20个定时中断,因此计时时间延长到20 *50毫秒。

  这个想法在工程中非常有用。

有时我们需要多个定时器,但51个定时器中只有2个,怎么办?其实只要这些计时时间有一定的公分母,我们就可以使用软件定时器来实现。

比如我想实现P10口连接的灯每次按下1S,P11口连接的灯按下2S每次闪烁。

,如何实现呢?顺便说一句,我们使用两个计数器。

当数到 20 时,它会将 P10 反转并将其清零,如上所示。

当另一个数到40时,它反转P11,然后将其清除为0。

这还不够吗?该部分程序如下:   ORG H   AJMP START   ORG BH;定时器0的中断向量地址   AJMP TIME0;跳转到实时计时器程序    ORG 30H ? MOV TH0,#3CH   MOV TL0,#0B0H ;即6   SETB EA ;开启总中断使能   SETB ET0 ;开启定时器/计数器0使能   SETB TR0 ;启动定时器/计数器0运行    LOOP: AJMP LOOP ;实际工作时,可以在这里编写任何程序   TIME0:;定时器0的中断处理程序   PUSH ACC   PUSH PSW;将PSW和ACC推入堆栈保护   INC 30H   INC 31H;两个计数器都加1    MOV A,30H   CJNE A,#20,T_NEXT ;30H 单元的值是否达到 20?   T_L1: CPL P1.0 ;到达,反转 P10   MOV 30H,#0 ;清除软件计数器   T_NEXT:   MOV A,31H   CJNE A,#40,T_RET ;31h 单元中的值是否已达到 40?    T_L2:   CPL P1.1   MOV 31H,#0;到达后,将 P11 取反,清零计数器,返回    T_RET:    MOV TH0,#15H   MOV TL0,#9FH ;重置定时常数   POP PSW   POP ACC   RETI   END  可以用定时器的方法来实现前面提到的流水灯吗?试一试。

单片机教程练习9 定时器实验1

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 亚信安全科创板IPO真的安全吗?

    亚信安全科创板IPO真的安全吗?

    亚信安全技术股份有限公司(以下简称“亚信安全”)科创板IPO已获上交所受理。 公司拟发行不超过10,000股,本次发行后将不少于公司总股本的10%。 亚信安全实际控制人涉及诉讼,客户集中度高,库存周转率低于同行业可比公司平均水平。 听,中小企业反馈平台。 倾听用户需求,倾

    06-17

  • 特种机器人公司“启腾科技”完成数千万元融资

    特种机器人公司“启腾科技”完成数千万元融资

    据投资界3月16日消息,特种机器人公司“启腾科技”完成数千万元融资。 红马资本与三一重工共同投资。 本轮融资将用于加大研发投入、扩大产能、拓展新业务。 重庆启腾科技有限公司是一家从事特种机器人产品和智能仓储产品研发和销售的高新技术企业。 其产品主要为危化工厂消防

    06-18

  • 市场巨大!研究称印度光伏发展潜力达748GW!

    市场巨大!研究称印度光伏发展潜力达748GW!

    光伏系统具有分布式发电的特点,可以在较短的交付周期内快速增加发电量。 此外,从能源安全的角度来看,太阳能因其资源丰富而被认为是所有能源中最安全的。 印度地处热带、亚热带,光伏发电潜力巨大。 根据美国太阳能研究所的一项研究,假设光伏系统可以覆盖印度3%的荒地面积

    06-08

  • “超级简历”完成500万美元A轮融资

    “超级简历”完成500万美元A轮融资

    “超级简历”近日宣布完成500万美元A轮融资,由GGV纪源资本、愉悦资本投资。 本轮资金将主要用于完善基于数据的人才招聘产品。 超级简历成立于年底,2016年开始进军招聘业务,产品形态包括小程序、APP和网站。

    06-17

  • 去哪儿网在百度投资部、金沙江创投、纪源资本、特纳亚资本、梅菲尔德创投、高瓴资本等上市并退出

    去哪儿网在百度投资部、金沙江创投、纪源资本、特纳亚资本、梅菲尔德创投、高瓴资本等上市并退出

    去哪儿网(Qunar.com)是一家全球华人旅游平台,其网站已上线今年5月。 公司总部位于北京,并于今年11月1日在纳斯达克证券交易所成功上市。 去哪儿网通过网站和移动客户端的全平台覆盖,为旅行者提供随时随地深度搜索国内外机票、酒店、度假、旅游团购、旅游资讯等服务,帮助

    06-18

  • 为考生提供志愿者申请服务,优卓完成千万级A2轮融资

    为考生提供志愿者申请服务,优卓完成千万级A2轮融资

    据投资界6月7日消息,优卓近期获得千万级A2轮融资。 本轮融资由浙江文化产业成长基金领投。 本轮融资将主要用于品牌推广和产品研发,打造教育规划产业链的产品布局。   优知智成立于2006年,是一家专注于高考规划领域,专注于高考申请表、自主招生、新高考科目选择、排课系

    06-18

  • 李克强:“双创”、“大众创业”带来更大创新空间

    李克强:“双创”、“大众创业”带来更大创新空间

    创造头条3月11日,李克强出席新闻发布会并回答中外记者提问。 他表示,创新还是要靠市场。 力量。 企业是创新的主体。 他表示,近年来,我国推动“大众创业、万众创新”,形成了“大众创业”的局面,促进了应用创新,为整体创新带来了更大空间。

    06-18

  • 药明生物产业基金等投资,旭湖医药获3亿元Pre-A轮融资

    药明生物产业基金等投资,旭湖医药获3亿元Pre-A轮融资

    旭湖医药近日完成3亿元Pre-A轮融资。 本轮融资由药明生物产业基金、杭州华安晶银投资、鼎晖投资、华盖资本共同投资,融资资金将主要用于公司全球首创或同类最佳新药的快速推进研发产品线。

    06-17

  • 拼多多:未来5年投资500亿元建设100万家年销售额100万的农村网店

    拼多多:未来5年投资500亿元建设100万家年销售额100万的农村网店

    4月21日,拼多多发布《年度农产品上行发展报告》,宣布将继续以农产品作为增销手段,核心策略是未来5年投入不少于1亿元支持农业农村“新基建”。 在此期间,拼多多将帮助农村地区建设1万家年销售额过百万元的商店。 报告显示,2019年,拼多多实现农(副)产品成交额1亿元,进

    06-18

  • 宏熙科技于2月15日开启网上申购,发行价12元-股

    宏熙科技于2月15日开启网上申购,发行价12元-股

    北交所直接消息 据北交所官网2月11日发布的信息,宏熙科技(57. BJ)将于2月15日启动网上申购,发行价格为12元/股,发行市盈率为24.18倍。 北京证券交易所官网截图。 据了解,宏熙科技本次公开发行股票初始发行数量为10,000股,发行后总股本为70,000股,占发行后总股本的21.6

    06-18

  • BAT把他们都得罪了,投资收购了20多家公司,现在只能通过出海“自救”吗?

    BAT把他们都得罪了,投资收购了20多家公司,现在只能通过出海“自救”吗?

    【编者注】他们原本是创业路上的小战士,如今却进化成了估值数百、千亿的独角兽。 投资界整理了几大独角兽的投资并购,一睹它们另类的成长史,敬请关注《投资界特别策划:解码独角兽》。 一向被贴上“庸俗”标签、挥之不去的今日头条,却出现在巨头身边。   成立5年来,已形

    06-18

  • 永安在线完成新一轮数千万元融资,金沙江创投独家投资,

    永安在线完成新一轮数千万元融资,金沙江创投独家投资,

    投资圈(ID:pedaily)据2月23日消息,永安在线完成新一轮数千万元融资。 本轮融资由金沙江创投独家投资,指数资本独家投资。 融资资金拟用于加大企业人才梯队建设投入,加大API安全产品研发投入,持续深化业务安全相关产品及应用的开发,丰富产品体系,扩大行业市场覆盖范围

    06-17