单片机 软件延时时间控制

发布者:Qianfeng最新更新时间:2020-05-11 来源: eefocus关键字:单片机  软件延时  时间控制 手机看文章 扫描二维码
随时随地手机看文章

一、简述


记--通过代码方式实现软件延时(不精确延时)。


二、指令周期

单片机需要一个时钟信号送给内部各个电路,才能使它们有节拍地协同工作。时钟信号的频率是由外部震荡电路的晶振频率决定的。


外接晶振的频率 = 时钟信号的频率 = 工作频率。(如24MHz,12MHz,11.0592MHz)


震荡周期:为单片机提供时钟脉冲的振荡源的周期。


震荡周期 = 1/晶振频率          (如晶振频率是12MHz时,振荡周期 = 1/12MHz = (1/12)us)


机器周期:51系列单片机的一个机器周期由12个震荡周期组成。

机器周期 = 12 * 振荡周期      


(如晶振频率是24MHz时,振荡周期 = 1/24MHz = (1/24)us,机器周期 = 12*(1/24)us = 0.5us)

(如晶振频率是12MHz时,振荡周期 = 1/12MHz = (1/12)us,机器周期 = 12*(1/12)us = 1us)


(如晶振频率是11.0592MHz时,振荡周期 = 1/12MHz = (1/11.0592)us,机器周期 = 12*(1/11.0592)us = 1.085us)



指令周期:单片机执行一条指令所用的时间。

一般来说,单片机执行1个简单的指令需要一个机器周期,执行复杂的指令需要两个机器周期。


三、软件延时


通过一个循环来实现延时

测试代码:


#include

 

void delay(void)//延时函数

{

unsigned char i;

for(i=0; i<100; i++)

;

}

 

void main(void)

{

while(1)

{

//dosomething()

delay();

}

}


Keil C51 环境下编译后,点击"调试"--"开始";在执行"视图"--"反汇编",可以看到延时函数对应的汇编代码。


其中:


CLR指令消耗1个机器周期


MOV指令消耗1个机器周期


INC指令消耗1个机器周期                                      


CJNE指令消耗2个机器周期


根据循环条件,INC指令和CJNE指令总共要执行100次(0x64=100),共消耗机器周期(1+2)*100=300,


加上CLR指令和MOV指令,循环程序总共消耗机器周期:1+1+300=302


如果单片机的晶振频率为11.0592MHz,则机器周期 = 12*(1/11.0592)us = 1.085us。


那么for循环程序耗时为302*1.085us=327.67us。


deley()函数用时:0.06607530s-0.000422209s=0.065653091s=65.653091ms=65653.091us   


(指令的执行时间不代表函数的执行时间。函数跳转需要时间,开辟函数栈、临时变量、回收栈资源等需要时间,因此c语言有内联(inline)函数,宏函数(带参宏)用来提高执行效率)。


两层循环


#include

 

void delay(void)//延时函数

{

unsigned char i, j;

for(i=0; i<100; i++)

for(j=0; j<200; j++)

;

}

 

void main(void)

{

while(1)

{

//dosomething()

delay();

}

}



注:对于C语言编译器,某些编译器会进行代码优化,比如循环里面什么都没做,编译器有可能将循环去掉。


软件延时不精准:因为相当于是通过控制CPU做某一些预定消耗一定时间的动作,根据CPU执行完成判断已经过去多长时间。但是CPU有可能在中途被其他进程强行占用(优先级高的进程),CPU被迫中断当前执行,优先执行优先级较高的任务,当执行完优先级较高的任务,才回来继续执行之前中断的任务,那么延时就会加长。比如想要延时1分钟,我们预定执行A动作之后,刚好耗时1分钟,那么让CPU执行这个动作就达到延时1分钟。如果当CPU执行到一半时,突然有一个紧急任务S(优先级高)发生,要求CPU立即处理,那么CPU就会中断当前任务A,优先处理紧急任务S,等待执行完毕,才回来继续执行之前被中断的任务A。那么当A任务执行完毕,我们预期是从执行开始到结束消耗时间1分钟,但是实际上已经过去不止1分钟,因为中途被中断了。所以软件延时时间越长,容易被中断,而且CPU不能长时间被一个进程独占,延时越不精准。


