51单片机延时程序的延时时间计算

这篇具有很好参考价值的文章主要介绍了51单片机延时程序的延时时间计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        最近在上单片机原理及应用课程,做实验的时候遇到了软件延时程序如何计算延时时间的问题,经过一阵摸索终于领悟到其中奥秘......耶(比耶)。 延时函数是使用STC-ISP生成的,晶振为12MHz,指令集是STC-Y1(即89系列),使用do while()循环实现软件精确延时。下面讲解一下其中的延时时间是如何计算的。 

1. 首先我们先设置断点是程序运行到进入delay_10ms()函数前,可以在图1右下角看到此时程序运行时间为0.00040800sec,此时我们看向反汇编窗口(Disassembly)。请注意圈出来的“LCALL delay_10ms”汇编指令,程序运行到代码“ int a=100 ”并完成赋值后往下运行遇到delay_10ms(),子程序调用指令LCALL 完成对delay_10ms()的调用,该指令消耗24个时钟周期,即 t1=2us。

 51单片机延时程序的延时时间计算

图1

2. 接着点击调试中的单步执行按钮,使程序转到delay_10ms()中,图2可以看到,首先执行“ MOV R7,#0x14”(即 i=20),接着执行“MOV R6,#0x71”,查STC-ISP指令表可知将立即数赋值给寄存器指令“MOV Rn #data”消耗12个时钟周期,故上述两部共消耗 t2=2us。

51单片机延时程序的延时时间计算

 图2

3. i,j赋值完再接着往下是执行do{}里面的内容“while(--j)”,“DJNZ  R6 , C:005D”指令的意思是寄存器R6里面的内容减1不为0则转移到“C:005D”处,即继续执行j自减。DJNZ指令消耗24个时钟周期,一共执行113次,即113 X 2us = 226us 。

4. 当j从113自减到0后,不满足DJNZ条件,则程序继续往下执行“ while(--i)”,即判断do while()的条件。该代码对应汇编指令为“ DJNZ  R7 , C:005D”,即i=20,自减1为19,不为0则转移到C:005D,继续执行j自减。注意,接下来的步骤很容易算错,很多人可能误以为j会再次从113开始自减,但实际不是的,前面存放 j=113 的寄存器R6从113自减到0后,此时再次自减 将从256开始,因为寄存器值从0开始减1后将会变成11111111,即256。这样,整个循环时间就很容易得出来了:t3 = 113 X 1 X 2us + 256 X 19 X 2us + 20 X 2us = 9954us

5. delay_10ms()程序结束后往下是 子程序返回指令RET,该指令功能是返回到子程序调用指令下一指令处,即返回进delay_ms()前的地方。该指令消耗24个时钟周期,故 t4 = 2us。

综上:可得delay_10ms()执行时间,t = t1 + t2 + t3 + t4 = 2 + 2 + 9954 + 2 = 10000us = 10ms。

验证:分别在进delay_10ms() 和 执行完delay_10ms()后设置断点调试,如图3,可得时间 :

t = 0.01040800sec - 0.00040800sec = 0.01000000sec,即10ms。

51单片机延时程序的延时时间计算

 图3

(第一次写文章,写的不好请多多谅解哈)文章来源地址https://www.toymoban.com/news/detail-511245.html

到了这里,关于51单片机延时程序的延时时间计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯

    ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯

      前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。       目录 一.  延时函数的生成  1.通过延时计算器得到延时函数  2.可赋值改变的延时函数  二.  LED模块编写原理 

    2024年02月19日
    浏览(9)
  • 单片机汇编延时程序算法详解

    在单片机编程中,延时程序是一项常见的任务。它用于控制程序在执行期间暂停一段时间,以实现特定的时间延迟。延时程序在许多应用中都非常有用,例如控制LED的闪烁频率、定时器的计时等。本文将详细介绍单片机汇编语言中延时程序的算法,并提供相应的源代码。 延时

    2024年02月04日
    浏览(10)
  • 【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

    【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

    【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频) Proteus 仿真:Proteus 8.16(有低版本) 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:P04 普中开发板实验设计 本设计旨在设计一个基于51单片机的简易计算器仿真设计。 功能要求

    2024年02月02日
    浏览(11)
  • 基于51单片机实现时间显示及闹钟设置

    基于51单片机实现时间显示及闹钟设置

    本次为大学中的一次创新实验,当时老师叫我自己拿个单片机去玩,为了赶时间就做了个简单的时间显示和闹钟设置,因为比较简单所以也把代码附上了。 1.单片机 单片机内部内部资源:Flash——程序存储空间;RAM——数据存储空间;SFR——特殊功能寄存器。51单片机指的是

    2024年02月07日
    浏览(12)
  • 51单片机基于时间片轮转的简单rtos

    早就想写写这个了,正好赶上有点时间,写了一下基于51单片机的时间片轮转调度系统,简单的rtos,呵呵。直接上代码。 虽然简单,也可以继续学习了。

    2024年02月02日
    浏览(9)
  • 【51单片机】利用【时间延迟】的原理规避【按键抖动问题】

    【51单片机】利用【时间延迟】的原理规避【按键抖动问题】

    前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 本章是51LCD单片机设计的一个环节,完整可前往相应博客查看完整 传送门 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Lin

    2024年02月20日
    浏览(12)
  • 基于51单片机交通灯带紧急开关+黄灯倒计时+可调时间

    基于51单片机交通灯带紧急开关+黄灯倒计时+可调时间

    仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J000 功能说明: 采用51单片机以及单片机最小系统和三极管驱动电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。 1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯

    2024年02月06日
    浏览(14)
  • 定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

    定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

    下面画出等效电路图  可以知道单片机内必然有一个电阻RX,为了简化分析,我们假设他是线性电阻(不带电容,电感的支路) 还有一个基础知识: 电容器的充电放电曲线: 还需要知道电容电压的变化是连续的,(高数知识)无法跳变。 一个很大的误区就是认为电容一上电

    2024年02月12日
    浏览(12)
  • 51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。  

    2024年02月11日
    浏览(17)
  • 【单片机】51单片机串口的收发实验,串口程序

    【单片机】51单片机串口的收发实验,串口程序

    这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能: 引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。 定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。 定义了一个发送数据的函数send,该函数将数据发送到串口,等待数据

    2024年02月14日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包