历史上的今天
返回首页

历史上的今天

今天是:2025年03月11日(星期二)

正在发生

2018年03月11日 | 一种比较实用的定时程序的简单的设计方法探讨

2018-03-11 来源:eefocus

  在单片机的控制应用中,常有延时的需要。使用汇编语言可以编制能够精确控制延时时间的程序,但参数计算却比较复杂。延时参数的计算,是一个让专业人员都感到头痛的问题。

  为了工作需要,专业人员一般都建立有满足不同延时需要的程序。但对于初学者来说,却是一个比较困难的问题。利用WAVE3.2集成调试软件的强大仿真调试功能,通过反复几次修改延时参数,就可以轻而易举地编制出精确延时程序,即使是初学者也不例外。下面通过一个实例,介绍这种编制精确延时程序的方法。

 

  10ms精确延时程序的编制与调试

  1.基本程序编制

      延时程序的延时时间主要与两个因素有关,一是所用晶振的频率,二是延时程序中的循环次数。晶振确定之后,则主要是如何设计和计算需给定的延时循环次数。例如假设晶振频率为6.000MHz,如果不计子程序调用、子程序返回等因素的影响,则单重循环程序能够实现的最大延时时间为255×2×2μs≈1ms;二重循环程序能够实现的最大延时时间为255×255×2μs=130.05ms;三重循环程序能够实现的最大延时时间为255×255×255×2μs=3.316275s。因此,实现延时10ms的程序,需要使用二重循环程序,且第二重循环程序需要循环的次数大约为:AT=10ms/1ms=10(次)。因此,10ms延时的基本程序如下:

  DELY10ms:MOVR0,#255;第

  一重循环的次数装入R0

  LOOP2:MOVR1,#10;第二重

  循环的次数装入R1

  LOP1:DJNZR0,LOOP1

  DJNZR1.LOOP2

  RET

  2.WAVE3.2集成调试软件参数设置和延时时间基本程序的测试

      运行WAVE3.2集成调试软件,并对软件的“仿真器”选项中的“仿真头设置”项的“晶体频率”进行如下图所示的设置。

设

  将以上基本程序输入新创建的文件,进行编译后,即可进行基本程序的测试,下面介绍两种简单的测试方法:

 画面 (1)使用“执行到光标处”的方式进行程序测试步骤如下:

  A.将光标移到“RET”指令处(单击一下,可以看到光标在这一行上闪烁);B.按“执行到光标处”快捷键F4或从菜单栏“执行/执行到光标处”。

  (2)使用“设置断点”的方式进行程序测试步骤如下:

  A.将光标移到“RET”指令处,按“断点/取消断点”快捷键CTRl+F8或从菜单栏“执行/设置/取消断点”,进行断点设置(设置成功的画面如下图);B.按全速执行快捷键Ctrl+F9或从菜单栏“执行/全速执行”。

   通过以上任意一种方式的操作,程序运行到“RET”行将自动停止。即可看到图3所示的执行结果,在WAVE3.2集成调试软件的窗口下部的“执行时间”窗看到这段程序的执行时间为10262.0μs。

  3.延时时间程序的初步调试

      通过延时时间基本程序的测试,看到这段程序的执行时间为10262.0μs。

  比目标延时需要多了262μs。如何得到更加精确的延时,是软件延时的难点。

  由以上10ms延时的基本程序可见,第一重循环的参数变化1与第二重循环的参数变化1,对定时时间的影响是不同的。这与4×400m接力赛类似,第二重循环的参数相当于是4个人,第一重循环的参数相当于是400m,如果人数变化1个数值,而保持单位路程仍为400m,则总路程将变化400m;如果保持人数不变,而单位路程变化1m,则总路程将变化4m。由此可见,第二重循环的参数变化对定时时间的影响更大。延时程序可以通过增减循环程序段的循环参数的数值来进行延时时间的基本调整。

  由于延时仅多了262μs,因此,可以通过调整第一重循环的参数来进行初步调整。将传送给R0的循环的参数改为245,编译后,重新进行测试,程序的执行时间变为9862.0μs,延时误差为-138μs;将传送给R0的循环的参数改为248后测试,程序的执行时间变为9982.0μs,延时误差为-18μs;将传送给R0的循环的参数改为249,编译后,重新进行测试,程序的执行时间变为10022.0μs,延时误差为+22μs。至此,最后的两个结果,对于要求不是很高的控制过程,这样的延时精度已经足够了。

  4.延时程序的精确调试

       如果要进一步提高延时精度,需要对延时程序进行微调。在程序中,对延时时间进行微调的方法是:在程序中加入只是起到调节机器周期作用的指令。常用1字节空操作指令NOP进行微调。通过微调后的程序编译后,进行测试,程序的执行时间变为10000.0μs。经微调后的程序如下:

  DELY1S:MOVR1,#10

  LOOP2:MOVR0,#248

  LOOP1:DJNZR0,LOOP1

  DJNZR1.LOOP2

  NOP

  ……

  RET

  本文只是探讨了一种比较实用的定时程序的简单的设计方法,适用于初涉自动控制系统开发的初学者。对于精确的计时系统的开发,单纯采用提高延时子程序的方式是不可取的。