要实现精确的延时可使用硬件延时:使用定时器/计数器。定时器/计数器是根据时钟信号脉冲计数的,是直接跟硬件晶振相关的。


 

//函数名:delay_1ms(uint x)

//功能:利用定时器0精确定时1ms

//调用函数:

//输入参数:x,1ms计数

//输出参数:

//说明:延时的时间为1ms乘以x

 

void delay_1ms(uint x)

{

TMOD=0X01;//开定时器0,工作方式为1

TR0=1;//启动定时器0;

while(x--)

{

TH0=0Xfc;//定时1ms初值的高8位装入TH0

TL0=0X18;//定时1ms初值的低8位装入TL0

while(!TF0);//等待,直到TF0为1

TF0=0;    //重置溢出位标志

}

TR0=0;//停止定时器0;

}


延时1s:delay_1ms(1000); //1000ms = 1s

关键字:单片机  软件延时  时间控制 引用地址:单片机 软件延时时间控制

上一篇:单片机 矩阵式按键
下一篇:一个简易的51单片机串口接收和发送程序

推荐阅读最新更新时间:2024-11-11 10:56

基于MC9S08QG8低端微控制器的蓝牙无线控制电路设计
  常的ZigBee无线控制器节点是以一个高端微控制器为核心,再配合无线收发器构成的。本文将设计一个新型的、低成本的、使用ZigBee无线技术的精简型无线控制器,比如用于空调遥控,整个目标应用板上的元器件极少,走线极少,体积极小。该设计只采用三个电子芯片:一个低端微控制器(MC9S08QG8)、一个RF收发器(MC13192)和一个16×2的LCD,其他需要的元器件为电阻和按键之类的无源器件。   其中MC9S08QG8微控制器(MCU)的大部分管脚具有多重功能,电路设计中,即以MC9S08QG8为核心,实现各种控制。图2无线控制器应用原理图分为三部分:MC9S08QG8 MCU所需的基本连接;MCl 3192无线收发器的连接;1
