在实际工作中,单片机定时器延时程序的设计通常会分为硬件延时设计和软件延时设计两种方案。其中,单片机定时器的软件延时操作是比较常见的,在今天的文章中,我们将会就单片机定时器延时程序的软件设计和操作技巧,进行简要介绍。
短暂延时
想要实现单片机定时器的短暂延时,我们可以通过函数设计的方式来实现,在C文件中通过使用带_NOP_()语句的函数的方式完成短暂延时非常简单快捷。平时工程师可以自定义一系列不同的延时函数,如Delay10us()、Delay25us()、Delay40us()等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10μs的延时函数可编写如下图所示:
在这种延时10μs的延时函数编写中,我们可以很清晰的看到,这个延时程序Delay10us()函数中一共使用了6个_NOP_()语句,而每个语句执行时间为1μs。在完成这一延时函数的设置后,当主函数调用Delay10us()时,会首先执行一个LCALL指令(2μs),然后执行这6个_NOP_()语句(6μs),最后执行一个RET指令(2μs),所以执行上述函数时共需要10μs。可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用\\[4\\],以实现较长时间的延时。
但是,在使用这种单片机定时器延时程序进行短暂延时时,工程师需要注意一个问题,那就是如果在Delay40us()中直接调用4次Delay10us()函数,那么最终所得到的延时时间将是42μs,而不是40μs。这是因为,当单片机系统在执行Delay40us()函数指令时,先执行了一次LCALL指令(2μs),然后开始执行第一个Delay10us(),执行完最后一个Delay10us()时将会直接返回到主程序。依此类推,如果是两层嵌套调用,如在Delay80us()中两次调用Delay40us(),则也要先执行一次LCALL指令(即2μs),然后执行两次Delay40us()函数,得出的延迟时间是84μs,所以实际延时时间为86μs。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs()中直接调用8次Delay10us(),此时的延时时间为82μs。通过修改基本延时函数和适当的组合调用,这种调用方法可以帮助工程师来实现不同时间的延时。
嵌套汇编程序段
除了上文中提及的短暂延时的方法外,还有一种办法能够实现单片机定时器的延时程序设计,那就是在C51中通过预处理指令#pragmaasm和#pragmaendasm可以嵌套汇编语言语句进行延时程序的编写。在使用C51预处理指令嵌套汇编语言语句时,用户编写的汇编语言紧跟在#pragmaasm之后,在#pragmaendasm之前结束。延时函数可设置入口参数,可将参数定义为unsignedchar、int或long型。根据参数与返回值的传递规则,这时参数和函数返回值位于R7、R7R6、R7R6R5中。
在应用C51预处理指令#pragmaasm和#pragmaendasm可以嵌套汇编语言语句进行单片机定时器的延时程序编写时,工程师应该注意几个重要问题。首先,汇编程序#pragmaasm、#pragmaendasm是不允许嵌套使用的,在程序的开头应加上预处理指令#pragmaasm,在该指令之前只能有注释或其他预处理指令,且#pragmaasm、#pragmaendasm和asm只能在函数内使用。其次,当使用asm语句进行程序编写时,编译系统并不输出目标模块,而只输出汇编源文件。除此之外,asm语句只能用小写字母,如果把asm写成大写,编译系统就把它作为普通变量。
关键字:单片机 定时器 延时程序 软件延时法
引用地址:
单片机定时器延时程序设计之软件延时法
推荐阅读最新更新时间:2024-03-16 15:44
单片机与DSP结合的dsPIC芯片
摘要:介绍一款结合16位单片机控制特点和DSP高速运算优点的新型芯片——dsPIC,对比分析它与PIC16F87X系列单片机之间结构功能的差异。
关键词:单片机 PIC DSP dsPIC
微电子技术大规模甚至超大规模集成电路技术的发展日新月异,计算机芯片技术获得了高速发展。构成这样单片机,亦是不断更新换代,朝着高速化、通用化、不断专用化和提高性价比以及模拟/数字混合集成等方向发展。
熟悉单片机的用户,对于PIC已不再陌生了。由美国Microchip公司推出的PIC系列单片机产品,采用了RISC结构,不但解决了传统冯%26;#183;诺依曼结构单片机的“瓶颈”问题,并以高速度、低电压、低功耗、大电流驱动能力和低价位OTP及F
[单片机]
富士通半导体与华南理工大学MCU联合实验室成立
富士通半导体(上海)有限公司与华南理工大学近日在华南理工大学电子与信息学院逸夫科学馆举行了联合实验室揭牌仪式。这是自2008年以来,富士通半导体在中国高校投资成立的又一联合实验室,成为富士通半导体大学计划的又一次重要拓展。新联合实验室的建立,将增强富士通半导体与中国高校间的优势互补,有力地促进中国半导体人才培养和行业发展。 华南理工大学是直属教育部的全国重点大学,国家“211工程”和“985工程”重点建设学校之一,学校拥有一批有较强实力的科研机构及技术开发基地,以及一支高水平的师资队伍。华南理工大学电子与信息学院由我国著名电子学专家冯秉铨教授、徐秉铮教授开创,历史悠久,基础扎实,是我国首批博士和硕士授权学科点,
[单片机]
基于51单片机的大功率直流有刷电机的PWM调速控制
本人最近一直想用51单片机来设计制作一个 大功率直流有刷电机PWM调速控制器 。由于平时工作忙,没时间。所以,这个东东花了我很长时间。每天晚上下了班,回家就弄,一直搞到十一二点钟才休息。期间,也花了我不少钱,也失败了N次。终于,功夫不负有心人,我终于成功了,哈哈~~。 由于这个是大功率的直流有刷电机PWM调速控制器,所以就不能用晶体管来驱动了,必须用MOS管来驱动。MOS管不仅驱动能力强,而且效率高。为了提高系统的稳定性,可靠性,适用范围广等特点,本系统,采用双电源供电。控制电路一组电源,电压分别为5V和15V。功率输出部分一组电源,以适应不同电压的电动机。至于功率,可以根据实际情况,通过并联MOS管来决绝,但同时也要修改下驱动
[单片机]
GigaDevice拓展台湾市场版图,MCU市场展新机
GigaDevice资深产品市场经理金光一。 甫于2016年8月在上海证券交易所A板挂牌上市的兆易创新(GigaDevice),在股价扶摇直上的过程中,一直深受两岸半导体业界的重视,资深产品市场经理金光一先生来台湾参加DIGITIMES主办的MCU技术论坛活动,以“高性价比智慧联网平台的创新设计关键”主题做专题报告,并随后接受专访。
GigaDevice于2005年在北京成立,初期是一家以SRAM记忆体为主的IC设计公司,在大陆的半导体市场上迅速崭露头角,随后并扩展到SPI NOR Flash记忆体产品线,用在诸如机上盒(Set Up Box)、显示器与硬碟机的产品应用上,每个月有1.2亿颗的记忆体晶片出货以供大陆市
[手机便携]
从易到难,国产MCU车规级替代如何解决痛点、难点?
引言:期待国产MCU能够逐渐从“易国产化”到“难国产化”,并最终突破“极难国产化”的范围,进军国际巨头的核心领域。 车规级MCU(汽车级 微控制器 )是一种专为汽车行业设计的高性能、高可靠性的微控制器。它们在汽车电子系统中扮演着至关重要的角色,例如动力总成控制、底盘控制、车身控制、信息娱乐系统以及先进 驾驶辅助系统 等领域。汽车级MCU需满足严格的汽车级标准,具有强大的性能、低功耗、高可靠性以及对恶劣环境的适应性。随着汽车产业进入“新四化”趋势,新兴应用的快速发展对于车规级MCU带来更多新的需求。而本轮全球 芯片 缺货潮中,车规级MCU更是绝对的主角。中国是全球车规级芯片需求最大的市场,而随着中国厂商成为全球新能源汽车的增长驱
[汽车电子]
单片机c语言教程:运算符和表达式(位运算符)
学过汇编的朋友都知道汇编对位的处理能力是很强的,但是单片机C语言也能对运算对象进行按位操作,从而使单片机C语言也能具有一定的对硬件直接进行操作的能力。位运算符的作用是按位对变量进行运算,但是并不改变参与运算的变量的值。如果要求按位改变变量的值,则要利用相应的赋值运算。还有就是位运算符是不能用来对浮点型数据进行操作的。单片机c语言中共有6种位运算符。位运算一般的表达形式如下: 变量 1 位运算符 变量 2 位运算符也有优先级,从高到低依次是:“~”(按位取反)→“ ”(左移) →“ ”(右 移) →“&”(按位与)→“^”(按位异或)→“|”(按位或) 表 8-1 是位逻辑运算符的真值表,X 表示变量 1,Y 表示变量 2
[单片机]
Renesas和Sequans将在5G/4G蜂窝物联网上合作推出模块
瑞萨电子(Renesas)与5G/4G芯片和物联网模块供应商Sequans Communications将合作开发基于Sequans 的Monarch LTE-M/NB物联网平台的物联网模块。这些模块旨在为物联网公司提供集成MCU和连接平台,该平台简化和简化了许多应用的物联网系统设计,包括智能城市、智能家居和工业物联网。两家公司之间的合作包括为全球多家网络供应商提供支持。 第一个基于瑞萨的Sequans Monarch模块预计将于第四季度中期上市,随后将推出具有蓝牙低能耗(BLE)功能等附加功能的模块。此次合作汇集了Sequans 公司先进的LTE-M/NB IoT技术,以及瑞萨依靠MCU建立的销售渠道和营销能力,可加速物联网
[物联网]
如何利用定时器产生PWM波
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波 pwm.c #include pwm.h voidTIM1_PWM_Init
[单片机]