可以借助软件快速生成代码。利用STC-ISP 就可以

1.打开stc-isp后点击软件延时计算器

2.选择好使用的单片机型号、晶振频率、延时的时间

3.点击生成代码 即可。

有时候生成的c代码会有

_nop_();            //这句指令执行仅仅耗费1微秒的时间,可以删除,影响不大

我们可以将这句代码给删除掉 ,不删除程序就会报错(你没有定义_nop_()的前提下)。删除后其实基本上不会产生太大的误差,因为1微妙实在是太短了。

使用心得:

我们可以将生成的代码稍微改造一下,可以让我们的程序更加灵活,例如生成一个一毫秒的延时函数,通过在函数定义时增加一个形参变量,通过形参变量来控制1ms延时程序执行的次数来随意调节时长。

生成后复制过来的代码是这样的:

void Delay1ms()      //@11.0592MHz
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}

在花括号里面的那一堆程序段就可以空耗CPU一毫秒,从而达到延时。

下面我们对它进行稍微的改造

void Delay(int n)        //@11.0592MHz
{while(n--)                //将延时一毫秒的程序循环执行n次,通过形参来调节延时的时长{unsigned char i, j;//    _nop_();注释掉这行代码i = 2;j = 199;do{while (--j);} while (--i);}
}

在声明函数时 新增一个形参变量,用来接收执行次数,灵活调整延时的时间。在函数体中包上一个while()循环。这样就改造完成了。

同样 ,汇编语言也可以这样,现象生成一个100毫秒的延时函数

DELAY100MS:          ;@11.0592MHzPUSH 30HPUSH 31HMOV 30H,#180MOV 31H,#68
NEXT:DJNZ 31H,NEXTDJNZ 30H,NEXTPOP 31HPOP 30HRET

然后对延时子函数进行改造,例如

DELAY:   MOV R7,#5       ;@11.0592MHz
D1:PUSH 30HPUSH 31HMOV 30H,#180MOV 31H,#68
NEXT:DJNZ 31H,NEXTDJNZ 30H,NEXTPOP 31HPOP 30HDJNZ R7,D1RET

第一行多加了        MOV    R7,#5           ,倒数第二行多加了     DJNZ R7,D1

可以通过修改第一行#后面的数字来修改延时的时长,例如现在是5  那么延时的就是500ms

改成3  那么就延时300ms  因为我是拿延时100毫秒的汇编代进行改造的。

stc-isp里面除了可以烧写程序外还有很多功能,例如定时器的自动配置、波特率的计算等等

51单片机的延时函数快速生成技巧相关推荐

  1. 【51单片机】延时函数计算问题以及如何准确延时

    几种周期介绍 周期名称 描述 时间 振荡(时钟) 单片机提供时钟脉冲信号的振荡源的周期 T=1/f 状态 振荡周期经二分频后得到的 2T 机器 在一个机器周期内,CPU可以完成一个独立的 操作 12T ...

  2. 51单片机的延时计算

    51单片机的延时计算 前言 正文 首先是时钟周期的算法:时钟周期(T)=1(秒)/晶振频率. 其次是机器周期:机器周期是由时钟周期组成的,机器周期是单片机完成一个基本操作所需要的时间. 1 传统的80 ...

  3. 51单片机的延时子程序

    延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器 周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念.机器周期和指 令周期的区 ...

  4. 51单片机精确延时设计

    在我们使用单片机的时候,很多情况下需要用到精确的延时.比如在跟DS18B20进行通讯的时候需要遵循严格的时序,这就需要我们严格把控程序执行的时间. 一般我们都是通过执行空语句的方式来使程序延时.这种方 ...

  5. 51单片机如何用c语言位定义,嵌入式编程(一):51单片机如何将函数 定义到指定程序地址...

    在单片机编程使用中,会涉及到将某些函数定义到指定的code区.此时需要对工程文件进行配置修改才可完成.本期针对单片机平台做出说明介绍 1.测试目标 将函数testaddr定义到0x6000地址 2.测 ...

  6. 嵌入式编程(一):51单片机如何将函数 定义到指定程序地址

    在单片机编程使用中,会涉及到将某些函数定义到指定的code区.此时需要对工程文件进行配置修改才可完成.本期针对单片机平台做出说明介绍 1.测试目标 将函数testaddr定义到0x6000地址 2.测 ...

  7. 单片机:延时函数的理解

    在实现单片机功能的时候,经常会用到延时函数,那么延时函数的原理也是非常有必要了解的.一般我们写延时函数的时候,默认的晶振频率fosc=12MHZ,而机器周期T=12/fosc=1us. 这里我们来写一 ...

  8. 51单片机c语言延时计算软件,51单片机精确延时程序大集合+初值计算工具

    在论坛上看到不少不错的延时程序,整理如下共同分享: 精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 ;延时5秒左右 DELAY5S:PUSH   04H;2个 ...

  9. 单片机自定义延时函数Delay取值详解

    我们想实现一个定时延时函数,在单片机里并没有什么sleep,需要我们自己实现. 延时函数跟 晶振频率 有很大的关系,因为晶振频率影响程序执行速度. 1.打开Keil 4 - Target Option ...

最新文章

  1. listary 指定目录搜索_everything
  2. Ubuntu安装apt出现报错如何操作(简单记录)
  3. 第一章:前端视角——js运行环境之node.js基础入门
  4. 借助 SAP 电商云 Spartacus UI 提供的 Schematics 辅助您的前端项目升级
  5. radmin提示授权码过期_IdentityServer4 客户端授权模式(Client Credentials)
  6. 计算机入门在线阅读,电脑入门基础教程..doc
  7. 开源jshop小程序商城
  8. Linux——vi编辑器
  9. es6 SharedArrayBuffer对象
  10. AWS - VPC Peering
  11. 首日回顾:新一代区块链开发平台初步建成 | ArcBlock Devcon 2020
  12. 云服务器ECS是什么
  13. 李彦宏创业12年解读:企业家精神改变工程师命运
  14. vuecli打包后html文件没有压缩的问题
  15. 我国首部《密码法》来了!资深律师跟我说,他是这么看的...
  16. 安装lux:推荐一款网页视频下载工具。并简单使用。(win)
  17. Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM
  18. 如何去开发一个webApp
  19. 关于java字符流Reader.read()方法的个人理解
  20. 23种设计模式详解(代码讲解、持续更新)

热门文章

  1. 平流式沉淀池流量计算_沉淀池设计计算(平流式
  2. OneAuth 5月报:关于身份 少即是多
  3. linux查看网络下一跳,网络分层结构及TCP通信基础和下一跳机制
  4. role=“presentation“啥意思
  5. 计算机环境下会计循环的八个流程,会计循环的基本步骤和流程是怎样的
  6. 陈凯歌: 大创意大《无极》
  7. 用RecyclerView实现动态添加本地图片
  8. poj 1583 Choose Your Words Carefully
  9. 聊天框体实现:好友填充框
  10. 使用GGE开发Google小工具(Google Gadget)