234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

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

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

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

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

    DELAY:   MOV R7,#250   ;(6)

    D1:   MOV R6,#250      ;(7)

    D2:   DJNZ R6,D2      ;(8)

    DJNZ R7,D1            ;(9)   

    RET                ;(10)

    〈单片机延时程序〉

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

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

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

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

    二、时序分析:

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

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

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

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

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

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

     如果你对上    面几句还是不 懂请看这里的一详解:http://www./mcu/1247.html

     关于用C语言写延时函数的一详解请看这:http://www./mcu/710.html

    练习:设计一个延时100毫秒的一延时程序 。

    要点分析:1、一个单元中的一数是否能超过255 。2、如何分配两个数 。

    三、复位电路

    一、复位方式

    ⒈ 复位条件
            RST引脚保持2个机器周期以上    的一高电平 。

    ⒉ 复位电路


    〈单片机复位电路〉

    ⒊ 复位后CPU状态

           PC:  0000H         TMOD: 00H

           Acc: 00H           TCON: 00H

           B:   00H           TH0:  00H

           PSW: 00H           TL0:  00H

           SP:  07H           TH1:  00H

           DPTR:0000H         TL1:  00H

           P0~P3:FFH         SCON: 00H

           IP:×××00000B    SBUF: 不 定

           IE:0××00000B     PCON: 0×××0000B

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

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

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

    文章评论