51单片机的延时函数快速生成技巧
可以借助软件快速生成代码。利用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单片机的延时函数快速生成技巧相关推荐
- 【51单片机】延时函数计算问题以及如何准确延时
几种周期介绍 周期名称 描述 时间 振荡(时钟) 单片机提供时钟脉冲信号的振荡源的周期 T=1/f 状态 振荡周期经二分频后得到的 2T 机器 在一个机器周期内,CPU可以完成一个独立的 操作 12T ...
- 51单片机的延时计算
51单片机的延时计算 前言 正文 首先是时钟周期的算法:时钟周期(T)=1(秒)/晶振频率. 其次是机器周期:机器周期是由时钟周期组成的,机器周期是单片机完成一个基本操作所需要的时间. 1 传统的80 ...
- 51单片机的延时子程序
延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器 周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念.机器周期和指 令周期的区 ...
- 51单片机精确延时设计
在我们使用单片机的时候,很多情况下需要用到精确的延时.比如在跟DS18B20进行通讯的时候需要遵循严格的时序,这就需要我们严格把控程序执行的时间. 一般我们都是通过执行空语句的方式来使程序延时.这种方 ...
- 51单片机如何用c语言位定义,嵌入式编程(一):51单片机如何将函数 定义到指定程序地址...
在单片机编程使用中,会涉及到将某些函数定义到指定的code区.此时需要对工程文件进行配置修改才可完成.本期针对单片机平台做出说明介绍 1.测试目标 将函数testaddr定义到0x6000地址 2.测 ...
- 嵌入式编程(一):51单片机如何将函数 定义到指定程序地址
在单片机编程使用中,会涉及到将某些函数定义到指定的code区.此时需要对工程文件进行配置修改才可完成.本期针对单片机平台做出说明介绍 1.测试目标 将函数testaddr定义到0x6000地址 2.测 ...
- 单片机:延时函数的理解
在实现单片机功能的时候,经常会用到延时函数,那么延时函数的原理也是非常有必要了解的.一般我们写延时函数的时候,默认的晶振频率fosc=12MHZ,而机器周期T=12/fosc=1us. 这里我们来写一 ...
- 51单片机c语言延时计算软件,51单片机精确延时程序大集合+初值计算工具
在论坛上看到不少不错的延时程序,整理如下共同分享: 精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 ;延时5秒左右 DELAY5S:PUSH 04H;2个 ...
- 单片机自定义延时函数Delay取值详解
我们想实现一个定时延时函数,在单片机里并没有什么sleep,需要我们自己实现. 延时函数跟 晶振频率 有很大的关系,因为晶振频率影响程序执行速度. 1.打开Keil 4 - Target Option ...
最新文章
- listary 指定目录搜索_everything
- Ubuntu安装apt出现报错如何操作(简单记录)
- 第一章:前端视角——js运行环境之node.js基础入门
- 借助 SAP 电商云 Spartacus UI 提供的 Schematics 辅助您的前端项目升级
- radmin提示授权码过期_IdentityServer4 客户端授权模式(Client Credentials)
- 计算机入门在线阅读,电脑入门基础教程..doc
- 开源jshop小程序商城
- Linux——vi编辑器
- es6 SharedArrayBuffer对象
- AWS - VPC Peering
- 首日回顾:新一代区块链开发平台初步建成 | ArcBlock Devcon 2020
- 云服务器ECS是什么
- 李彦宏创业12年解读:企业家精神改变工程师命运
- vuecli打包后html文件没有压缩的问题
- 我国首部《密码法》来了!资深律师跟我说,他是这么看的...
- 安装lux:推荐一款网页视频下载工具。并简单使用。(win)
- Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM
- 如何去开发一个webApp
- 关于java字符流Reader.read()方法的个人理解
- 23种设计模式详解(代码讲解、持续更新)
热门文章
- 平流式沉淀池流量计算_沉淀池设计计算(平流式
- OneAuth 5月报:关于身份 少即是多
- linux查看网络下一跳,网络分层结构及TCP通信基础和下一跳机制
- role=“presentation“啥意思
- 计算机环境下会计循环的八个流程,会计循环的基本步骤和流程是怎样的
- 陈凯歌: 大创意大《无极》
- 用RecyclerView实现动态添加本地图片
- poj 1583 Choose Your Words Carefully
- 聊天框体实现:好友填充框
- 使用GGE开发Google小工具(Google Gadget)