(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> 基础教程 >> 浏览文章

5课:单片机延时程序分析

作者:佚名   来源:本站原创   点击数:x  更新时间2007年08月16日   字体

上一次课中我们已经知道程序中的符号R7R6是代表了一个个的RAM单元是用来放一些数据的下面我们再来看一下其它符号的含义

DELAY:   MOV R7#250 ;(6)

D1:   MOV R6#250    ;(7)

D2:   DJNZ R6D2   ;(8)

DJNZ R7D1         ;(9)

RET         ;(10)

单片机延时程序

  MOV这是一条指令意思是传递数据说到传递我们都很清楚传东西要从一本人的手上传到另一本人的手上也就是说要有一个接受者一个传递者和一样东西从指令MOV R7#250中来分析R7是一个接受者250是被传递的数传递者在这条指令中被省略了注意并不是每一条传递指令都会省的事实上大部份数据传递指令都会有传递者它的意义也很明显将数据250送到R7中去因此执行完这条指令后R7单元中的值就应当是250在250前面有个#号这又是什么意思呢这个#就是用来说明250就是一个被传递的东西本身而不是传递者那么MOV R6#250是什么意思应当不用分析了吧

  DJNZ这是另一条指令我们来看一下这条指令后面跟着的两个东西一个是R6一个是D2R6我们当然已知是什么了查一下D2是什础D2在本行的前面我们已学过这称之为标号标号的用途是什么呢就是给本行起一个名字DJNZ指令的执行过程是这样的它将其后面的第一个参数中的值减1然后看一下这个值是否等于0如果等于0就往下执行如果不等于0就转移转到什么地方去呢可能大家已猜到了转到第二个参数所指定的地方去请大家用自已的话讲一下这条语句是怎样执行的本条指令的最终执行结果就是在原地转圈250次

  执行完了DJNZ R6D2之后也就是R6的值等于0之后就会去执行下面一行也就是DJNZ R7D1请大家自行分析一下这句话执行的结果转去执行MOV R6#250同时R7中的值减1最终DJNZ R6D2这句话将被执行250*250=62500次执行这么多次同一条指令干吗就是为了延时

一个问题如果在R6中放入0会有什么样的结果

二时序分析

  前面我们介绍了延时程序但这还不完善因为我们只知道DJNZ R6D2这句话会被执行62500次但是执行这么多次需要多长时间呢是否满足我们的要求呢课们还不知道所以下面要来解决这个问题

  先提一个问题我们学校里什么是最重要的铃声校长能出差老师能休息但学校一日无铃声必定大乱整个学校就是在铃声的统一指挥下步调一致统一协调地工作着这个铃前一定的时间安排来响的我们能称之为“时序��时间的次序”一个由人组成的单位尚且要有一定的时序计算机当然更要有严格的时序事实上计算机更象一个大钟什么时候分针动什么时候秒针动什么时候时针动都有严格的规定一点也不能乱计算机要完成的事更复杂所以它的时序也更复杂

  我们已知计算机工作时是一条一条地从ROM中取指令然后一步一步地执行我们规定计算机访问一次存储器的时间称之为一个机器周期这是一个时间基准好象我们人用“秒”作为我们的时间基准一样为什么不干脆用“秒”多好很习惯学下去我们就会知道用“秒”反而不习惯

一个机器周期包括12个时又期下面让我们算一下一个机器周期是多长时间吧设一个单片机工作于12M晶体震荡器它的时又期是1/12微秒它的一个机器周期是12*1/12也就是1微秒请计算一个工作于6M晶体震荡器的单片机它的机器周期是多少

  MCS-51单片机的所有指令中有一些完成得比较快只要一个机器周期就行了有一些完成得比下得要2个机器周期还有教指令要4个机器周期才小这也不难再解不是吗课让你扫地的执行要完成总得比要你完成擦黑板的指令时间要长为了恒量指令执行时间的长短又引入一个新的概念指令周期所谓指令周期就是指执行一条指令的时间INTEL对每一条指令都给出了它的指令周期数这些数据大部份不需要我们去且䣬但是有一些指令是需要记住的如DJNZ指令是双周期指令

  下面让我们来计算刚才的延时首先必须要知道晶体震荡器的频率我们设所用晶体震荡器为12M则一个机器周期就是1微秒而DJNZ指令是双周期指令所以执行一我2个微秒一共执行62500次正好125000微秒也就是125毫秒

 如果你对上面几句还是不懂请看这里的详解
单片机复位电路

复位后CPU状态

       PC  0000H         TMOD 00H

       Acc 00H           TCON 00H

       B   00H           TH0  00H

       PSW 00H           TL0  00H

       SP  07H           TH1  00H

       DPTR0000H         TL1  00H

       P0P3FFH         SCON 00H

       IP×××00000B    SBUF 不定

       IE0××00000B     PCON 0×××0000B

  任何单片机在工作之前都要有个复位的过程复位是什么意思呢它就象是我们上课之前打的预备铃预备铃一响大家就自动地从操场其它地方进入教室了在这一段时间里是没有老师干预的对单片机来说是程序还没有开始执行是在做准备工作显然准备工作不需要太长的时间复位只需要5ms的时间就能了如谓行复位呢只要在单片机的RST管脚上加上高电平就能了按上面所说时间不少于5ms为了达到这个要求能用很多种办法这里供给一种供参考见图1实际上我们在上一次实验的图中已见到过了

  这指位电路的工作原理是和电时电容两端相当于是短路于是RST管脚上为高电平然后电源通过电阻对电容充电RST端电压慢慢下降降到一定程序次低电平单片机开始正常工作

发表评论告诉好友收藏此文关闭窗口

文章评论

Ƶ