一种比较实用的定时程序的简单的设计方法探讨

发布者:星际穿越最新更新时间: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

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


关键字:定时程序  设计方法 引用地址:一种比较实用的定时程序的简单的设计方法探讨

上一篇:利用51单片机启动三相星形电机的程序设计
下一篇:一个循迹小车的C语言程序

推荐阅读最新更新时间:2024-03-16 15:57

时间继电器 倒计时控制 定时通断开关模块程序
#include reg52.h //用52的头文件 里面加的引脚再定义 #include intrins.h //延时 sfr AUXR = 0x8e; sfr P5 = 0xc8; //p5定义 是加的 sfr P5M0 = 0xc9; sfr P5M1 = 0XCA; sfr P3M0 = 0xb2; //p3口设置强推完的定义 sfr P3M1 = 0Xb1; sfr P1M0 = 0x92; //p0口设置强推完的定义 这样设置数码管就亮 sfr P1M1 = 0X91; /**********************
[单片机]
时间继电器 倒计时控制 <font color='red'>定时</font>通断开关模块<font color='red'>程序</font>包
AVR之最简单外部中断、定时器0、定时器1程序
程序太简单啦,就不说啦,自己看吧 ATMEGA16用ICCAVR编译器 1、外部中断 #include iom16v.h #include AVRdef.h unsigned char temp=0x80; void main() { DDRA=0xff; GICR|=0x40;//使能外部INT0 MCUCR|=0x01;//INT0下降沿触发 SEI();//总中断 while(1); } #pragma interrupt_handler int0_isr:iv_INT0 void int0_isr(void) { PORTA=temp; temp=temp 7|temp 1; } 2
[单片机]
采用PC的IC工具降低MEMS设计方法
采用PC的IC工具降低MEMS设计方法 鉴于MEMS工艺源自光刻微电子工艺,所以人们很自然会考虑用IC设计工具来创建MEMS器件的掩膜。然而,IC设计与MEMS设计之间存在着根本的区别,从版图特性、验证或仿真类型,到最重要的构造问题。 尽管针对MEMS设计的专用工具套件已经面市,但它们的定价往往超出专注这一增长领域的许多小公司的承受范围。作为一种替代解决方案,低成本的、基于PC的IC工具开始被用于设计微机电系统及IC。 不过,这类软件的使用者必须认识到MEMS设计的特殊复杂性,并评估这些软件是否能支持他们的产品制造和生产周期。对于只需要2层掩膜的简单微流通道(microfluidic channels),这
[模拟电子]
采用PC的IC工具降低MEMS<font color='red'>设计方法</font>
一种实时多任务系统软件设计方法
    摘要: 从进程和线程调度的角度出发,介绍了一种规范化的实时多任务系统软件设计方法,提出了“前向分支”的设计原则,给出了完整的系统模型。     关键词: 线程拆分 前向分支 实时多任务 单片机 在机电产品研制开发中,经常要涉及到基于嵌入式系统或基于单片机系统的程序设计。实时多任务是这类系统最基于的要求之一。在实践中通常采用以下两种解决方案:一是在商业化时操作系统的基础上进行二次开发;二是用户自动设计系统软件。前者设计工作量小,设计周期短,系统的设计质量也容易得到保证。但由于商业实时操作系统往往较多地考虑通用性,缺乏灵活性,对于一些特定的应用场合,其性能往往不能令人满意。同时,这种方案还存在着成本高,依
[嵌入式]
M20 中断、定时器与程序存储方式
void main() //主程序 不同单片机写法基本一致 { } interrupt() //不同单片机 中断程序写法不同 { } 多个中断类似于多个中断车道的车行进,如果都来抢占红色小车的主车道,会造成红车行进缓慢。 所以中断程序写最简短的代码,尽量少的占用主车道的时间。 以上提到了四个关键名词: 中断 定时器 主程序 中断程序 书籍会给一个名词简短一两句话,作为解释或者定义,实际上大部分名词很难用一句话说明。很多同学学习过程中感觉越学越困难,越来越看不懂,实际上,关键问题就是很多名词需要一本书1000页打底的书来解释才行,我们把自己限定到仅看课本或者一两本关联度很少的书,这样自然是越学越累。因为这
[单片机]
用单片机定时器T0和P1.7端口产生连续矩形脉冲的程序
已知51单片机,fosc=6MHz,试编写程序,利用T0和P1.7产生如下图所示的连续矩形脉冲。 参考程序: org 0000h ljmp main org 000bh ljmp int_t0 org 0030h main: mov tmod,#00000010b mov ie,#10000010b mov th0,#0ech mov tl0,#4ch clr p1.7 setb tr0 sjmp $ int_t0: jb p1.7,loop
[单片机]
用单片机<font color='red'>定时</font>器T0和P1.7端口产生连续矩形脉冲的<font color='red'>程序</font>
嵌入式存储器的设计方法和策略
       随着集成电路制造工艺水平的提高,半导体芯片上可以集成更多的功能,为了让产品有别于竞争对手的产品特性,在ASIC上集成存储器可以降低成本和功耗、改善性能、增加系统级芯片的可靠性。随着对嵌入式存储器需求的持续增长,其复杂性、密度和速度也日益增加,从而需要提出一种专用存储器设计方法。 存储器的外包设计         存储器模块都具有相对独立的特性,在一个时钟系统中它通常占用一个管道,从成本和人力资源两方面考虑,许多芯片开发商都将存储器模块外包设计,因为,与其它半导体芯片相比,在系统中定义和分离存储器模块要容易得多。此外,诸多因素促进了存储器编辑器及定制存储器设计公司的发展,例如:存储器模块的标准模块特性、对嵌入式存储器
[嵌入式]
PIC12F629单片机定时器1控制3个LED循环源程序,且时间可调
PIC12F629不用外振即可正常运行,低成本首选,原理如下:按键按一次LED1低亮,按两次LED2亮,按三次LED3亮,一直循环, 按键长按3秒松开则可以计入自动循环模式,再次长按3秒则退出,进入待机模式;2脚接轻触开关到地,可以做为设置键(原理图来自网上故VDD接﹢5V,漏画,SET设置键没有画,有时间修正下原理图),用来设置每个LED亮的时间,互不影响!源码已经编译通过,洞洞板做了一个PCB, 正常运行,新手贴勿喷。 单片机源程序如下: /****************************************************************************** 设计要求:按一次按键是打
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved