单片机C51延时时间怎样计算?

发布者:清新生活最新更新时间:2018-01-11 来源: eefocus关键字:单片机  C51  延时时间 手机看文章 扫描二维码
随时随地手机看文章

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的 单片机 为例,晶振为12MHz即一个机器周期为1us。 

一. 500ms延时子程序 

程序: 


     void delay500ms(void) 

       { 

       unsigned char i,j,k; 

         for(i=15;i>0;i--) 

         for(j=202;j>0;j--) 

         for(k=81;k>0;k--); 

       } 



计算分析: 


     程序共有三层循环 

     一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us 

     二层循环m:R6*(n+3) = 202*165 = 33330us           DJNZ   2us + R5赋值 1us = 3us 

     三层循环: R7*(m+3) = 15*33333 = 499995us         DJNZ   2us + R6赋值 1us = 3us 

     循环外:   5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us   = 5us 

     延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms 

计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 

     二. 200ms延时子程序 

程序: 

void delay200ms(void) 



       unsigned char i,j,k; 

         for(i=5;i>0;i--) 

         for(j=132;j>0;j--) 

         for(k=150;k>0;k--); 



     三. 10ms延时子程序 

程序: 

void delay10ms(void) 



       unsigned char i,j,k; 

         for(i=5;i>0;i--) 

         for(j=4;j>0;j--) 

         for(k=248;k>0;k--); 



     四. 1s延时子程序 

程序: 

void delay1s(void) 



       unsigned char h,i,j,k; 

         for(h=5;h>0;h--) 

         for(i=4;i>0;i--) 

         for(j=116;j>0;j--) 

         for(k=214;k>0;k--); 


关键字:单片机  C51  延时时间 引用地址:单片机C51延时时间怎样计算?

上一篇:步进电机C51控制程序
下一篇:蜂鸣器在单片机驱动原理与设计

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

MSP430G2553单片机驱动TLC5540
#include msp430g2553.h #include stdio.h typedef unsigned char INT8U; typedef unsigned int INT16U; #define ADC_CTRL_DIR_PORT (P2DIR) #define ADC_CTRL_OUT_PORT (P2OUT) #define ADC_DATA_DIR_PORT (P1DIR) #define ADC_DATA_IN_PORT (P1IN) #define ADC_OE_BIT (BIT0) #define ADC_CLK_BIT (BIT1) #define ADC
[单片机]
OTPROM型单片机内内部存储器的使用研究
随着变频调速以及微机控制技术的发展,适应电机控制的Intel 8XC196MC系列单片机应用越来越广泛。 与80C196MC相比,87C196MC单片机带有16 KB的OTPROM(One Tline Programmable Read-Only Memory),可以进行片内编程操作,而且可以增强加密功能。对于普通的控制系统来说,其存储容量足够大,不必再使用外部扩展存储器。然而87C196MC单片机的OTPROM存在一个缺点:不可擦除,也就是说只能编程一次,不能实现重复编程,不利于大量普及使用。 当程序从仿真器移植到单片机的OTPROM时,并不能保证程序的一次成功性,由于单片机的不可擦除性,若程序脱机一次就使用一片单片
[应用]
单片机校验和
【例子】通过校验和的方式实现数据传输与控制,例如控制LED灯、蜂鸣器、发送数据到上位机。 由于是数据传输与控制,需要定制一个结构体、共用体方便数据识别,同时增强可读性。从数据帧格式定义中可以定义为“PKT_SUM_EX”类型。 识别数据请求什么操作可以通过以下手段来识别:识别数据头部1、数据头部2,操作码。当完全接收数据完毕后通过校验该数据得出的校验值与该数据的尾部的校验值是否匹配。 若匹配,则根据操作码的请求进行操作;若不匹配则丢弃当前数据帧,等待下一个数据帧的到来。 结构体定义: /*使用结构体对数据包进行封装 *方便操作数据 */ typedef struct _PKT_SUM { UINT8 m_
[单片机]
51单片机ALE引脚的控制
ALE/PROG: 当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。 在FLASH编程期间,此引脚用于输入编程脉冲。 在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 当访问外部存储器时,ALE作为锁存扩展地址的低8位字节的控制信号。当访问外部数据存储器时,ALE以十二分之一振荡频率输出正脉冲,同
[单片机]
基于AT89C52单片机的烟雾报警器设计
随着社会高速发展,火灾对于人类的生产生活造成了巨大的危害。烟雾报警器是用来监测环境中烟雾的浓度,以便人们及早发现事故隐患,采取有效措施,避免事故发生,确保工业生产和人们生活的安全。 1 系统总体设计方案 烟雾检测报警器由以下3部分组成:烟雾信号采集电路、模数转换电路和单片机控制电路。其系统结构框图如图1所示。烟雾信号采集电路由烟雾传感器和模拟放大电路组成,将烟雾信号转化为模拟的电信号。模数转换电路将烟雾检测电路送出的模拟信号转换成数字信号后送入单片机。单片机对该数字信号进行滤波处理,并与预设值进行比较,如果大于则启动报警电路发出报警声音,反之则为正常状态。为方便监控,使仪器测试人员及用户能够直观地观察到环境中的可燃烟雾浓度
[单片机]
基于AT89C52<font color='red'>单片机</font>的烟雾报警器设计
C51单片机串口工作的四种方式总结
方式0:同步移位寄存器输入输出方式 1. 利用移位寄存器实现串行/并行的转换(功能) 2. 波特率:fosc/12 3. RXD(P3.0)----用于串行数据的输入和输出 TXD(P3.1)----充当输出的移位时钟 4. 数据大小:8位 5. 方式0发送: ○ 串口接口移位寄存器(74HC164),主要用于扩展并行输出口 ○ 用单片机本身的3根线换取了8根线的作用 ○ 串行接口将8位数据从SBUF中取出 ○ TXD引脚上输出同步移位脉冲 ○ 以fosc/12的波特率从RXD端串行输出到移位寄存器 ○ 发完后TI置1,向CPU请求中断 6. 7. 8. 方式0接收: ○ 串口接口移位寄存器(74HC1
[单片机]
<font color='red'>C51</font><font color='red'>单片机</font>串口工作的四种方式总结
51单片机中断详解(下)
一.定时器相关寄存器 工作方式寄存器(TMOD) 该寄存器用于设置定时/计数器的工作方式,低四位用于定时器0,高四位用于定时器1。 GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0/1引脚为高电平这一条件。 C/T:定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。 定时器/计数器控制寄存器控制寄存器(TCON) 该寄存器的低4位用于控制外部中断,已在前面介绍,高4位用于控制定时/计数器的启动
[单片机]
单片机指令周期怎么计算
  指令周期:指令周期执行某一条指令所消耗的时间,它等于机器周期的整数倍。传统的80C51单片机的指令周期大多数是单周期指令,也就是指令周期=机器周期,少部分是双周期指令。现在(截至2012)新的单片机已经能做到不分频了,并且尽量单指令周期,就是指令周期=机器周期=时钟周期。      来看这张8051单片机外部数据,这里ALE和$PSEN$的变化频率已经小于一个机器周期,如果使用C语言模拟这个信号是没有办法做到的一一对应的,所以只能尽量和上面的时序相同,周期延长。   指令周期是不确定的,因为她和该条指令所包含的机器周期有关。一个指令周期=1个(或2个或3个或4个)机器周期,像乘法或除法就含有4个机器周期,单指令就只含有1个机
[单片机]
<font color='red'>单片机</font>指令周期怎么计算
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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