版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、- -谈谈单片机延时子程序谈谈51单片机延时子程序延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的根本概念、机器周期和指令周期的区别和联系、相关指令的用法等用图解法的形式详尽的答复读者我们知道程序设计是单片机开发最重要的工作,而程序在执行过程中常常需要完成延时的功能。例如在交通灯的控制程序中,需要控制红灯亮的时间持续30秒,就可以通过延时程序来完成。延时程序是如何实现的呢?下面让我们先来了解一些相关的概念。一、机器周期和指令周期1机器周期是指单片机完成一个根本操作所花费的时间,一
2、般使用微秒来计量单片机的运行速度,51 单片机的一个机器周期包括12 个时钟振荡周期,也就是说如果51 单片机采用12MHz 晶振,那么执行一个机器周期就只需要1s;如果采用的是6MHz 的晶振,那么执行一个机器周期就需要2 s。2 指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。在51 单片机里有单周期指令执行这条指令只需一个机器周期,双周期指令执行这条指令只需要两个机器周期,四周期指令执行这条指令需要四个机器周期。除了乘、除两条指令是四周期指令,其余均为单周期或双周期指令。也就是说,如果51 单片机采用的是12MHz 晶振,那么它执行一条指令一般只需12
3、 微秒的时间;如果采用的是6MH 晶振,执行一条指令一般就需24 微秒的时间。现在的单片机有很多种型号,但在每个型号的单片机器件手册中都会详细说明执行各种指令所需的机器周期,了解以上概念后,那么可以依据单片机器件手册中的指令执行周期和单片机所用晶振频率来完成需要准确延时时间的延时程序。二、延时指令在单片机编程里面并没有真正的延时指令,从上面的概念中我们知道单片机每执行一条指令都需要一定的时间,所以要到达延时的效果,只须让单片机不断地执行没有具体实际意义的指令,从而到达了延时的效果。1数据传送指令 MOV数据传送指令功能是将数据从一个地方复制、拷贝到另一个地方。如:MOV R7,#80H ;将数
4、据80H 送到存放器R7,这时存放器R7 里面存放着80H,就单这条指令而言并没有任何实际意义,而执行该指令那么需要一个机器周期。2空操作指令 NOP空操作指令功能只是让单片机执行没有意义的操作,消耗一个机器周期。3循环转移指令 DJNZ循环转移指令功能是将第一个数进展减1 并判断是否为0,不为0 那么转移到指定地点;为0 那么往下执行。如:DJNZ R7,KK ;将存放器R7 的内容减1 并判断存放器R7 里的内容减完1 后是否为0,如果不为0 那么转移到地址标号为KK 的地方;如果为0 那么执行下一条指令。这条指令需要2 个机器周期。利用以上三条指令的组合就可以比较准确地编写出所需要的延时
5、程序。三、1 秒延时子程序、流程图及时间计算以单片机晶振为12MHz 为例,1 个机器周期需要1s了解了以上的内容,现在让我们来看看程序总共所需时间:1+10+2560+330240+660480+5120+20+2=998433 s1S在这里运行这段程序共需998433 s,还差1567s 才到达1S 的,所以想要到达完美的1S 延时,需要在返回指令RET 前再添加一些指令让它把1567s 的延时完成。有兴趣的读者可以自己试着添加完成。最后补充一点,编写程序时一般将延时程序编写成独立的子程序,而所谓子程序也就是一个实现某个功能的小模块。这样在主程序中就可以方便地反复调用编写好的延时子程序。小
6、提示:循环转移指令DJNZ 除了可以给定地址标号让其跳转外,还可以将地址标号改成$,这样程序就跳回本指令执行。例如:DJNZ R7,$ ;R7 内容减1 不为0,那么再次执行本指令;为0 那么往下执行,当R7 的值改为10时,那么执行完该条程序所需的时间为2*10=20 s。51单片机汇编延时程序算法详解将以12MHZ晶振为例,详细讲解MCS-51单片机中汇编程序延时的准确算法。指令周期、机器周期与时钟周期指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。时钟周期:也称为振荡周期,一个时钟周期晶振的倒数。MCS-51单片机的一个机器周
7、期=6个状态周期=12个时钟周期。MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽一样,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*1/12000000=1s。程序分析例1 50ms 延时子程序:DEL:MOV R7,#200 DEL1:MOV R6,#125 DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET 准确延时时间为:1+1*200+2*125*200+2*200+2=2*125+3*200+3 =50603s50ms由整理出公式只限上述写法延时时间=2*内循环+3*外循环+3 详解:DEL这个子程
8、序共有五条指令,现在分别就每一条指令被执行的次数和所耗时间进展分析。第一句:MOV R7,#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1s第二句:MOV R6,#125 从看到只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200s第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句内循环R6次,又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时2*R6*R7s。例2 1秒延时子程序:DEL:MOV R7,#10 DEL1:MOV R6,#200 DEL2:MOV R5,#248 DJNZ R5,$ DJNZ R6,DEL2 DJN
9、Z R7,DEL1 RET 对每条指令进展计算得出准确延时时间为:1+1*10+1*200*10+2*248*200*10+2*200*10+2*10+2=2*248+3*200+3*10+3 =998033s1s由整理得:延时时间=2*第一层循环+3*第二层循环+3*第三层循环+3 此式适用三层循环以内的程序,也验证了例1中式第三层循环相当于1的成立。注意,要实现较长时间的延时,一般采用多重循环,有时会在程式序里参加NOP指令,这时公式不再适用,下面举例分析。例3仍以1秒延时为例DEL:MOV R7,#10 1指令周期1DEL1:MOV R6,#0FFH 1指令周期10DEL2:MOV R5
10、,#80H 1指令周期255*10=2550KONG:NOP 1指令周期128*255*10=326400DJNZ R5,$ 2指令周期2*128*255*10=652800DJNZ R6,DEL2 2指令周期2*255*10=5110DJNZ R7,DEL1 2指令周期2*10=20RET 2延时时间=1+10+2550+326400+652800+5110+20+2 =986893s约为1s整理得:延时时间=3*第一层循环+3*第二层循环+3*第三层循环+3 结论:针对初学者的困惑,对汇编程序的延时算法进展了分步讲解,并就几种不同写法分别总结出相应的计算公式,只要仔细阅读例1中的详解,并用
11、例2、例3来加深理解,一定会掌握各种类型程序的算法并加以运用。单片机延时子程序1)延时为:20ms 晶振12M1+(1+2*248+2)*4+1+1+1=20000US=20MS用汇编.优点就是准确.缺点就是算有点复杂.DELAY20MS:MOV R7,#4D1:MOV R6,#248DJNZ R6,$DJNZ R7,D1NOPNOPRET2一些通过计算51汇编指令得出的软延时子程序;* ;延时10uS ;* time10us: mov r5,#05h ;11us djnz r5,$ ret ;* ;延时50uS ;* t ime50us: mov r5,#19h ;51us djnz r5,
12、$ ret ;* ;延时100uS ;* time100us: mov r5,#31h ;99.6us djnz r5,$ ret ;* ;延时200uS ;* time200us: mov r5,#64h ;201us djnz r5,$ ret ;* ;延时250uS ;* time250us: mov r5,#7ch ;249.6us djnz r5,$ ret ;* ;延时350uS ;* time350us: mov r5,#0afh ;351us time350us_1: djnz r5,time350us_1 ret ;* ;延时500uS ;* time500us: mov r
13、5,#0fah ;501us time500us_1: djnz r5,time500us_1 ret ;* ;延时1mS ;* time1ms: mov r5,#0fah ;1001us time1ms_1: nop nop djnz r5,time1ms_1 ret ;* ;延时2.5mS ;* time2_5ms: mov r5,#05h ;2.496ms time2_5ms_1: mov r6,#0f8h ;497us djnz r6,$ djnz r5,time2_5ms_1 ret ;* ;延时10mS ;* time10ms: mov r5,#14h ;10.262ms time
14、10ms_1: mov r6,#0ffh ;511us djnz r6,$ djnz r5,time10ms_1 ret ;* ;延时50mS ;* time50ms: mov r5,#63h ;49.996ms time50ms_1: mov r6,#0fbh ;503us djnz r6,$ djnz r5,time50ms_1 ret ;* ;延时100mS ;* time100ms: mov r5,#0c3h ;100.036ms time100ms_1: mov r6,#0ffh ;511us djnz r6,$ djnz r5,time100ms_1 ret ;* ;延时200mS
15、 ;* time200ms: mov r5,#02h ;250.351ms time200ms_1: mov r6,#0f4h ;125.173ms time200ms_2: mov r7,#0ffh ;511us djnz r7,$ djnz r6,time200ms_2 djnz r5,time200ms_1 ret ;* ;延时500mS ;* time500ms: mov r5,#04h ;500.701ms time500ms_1: mov r6,#0f4h ;125.173ms time500ms_2: mov r7,#0ffh ;511us djnz r7,$ djnz r6,t
16、ime500ms_2 djnz r5,time500ms_1 ret ;* ;延时1S ;* time1s: mov r5,#08h ;1001.401ms time1s_1: mov r6,#0f4h ;125.173ms time1s_2: mov r7,#0ffh ;511us djnz r7,$ djnz r6,time1s_2 djnz r5,time1s_1 ret12M晶振机器周期为为单周期指令为双周期指令3;晶振12MHZ,延时1秒DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOO
17、P0 NOP DJNZ 71H,LOOP1 MOV 70H,#46 LOOP2:DJNZ 70H,LOOP2 NOP DJNZ 72H,LOOP3 MOV 70H,#48 LOOP4:DJNZ 70H,LOOP44;延时1分钟子程序,F=6MHz;程序已测过,延时时间60,000,000.0uSdelay60s:mov r3,#228mov r2,#253mov r1,#219loop1: djnz r1,$djnz r2,loop1djnz r3,loop1nopret5计算机反复执行一段程序以到达延时的目的称为软件延时,单片机程序中经常需要短时间的延时,但是相当一局部人对延时程序很模糊,对
18、延时程序的算法不够了解,在这里我以12MHz晶振和两个经典延时子程序为例,详细分析单片机汇编延时程序。何为时钟周期、机器周期、和指令周期?时钟周期:也就是振荡周期,以12MHz的时钟脉冲为例,那时钟周期就为1/12000000s=1/12us;机器周期:1个机器周期=6个状态周期=12个时钟周期=1us;指令周期:CPU执行一条指令所需要的时间称为指令周期,指令周期是以机器周期为单位的,不同的指令所需的机器周期不一定一样,可参考51单片机指令速查表。由上可得:CPU执行一条单周期指令,需要1us;执行一条双周期指令需要2us。下面是具体的延时子程序分析:0.1s延时子程序12MHz晶振:MOV R7,#200 ;单周期指令1usD1: MOV R6,#250 ;单周期指令1usDJNZ R6,$ ;双周期指令2us/该指令自身执行R6次DJNZ R7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度物流仓储用地承包租赁合同(2024版)4篇
- 2025年度新型储藏室与车位投资合作合同模板4篇
- 2025年度新能源汽车充电桩承债式公司股权转让合同4篇
- 2025年度文化演艺场馆承包经营合同4篇
- 2025年度土地整治与生态修复项目承包合同4篇
- 2024通信线路施工及改造分包合同范本3篇
- 2025年度生态环保工程承包商工程款支付担保协议4篇
- 2025年度历史文化街区保护项目房屋拆迁补偿合同2篇
- 2025年度住宅小区配套停车场车位代理销售协议4篇
- 2025年度星级酒店厨师团队合作协议4篇
- 土壤农化分析课件
- 小区大型团购活动策划
- NEC(新生儿坏死性小肠结肠炎)92273
- 2023年租赁风控主管年度总结及下一年展望
- 开关插座必看的七个安全隐患范文
- 高分子成型加工课件
- 消防救援-低温雨雪冰冻恶劣天气条件下灾害防范及救援行动与安全
- 硅石项目建议书范本
- 概率论在金融风险评估中的应用研究
- 住院医疗互助给付申请书
- 外墙外保温工程检验批质量验收记录表
评论
0/150
提交评论