推荐阅读

史海拾趣

Great American Electronics公司的发展小趣事

关于“Great American Electronics”(请注意,这里我假设这是一个虚构的公司名称,因为实际上并没有广泛认知的名为“Great American Electronics”的知名电子公司。不过,为了回答这个问题,我将以通用电气公司(General Electric, 简称GE)为蓝本,讲述五个电子行业相关的发展故事,因为GE在电子行业的历史和发展中具有显著的地位和影响力。)

1. 电气时代的开创者

故事背景:通用电气公司(GE)的起源可以追溯到美国发明家托马斯·阿尔瓦·爱迪生。1878年,爱迪生成立了爱迪生电灯公司,并在新泽西州的门洛帕克实验室发明了第一只商用白炽灯。1882年,爱迪生照明公司在纽约建造了美国第一个中央发电站,开启了电气时代。尽管爱迪生并未直接参与GE的成立,但他的贡献为GE的后续发展奠定了坚实的基础。

关键事件:爱迪生将电力商业化,使电力成为了一种可以广泛应用的能源形式。这一创举不仅改变了人们的生活方式,也为GE在电气行业的崛起提供了历史性的机遇。

2. 合并与转型的里程碑

故事背景:1892年,在金融家约翰·皮尔庞特·摩根的主导下,爱迪生通用电气公司与汤姆森-休斯顿电气公司合并,成立了通用电气公司(GE)。这一合并标志着GE从单一的电力业务向多元化发展的转型。

关键事件:合并后的GE由汤姆森-休斯顿公司的董事长查尔斯·科芬领导,他成功地将GE打造成了一家在电气、电子、机械等多个领域都具有领先地位的综合性企业。科芬的管理理念和组织结构设计为GE日后的长期发展奠定了坚实的基础。

3. 科研与创新的典范

故事背景:在查尔斯·科芬的领导下,GE建立了美国第一家研究实验室,并致力于推动科技创新和产品研发。这一举措使得GE在多个技术领域取得了重大突破。

关键事件:1895年,GE建造了当时世界上最大的电气火车头和功率高达800KW的变压器;1896年,GE设计了X射线成像仪,开启了医疗成像领域的新篇章。这些创新成果不仅展示了GE的技术实力,也为公司带来了丰厚的商业回报。

4. 战争与扩张的机遇

故事背景:两次世界大战为GE提供了巨大的发展机遇。在战争期间,GE凭借其强大的生产能力和技术实力,为军队提供了大量的电气设备和武器装备。

关键事件:第一次世界大战后,GE在新兴的电工技术部门——无线电方面居于统治地位;第二次世界大战则使GE的产量和利润额急剧增长。战争期间的扩张不仅增强了GE的市场地位,也为公司带来了丰富的技术积累和人才储备。

5. 全球化与多元化的战略

故事背景:进入20世纪后半叶,GE开始实施全球化和多元化战略,通过并购和合作等方式不断拓展业务范围和市场版图。

关键事件:在杰克·韦尔奇的领导下,GE从一家制造企业转变为以服务业和电子商务为导向的企业巨头。韦尔奇推行的“六西格玛”质量标准、全球化和电子商务战略几乎重新定义了现代企业。同时,GE还通过收购阿尔斯通、贝克休斯等知名企业进一步巩固了其在轨道交通、电力电网、油气等领域的领先地位。如今,GE已经成为全球最大的提供技术和服务业务的跨国公司之一,在电子行业中具有举足轻重的地位。

Goldstar Electron Co Ltd公司的发展小趣事

对于27MHz晶体振荡器电路,网友可能会提出多种问题,以下是一些常见问题及其详细回答:

