单片机原理及应用(1)--延时1s
单片机原理及应用(1)–延时1s
目录
- 单片机原理及应用(1)--延时1s
- 1.前言
- 2.关于11.0592Mhz晶振
- 3.关于”无用指令“
- 3.1nop
- 3.2DJNZ
- 4.程序讨论
- 演示:
1.前言
学单片机的各位入门第一个难题想必就是做一个精确的延时函数,在单片机里实现延时说白了就是让cpu去做很多无用的指令,比如说nop(no operations)。
还有类似DJNZ指令等,下面介绍11.0592MHz晶振的1s延时
2.关于11.0592Mhz晶振
11.0592,一串多么令人不爽的数字,为啥不凑个整数,但是想想既然量产的话一定自由其中的到了,今天咱们目前用不到,所以就不展开叙述了,简单来说就是为了波特率
11.0592Mhz晶振的时钟周期为1s/11.0592Mhz,即
时钟周期≈0.00000009s
机器周期的长度为12个时钟周期,即
机器周期≈0.00000109s(没算错)
下面的周期时长全部基于11.0592Mhz晶振
3.关于”无用指令“
在延时函数中常用的让CPU打摆子的指令就是nop和DJNZ,所以我们有必要来好好了解一下这两个指令
3.1nop
nop是no operations,意思就是没有操作,指令周期为1个机器周期,所以执行这条指令所耗费的时间就是0.00000109s
3.2DJNZ
djnz是一个跳转指令,判断第一个操作数是否为0,不是0就跳转执行相应的程序,为0就将第一个操作数减一,指令周期为2个机器周期,所以执行这条指令所耗费的时间就是0.00000218s
4.程序讨论
上面说到延时程序就是让cpu打摆子,一遍打摆子指令消耗的时间是有限的,所以我们需要重复执行,
重复执行的话,就要用到我们上面说过的DJNZ指令,类似于一个while(i–)循环
然后,这个i(while的)的范围又是比较小的
汇编中我们常用的存储数字的寄存器是Rx,而Rx只有8位,只能表示0-255范围的数值,
粗略计算一下延时1s大约要消耗的机器周期大约为900000
这么多遍肯定不能自己来一遍遍的输进去,所以需要嵌套,
而且只能在循环次数为0-255内进行嵌套
大概需要嵌套3层
所以程序的样子大概就是这个样子:
Delay: MOV R5,#n1
TIME1: MOV R6,#n2
TIME2: MOV R7,#n3
TIME3: DJNZ R7,TIME3DJNZ R6,TIME2DJNZ R5,TIME1RET
现在我们就只要计算三个嵌套分别有多少了
观察最内圈的循环TIME3:
第一句指令就是DJNZ R7,TIME3
,由上面可知DJNZ占有两个指令周期,所以TIME3所能够产生的延时时间为2*n1个指令周期
第二句指令是DJNZ R6,TIME2
,要执行此条指令必须完全等待第一句指令执行完毕才可以,然而R6所存储的数值n2就是第二句指令重复执行第一条指令的次数,即能延时多少个2*n1个指令周期,计算一下就知道是(2*n1+2(第二条DJNZ所消耗的指令周期数)+1(TIME2中MOV指令消耗的指令周期数))*n2
即(2*n1+3)*n2个机器周期
同理
整个延时函数执行完毕应该是消耗了
((2*n1+3)*n2+3)*n3个机器周期数
计算得到延时1s所消耗的机器周期个数应该为1/(12*(1/11059200))=921600个
所以只需要求解三元一次方程组((2*n1+3)*n2+3)*n3=921600即可
在这里用一个python小程序求解:
for j in range(255):for k in range(255):for l in range(255):a = ((2*j+3)*k+3)*lif a==921600 :print('j:',j,'k:',k,'l:',l,'a:',a)
得到如下解
========================== RESTART: E:\Desktop\123.py ==========================
j: 17 k: 249 l: 100 a: 921600
j: 18 k: 123 l: 192 a: 921600
j: 19 k: 117 l: 192 a: 921600
j: 20 k: 119 l: 180 a: 921600
j: 27 k: 101 l: 160 a: 921600
j: 30 k: 195 l: 75 a: 921600
j: 31 k: 189 l: 75 a: 921600
j: 32 k: 191 l: 72 a: 921600
j: 33 k: 89 l: 150 a: 921600
j: 38 k: 243 l: 48 a: 921600
j: 39 k: 237 l: 48 a: 921600
j: 40 k: 111 l: 100 a: 921600
j: 43 k: 69 l: 150 a: 921600
j: 44 k: 135 l: 75 a: 921600
j: 49 k: 57 l: 160 a: 921600
j: 51 k: 117 l: 75 a: 921600
j: 54 k: 83 l: 100 a: 921600
j: 57 k: 41 l: 192 a: 921600
j: 57 k: 105 l: 75 a: 921600
j: 58 k: 43 l: 180 a: 921600
j: 60 k: 39 l: 192 a: 921600
j: 66 k: 91 l: 75 a: 921600
j: 70 k: 179 l: 36 a: 921600
j: 88 k: 143 l: 36 a: 921600
j: 93 k: 65 l: 75 a: 921600
j: 94 k: 67 l: 72 a: 921600
j: 96 k: 63 l: 75 a: 921600
j: 117 k: 81 l: 48 a: 921600
j: 120 k: 79 l: 48 a: 921600
j: 123 k: 37 l: 100 a: 921600
j: 130 k: 219 l: 16 a: 921600
j: 132 k: 23 l: 150 a: 921600
j: 135 k: 45 l: 75 a: 921600
j: 149 k: 17 l: 180 a: 921600
j: 150 k: 19 l: 160 a: 921600
j: 152 k: 15 l: 200 a: 921600
j: 156 k: 39 l: 75 a: 921600
j: 164 k: 87 l: 32 a: 921600
j: 173 k: 33 l: 80 a: 921600
j: 174 k: 35 l: 75 a: 921600
j: 175 k: 29 l: 90 a: 921600
j: 183 k: 13 l: 192 a: 921600
j: 184 k: 207 l: 12 a: 921600
j: 207 k: 221 l: 10 a: 921600
j: 226 k: 27 l: 75 a: 921600
j: 227 k: 21 l: 96 a: 921600
j: 237 k: 161 l: 12 a: 921600
j: 240 k: 159 l: 12 a: 921600
理论上随便选一组带进去就可以了
最后上最后在开发板上的代码,用led体现1s的延时
ORG 00HLJMP STARTORG 200H
START: MOV A,#01HLOOP: LCALL DelayCPL P2.0 SJMP LOOP Delay: MOV R5,#100
TIME1: MOV R6,#249
TIME2: MOV R7,#17
TIME3: DJNZ R7,TIME3 DJNZ R6,TIME2DJNZ R5,TIME1RET
演示:
1s_led
单片机原理及应用(1)--延时1s相关推荐
- 51单片机如何延时1s,让LED灯闪烁
精确地延时1s需要准确地计算,粗略地延迟1s可以自定义一个delay函数,下面我们让第一个LED灯延迟1s闪烁: //本题的delay函数参数为1时延迟的是1ms,1000是1s #include&l ...
- c51语言双层for循环延时2ms,51单片机利用for语句嵌套实现简单的延时1s功能
原标题:51单片机利用for语句嵌套实现简单的延时1s功能 51单片机利用for语句嵌套实现简单的延时1s功能 名词解释: (1)时钟周期.定义为时钟频率的倒数,本例使用12MHz的时钟频率,它的时钟 ...
- 单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字)
目录 一.实验要求 二.知识要点 (一)单片机定时器/计数器 (二)相关的特殊功能寄存器 1.工作方式寄存器TMOD 2.定时器/计数器控制寄存器TCON (三)定时器/计数器的工作方式 1.工作方式 ...
- 山东大学单片机原理与应用实验 3.2 拓展并行I/O口实验
目录 一.实验题目 二.实验要求 三.实验过程及结果记录 1. 在Proteus环境下建立原理图,如图1所示,并保存为expandIO.DSN文件. 2. 将实验代码写入文本文档,并保存为expand ...
- MSP430单片机原理及应用 实验
单片机原理及应用 课程实验(二) 实验项目:MSP430简单程序设计 实验目的:学会用C语言进行简单程序设计 实验要求:掌握编写排序程序 实验内容: (1)设计一个对8个数据(0-255,任意设置)的 ...
- 《单片机原理及应用》复习提纲
<单片机原理及应用>复习提纲 单片机应用系统的典型结构图 单片机应用系统核心硬件技术包括: 1.时序 2.中断 3.地址译码 单片机应用系统核心软件技术包括: 1.寻址方式.指令系统 ...
- 嵌入式技术(单片机原理)基本概念梳理(保研/考研面试)
嵌入式技术基础(单片机原理),常见概念及知识点整理(保研面试用). 目录 第1章 概论 第2章 MCS-51系列单片机的资源配置 第3章 MCS-51系列单片机的指令系统及汇编语言程序设计 第4章 单 ...
- [渝粤教育] 昆明理工大学 单片机原理及接口技术(宋庆和) 参考 资料
教育 -单片机原理及接口技术(宋庆和)-章节资料考试资料-昆明理工大学[] 1.4 发展趋势 1.[多选题]未来单片机发展趋势表现在以下几个方面 A.CPU流水线结构.增加数据总线的宽度提高运算速度和 ...
- 山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验
目录 一.实验题目 二.实验要求 三.实验过程及结果记录 1. 在Proteus 环境下建立图1所示原理图,并将其保存为keyscan_self.DSN 文件. 2. 编写控制源程序,将其保存为key ...
最新文章
- 13.angular时间
- 求出歌手的得分python_哪位大侠帮我做做python的题目啊,做其中5个就好。跪求啊...
- 卧式储罐液位体积计算公式excel_ELL外测式液位计在氢氟酸储罐上的实际应用
- 详测 Generics Collections TQueue (3): OnNotify、Extract
- 学习方法之02掌握记忆方法,在学习上就赢了一半
- Fiori Elements detail table data request logic
- LeetCode之Intersection of Two Arrays
- 数据结构专题(一):1.2.求元素个数,取元素与定位
- mysql 启动 内存_mysql启动内存的疑问
- 【docker系列】docker深入浅出之安装Nginx+PHP+MySQL
- 【java】java 安全 jaas 文件 何时 解析 以及 怎么解析的
- 谷歌logo的“前世今生”
- 第一章:J2EE高级软件工程师面试题集
- android4.4.3版本root,EMUI3.0 Android4.4.4以下完美ROOT教程
- Teamviewer检测为商业用途的解决方案
- Vue命令式弹窗组件如何实现?我很好奇
- c语言visit函数作用,[求助]二叉树遍历的程序里面的visit函数如何实现
- python收益风险点图_使用python matploblib库绘制准确率,损失率折线图
- 利用pip安装Django
- 企业怎么写出一篇优质的软文稿件