[电源管理]
基于MC9S08QG8低端<font color='red'>微控制</font>器的蓝牙无线<font color='red'>控制</font>电路设计
基于51单片机的PID控制的DC/DC电路仿真+程序设计
寒假前做的课程综合设计,融合了单片机技术,模拟电子技术,电力电子技术,自动控制技术,设计了一个基于51单片机的PID控制的DC/DC电路,该设计主体电路是BUCK电路,用单片机进行控制开关管的导通关断,从而实现对DC/DC的控制要求。开关管所需的PWM由单片机进行运算后发出,采用PID算法,最终实现了DC/DC的输出功能。 仿真原理图如下 主电路 仿真 BUCK电路 单片机源程序: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit pwm=P2^7; sbit lcdrs=P2^2; sbit
[单片机]
基于51<font color='red'>单片机</font>的PID<font color='red'>控制</font>的DC/DC电路仿真+程序设计
51单片机学习笔记【0】——基础知识
一.单片机三大资源 1.Flash—-程序存储空间 相当于计算机的硬盘,可实现断电后数据不丢失。 2.RAM—-数据存储空间 相当于计算机的内存,用来存储程序运行过程中产生和需要的数据,断电后数据丢失,优点是读取速度快,可无限次写入。 3.SFR—-特殊功能寄存器 单片机每个功能都对应一个 多个SFR,用户通过对SFR的读写来实现单片机的功能。 二.单片机的最小系统 1.电源 主流单片机采用5V和3.3V的电压,供电电路40引脚接+5V,通常也成为VCC或VDD,代表电源正极;20引脚接GND,代表电源的负极,也是接地的意思。 2.晶振 晶体振荡器,作用是为单片机系统提供基准时钟信号,一直不停振荡,接有电容,作用是
[单片机]
51<font color='red'>单片机</font>学习笔记【0】——基础知识
51单片机STC89C52 矩阵键盘数码管显示
WELA BIT P2.7 DULA BIT P2.6 DIOLA BIT P2.5 FM BIT P2.3 ORG 0000H SETB DIOLA MOV SP,#0E0H LOOP0: LCALL key_Scan JZ LOOP0 LCALL DELAY20MS LCALL key_Scan JZ LOOP0 MOV P1,A LCALL Smg HERE0: LCALL key_Scan ;等待按键释放 JZ LOOP0 LCALL DELAY20MS SJMP HERE0 key_Scan: SETB RS1 MOV P3,#0FH ORL P3,#0FH MOV
[单片机]
[单片机框架][bsp层][nrf51822][nrf51422][nrf51802][bsp_led] LED配置和使用
LED 本文将介绍NRF51,如何点亮LED灯。 官方手册下载: https://infocenter.nordicsemi.com/pdf/nRF51802_PS_v1.2.pdf https://infocenter.nordicsemi.com/pdf/nRF51822_PS_v3.4.pdf https://infocenter.nordicsemi.com/pdf/nRF51422_PS_v3.3.pdf /******************************************************************************** * @file bsp_led.c * @a
[单片机]
51单片机学习感悟与51单片机上拉电阻心得
1、我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础。 2、对51单片机的操作本质上就是对寄存器的操作,对其他单片机也是如此。库只是一个接口,方便使用者使用而已。 3、汇编语言在工作中很少用到,了解就好。 4、51单片机的P0口很特别。 5、C语言就是C语言,51单片机就是51单片机,算法就是算法,外围电路就是外围电路,传感器就是传感器,通信器件就是通信器件,电路图就是电路图,PCB图就是PCB图,仿真就是仿真。 当你以后再也不使用51了,C语言的知识还在,算法的知识还在,搭建单片机的最小系统的技能还在,传感器和通信器件的使用方法还在,还会画电路图和PCB图,当然也会仿真。 6、51单片机
[单片机]
ARM核MCU对模拟信号隔离采集的新方案
模拟信号隔隔离采集是很多控制系统的组成部分,最常见的是电流电压的采集,或用于系统的监测,或用于系统的控制。 当前比较主流的模拟信号隔离采集是通过隔离运放将模拟信号从源侧传输到采集侧,然后通过MCU上面的ADC对模拟量进行电压采集。而在这个模拟信号隔离转换采集的过程中,本质上经历了“AD+隔离+DA+AD”的转换采集过程,三次数据转换引入了三次量化误差,导致整个系统为了达到较高精度的成本高启。 随着ARM内核的MCU逐渐流行,比如STM32系列芯片。此类单片机内部计数器资源丰富,因此对采集PWM信号非常方便。如果将PWM信号作为模拟信号隔离采集的媒介,系统将会精简很多,同等精度下,相对于传统方法成本显著下降。 模拟电压
[单片机]
ARM核<font color='red'>MCU</font>对模拟信号隔离采集的新方案
基于C8051F020单片机的实时测控装置设计
0 引言 C8051Fxxx单片机是美国Silabs公司推出的完全集成的混合信号系统级芯片,具有与8051指令集完全兼容的CIP-51内核。在项目研制中采用C8051F020单片机,对于熟悉掌握51单片机的技术人员来说,在硬件设计及软件编程上大大提高了研制效率和装备可维护性。测控装置是某型电子装备的实时控制装置,是整个系统最重要的组成部分之一,是系统运行过程中的指挥控制中心。该装置通过构建多单片机系统,实现了复杂时序的实时控制以及多路数据采集,可以提供系统正常工作所需的多路输出控制信号;通过硬件设计和软件编程实现了单片机与单片机、单片机与上位机之间的实时通信,各子系统之间的效据交换和复杂逻辑关系的处理,系统在规定时间可靠输出多
[单片机]
基于C8051F020<font color='red'>单片机</font>的实时测控装置设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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