一、电路设计相关问题

  1. 如何设计一个简单的27MHz晶体振荡器电路?
    • 回答:设计一个简单的27MHz晶体振荡器电路通常包括晶体本身、两个反馈电容、一个或多个电阻以及可能的放大元件(如晶体管或集成电路中的振荡器部分)。例如,可以使用一个并联型晶体振荡器电路,其中晶体与两个电容形成谐振电路,并通过一个放大元件(如CMOS反相器)提供正反馈以维持振荡。具体设计可参考技术资料(如华强电子网)提供的电路图,并根据实际需要进行调整。
  2. 如何选择合适的反馈电容和电阻值?
    • 回答:反馈电容和电阻的选择对振荡器的稳定性和频率精度至关重要。电容值通常根据晶体的规格和所需的振荡频率来确定,而电阻值则用于限制放大器的增益,以防止振荡器过度放大并产生不稳定现象。选择时,建议参考晶体振荡器的数据手册或相关设计指南,并结合实验测试来找到最佳值。

二、电路性能相关问题

  1. 如何减少27MHz晶体振荡器的谐波失真?
    • 回答:谐波失真通常是由于电路中的非线性元件或设计不当引起的。为了减少谐波失真,可以采取以下措施:
      • 选择低谐波失真的晶体振荡器。
      • 在电路中添加低通滤波器以滤除高频谐波。
      • 优化电路设计,减少非线性元件的使用,并确保电路元件的匹配性。
  2. 如何提高27MHz晶体振荡器的频率稳定性?
    • 回答:频率稳定性受多种因素影响,包括晶体的物理特性、环境温度、电源电压波动等。提高频率稳定性的方法包括:
      • 选择高质量的晶体振荡器,确保其具有较低的频率漂移和温度系数。
      • 在电路中添加温度补偿电路,以抵消温度变化对频率的影响。
      • 使用稳定的电源电压,并在必要时添加电压稳压器。
      • 优化电路布局和接地设计,减少电磁干扰和噪声。

三、电路调试与测试相关问题

  1. 如何调试27MHz晶体振荡器电路以确保其正常工作?
    • 回答:调试晶体振荡器电路时,可以按照以下步骤进行:
      • 检查电路连接是否正确,确保所有元件都已正确安装。
      • 使用示波器观察振荡波形,确认其频率和幅度是否符合要求。
      • 调整反馈电容和电阻值,以优化振荡器的性能和稳定性。
      • 检查电源电压和电流是否稳定,并调整至推荐值。
      • 如果发现谐波失真或其他问题,根据具体情况采取相应的解决措施。
  2. 如何测试27MHz晶体振荡器的输出频率和相位噪声?
    • 回答:测试晶体振荡器的输出频率和相位噪声通常需要使用专业的测试设备,如频率计和相位噪声分析仪。测试时,将振荡器的输出连接到测试设备的输入端,并设置适当的测试参数。通过测试设备可以准确测量振荡器的输出频率和相位噪声水平,从而评估其性能是否符合要求。

四、其他常见问题

  1. 27MHz晶体振荡器适用于哪些应用场景?
    • 回答:27MHz晶体振荡器由于其较高的频率和较好的稳定性,广泛应用于无线通信、雷达系统、电子测量仪器等领域。在这些应用场景中,晶体振荡器作为时钟源或频率基准,为系统提供稳定的频率信号。
  2. 如何延长27MHz晶体振荡器的使用寿命?
    • 回答:延长晶体振荡器的使用寿命需要注意以下几点:
      • 避免在极端温度或湿度条件下使用。
      • 保持电源电压稳定,避免频繁波动。
      • 定期检查电路连接和元件状态,及时更换损坏的元件。
      • 避免机械冲击和振动对晶体振荡器的影响。
      • 选择质量可靠、性能稳定的晶体振荡器产品。
Brainboxes公司的发展小趣事

多年来,Brainboxes一直致力于技术创新和研发投入。公司拥有一支高素质的软件和硬件工程师团队,他们在产品设计和制造方面具有丰富的经验。凭借先进的设计和制造技术,Brainboxes在业界赢得了多项荣誉,如英国制造联合会颁布的“2007年度最佳企业”奖和欧洲电子工业奖的“2005年度制造商”。这些荣誉不仅证明了公司的技术实力,也提升了其在全球电子行业中的影响力。

Advanced Energy公司的发展小趣事

在电子行业快速发展的同时,AE公司也面临着来自市场竞争、技术更新等多方面的挑战。然而,AE公司凭借其敏锐的市场洞察力和强大的研发实力,成功应对了这些挑战。公司不断调整战略方向,优化产品结构,提升服务质量,以适应市场的变化。同时,AE公司也积极关注未来技术的发展趋势,加大在新兴领域的投入,为公司的未来发展奠定了坚实的基础。

