×

芯片解密基础知识:单片机延时程序原因解析

我们已经知道,该程序符号R7版本R6的代表了一个月的内存模块,用来把一些数据,让我们再研究看看其他符号的含义。

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发射机通过了关于该指令的人数已省略(注:并不是每一条传递指令都会省的,事实上,大型的一部分数据传输指令,将交付人)。其意义也很清楚:数据发送到r7将在250去,因此本指引的实施目的,r7将单位价值应为250人。在1#250号码,而这又是什么意思面前?在#250是一个用来描述已获得通过,而不是运营商本身。然后检验手段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次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?我们还不知道,所以下面要来解决这个问题。

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

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

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

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

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

练习:设计一个延时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

在此之前任何单片机复位过程中应该有一个重置是什么意思?这就像我们打钟一前预备班。预备铃一响,操场自动从每个人,其他地方进入教室,并在这段时间,没有老师干预正当程序控制器,尚未开始,正在做准备工作。显然,并不需要准备太长的时间,复位时间只能是5毫秒。如何重置?只要在与微控制器的高,你可以RST引脚,并根据上述,不低于5ms。为满足这一要求,都可以使用,许多地方的做法为参考的供应量,如图1所示。事实上,我们计划在过去的实验是前所未见的。

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