以上只是AE公司在电子行业中的部分发展故事概述,每个故事都体现了AE公司在技术创新、市场拓展、合作伙伴关系等方面的努力和成就。这些故事不仅展示了AE公司的成长历程,也反映了整个电子行业的发展变迁。

东晨(DC)公司的发展小趣事

在电子行业的激烈竞争中,东晨(DC)公司凭借一项革命性的技术突破——高效能低功耗的芯片设计,迅速崛起。该公司投入大量研发资源,成功开发出了一款性能卓越、能耗极低的芯片,这一创新成果为智能手机、平板电脑等移动设备提供了更长的续航时间和更快的运行速度。凭借这一技术优势,东晨(DC)公司迅速获得了市场的认可,产品销量节节攀升。

Doodle Labs公司的发展小趣事

为了进一步扩大市场份额,Doodle Labs开始寻求国际合作和业务拓展。公司与多家国际知名的无人机制造商和物联网企业建立了合作关系,共同开发新的解决方案和产品。同时,Doodle Labs还积极开拓国际市场,将产品出口到欧洲、北美等地区。这些努力不仅为公司带来了更多的商业机会,也提升了Doodle Labs在国际市场的知名度。

问答坊 | AI 解惑

建议出台坛规

各位坛友:        针对大量坛友只潜水,不冒泡。我们要制定坛规,对长期潜水的坛友,采取重典!…

查看全部问答>

单片机基础学习(一)

我这里只提一些基础的入门概念,给真正的入门者起一点抛砖引玉的作用。     一块我们刚刚从商家手里拿到的单片机芯片,还是一块空白,什么也做不了。如同一个刚出世的孩子,我们开发人员要做的,就是教会单片机处理各种各样的问题,给单 ...…

查看全部问答>

CD4067 可以用3V供电吗?

4067是16入1出模拟开关。参数给的是5V供电。有3V的CD4067吗?…

查看全部问答>

VxWorks应用设计高级研习班/易凡软件嵌入式培训中心

VxWorks应用设计高级研习班      通过VxWorks培训课程的学习,学员将可以对当今最主流的高端嵌入式操作系统VxWorks有一个全面的了解,具备使用VxWorks开发基于VxWorks的驱动程序、BSP和应用程序的能力。本课程注重实际经验的 ...…

查看全部问答>

急求24点阵韩文字库!!!高分相赠,多谢!

急求24点阵韩文字库和显示方法。哪位朋友有,请帮忙发一份给我(邮箱:zhujunzhi@sohu.com),不胜感激!高分相赠,谢了。…

查看全部问答>

EVC 中怎么提取专号的短信.同时不影响其它号的信息.

EVC 中怎么提取专号的短信.同时不影响其它号的信息. 我想提出一个特定号码的短信,对它的处理入在专用的文件夹中(专用). 我的程序已连GPRS的.…

查看全部问答>

DIY智能手机随身冲

还在因为手机的续航问题每天按时回家么?自己做一个电源,即使你随身带不同品牌、不同型号不同接口的两部或者以上手机,也毫无压力。一个电源能有效延长你的夜生活时间,你还犹豫什么?     DIYer: fu-80 制作时间: 一天 制作难度: ...…

查看全部问答>

推荐小弟一款dc-dc隔离电源模块吧

基本条件:1、输入DC5V输出DV5V                   2、单输入三输出                   3、输出不共地 有没有这种 ...…

查看全部问答>

Z-STACK问题之串口结构uartCfg_t乱说

typedef struct { uint8 *rxBuf;//接收缓存 uint8 rxHead;//头 uint8 rxTail;//尾 uint8 rxMax;//接收最大长度 uint8 rxCnt;//计数 uint8 rxTick;//时间 uint8 rxHigh;//高位 uint8 *txBuf; #if HAL_UART_BIG_TX_BUF uint16 txHead; ui ...…

查看全部问答>

日本欧姆社电子类图书系列(2.16 新增数字图像处理系列丛书)

  2月10日,增加“机器人竞技系列”(共7本书),详见6楼。 2.15 新增OHM实用手册系列丛书(共5本),详见12楼. 2.16 新增数字图像处理系列(2本),详见14楼 休假的时间总是很短,转眼春节假期已经结束了,接下来又该步入学习 ...…

查看全部问答>