<meta name="keywords" content="必胜时时彩开户,keywords" /> 4课:第一个单片机小法式模范 联系我们

4课:第一个单片机小法式模范模范

  上一次我们的法式模范模范着实是没甚么用,要灯亮还要重写一下片子,下面我们要让灯一连地闪灼,这就有一定的适用价值了,好比能把它算作汽车上的一个旌旗暗记灯用了。怎样才干让灯一连地闪灼呢?现实上就是要灯亮一段时间,再灭一段时间,也就是说要P10一连地输入高和低电平。怎样完成这个请求呢?请推敲用下面的指令能否可行:

SETB P1.0

CLR P1.0 ……

这是不行的,有两个效果,第一,盘算机推行指令的时间很快,推行完SETB P1.0后,灯是灭了,但在极短时间(微秒级)后,盘算机又推行了CLR P1.0指令,灯又亮了,以是根天职辨不出灯曾灭过。第二,在推行完CLR P10后,不会再去推行SETB P1.0指令,以是以后再也没无时机让灭了。

  为明确决这两个效果,我们能做以下设想,第一,在推行完SETB P1.0后,延时一段时间(几秒或零点几秒)再推行第二条指令,便可以分辨出灯曾灭过了。第二在推行完第二条指令后,让盘算机再去推行第一条指令,一连地在原地兜圈,我们称之为"循环",这样便可以完成义务了。

以下先给出法式模范模范(前面括号中的数字是为了便于解说而写的,现实不用输入):

;主法式模范模范:
LOOP: SETB P1.0    ;(1)熄灭灯
LCALL DELAY        ;(2)延时一段时间
CLR P1.0           ;(3)点亮灯
LCALL DELAY        ;(4)延时一段时间
AJMP LOOP          ;(5)跳转到第一句LOOP处

;以下子法式模范模范
DELAY: MOV R7,#250 ;(6)
D1: MOV R6,#250    ;(7)
D2: DJNZ R6,D2     ;(8)
       DJNZ R7,D1  ;(9)
       RET         ;(10)
END                ;(11)

本例keil工程文件点击这里下载

按下面的设想剖析一下前面的五条指令。

  第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条千篇一概,也是延时,第五条应当是转去推行第一条指令。第二和第四条完成的原理稍后谈,先看第五条,AJMP是一条指令,意思是转移,往甚么地方转移呢?前面跟的是LOOP,看一下,甚么地方尚有LOOP,对了,在第一条指令的前面有一个LOOP,以是很直不雅不雅地,我们能熟悉到,它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号,它的用处就是给这一行起一个名字,便于应用。能否一定要给它起名叫LOOP呢?虽然不是,起甚么名字,完全由编法式模范模范的人决议,能称它为A,X等等,虽然,这个时间,第五条指令AJMP前面的名字也得随着改了。

  第二条和第四条指令的用处是延时,它是怎样完成的呢?指令的形式是LCALL,这条指令称为挪用子法式模范模范指令,看一下指令前面跟的是甚么,DELAY,找一下DELAY,在第六条指令的前面,显着,这也是一个标号。这条指令的作用是这样的:当推行LCALL指令时,法式模范模范就转到LCALL前面的标号所标定的法式模范模范处推行,假定在推行指令的历程当中遇到RET指令,则法式模范模范就前往到LCALL指令的下面的一条指令一连推行,从第六行泉源的指令中,能看到确切有RET指令。在推行第二条指令后,将转去推行第6条指令,而在推行完6,7,8,9条指令后将遇到第10条令:RET,推行该条指令后,法式模范模范将回来推行第三条指令,行将P10清零,使灯亮,然后又是第四条指令,推行第四条指令就是转去推行第6,7,8,9,10条指令,然后回来推行第5条指令,第5条指令就是让法式模范模范回到第1条泉源推行,云云循环往复,灯就在一连地亮、灭了。

  在标号DELAY标志的这一行到RET这一行中的一切法式模范模范,这是一段延时法式模范模范,年夜概延时零点几秒,至于详细的时间,以后我们再学习若何盘算。 法式模范模范的最后一行是END,这不是一条指令,它只是告诉我们法式模范模范到此阻拦,它被称为"伪指令"。

   单片机外部结构剖析:为了知道延时法式模范模范是若何使命的,我们必须首先明确延时法式模范模范中泛起的一些符号,就从R1泉源,R1被称之为使命存放器。甚么是使命存放器呢?让我们从现实生涯中来找找谜底。假定出一道数学题:123+567,让你回复效果是若干,你会立时答出是690,再看下面一道题:123+567+562,要让你要上回复,就不这么不难了吧?我们会怎样做呢?假定有张纸,就不难了,我们先算出123+567=690,把690写在纸上,然后再算690+562取得效果是1252。这其中1252是我们想要的效果,而690着实不是我们所要的效果,然则为了取得事实效果,我们又不克不及不先算出690,并记上去,这现实上是一其中央效果,盘算机中做运算和这个类似,为了要取得事实效果,浅易要做许多步的中央效果,这些中央效果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中能吗?显着不行,由于盘算神秘将效果写出来,而ROM是不克不及写的,以是在单片机中尚有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它能将数据写出来。 特殊地,在MCS-51单片机中,将RAM中分出一块区域,称为使命存放器区,下面法式模范模范用到的R6,R7就是在这个区外面,这我们会在第7课有详细的简介。着实假定我们用C语言来写法式模范模范的话用基本不用明确使命存放器这个看法了由于C编译器会自动处置赏罚赏罚.看下面的法式模范模范假定用c来写就是

#include <at89x52.h>

void DELAY()   //延时函数
{ unsigned char i,j;
    for(i=0;i<250;i++)
    {
        for(j=0;j<200;j++);
    }
}

void main() //法式模范模范从这里泉源推行
{
while(1) //这句的作用就是重复的推行下面这个{}中网罗的4句
    {
     P1_0=1;  //(1)熄灭灯
     DELAY(); //(2)延时一段时间
     P1_0=0;  //(3)点亮灯
     DELAY(); //(4)延时一段时间
    }
}

   在汇编例子中法式模范模范是从第一条语句泉源推行的,而c不合在c语言里法式模范模范是从main() 这里泉源推行的,关于(1)(2)(3)(4) 这几句的诠释和下面的汇编一样,不再敖述。循环部门这里是用了一个while(1) 语句下面打了一个年夜括号,这样年夜括号中的这4条语句就会按(1)->(2)->(3)->(4) ->(1)->(2)->(3)->(4) ->(1)->(2)->(3)->(4)……永世一直的推行下去。这样灯就会一连的亮灭再亮再灭完成了闪灼效果,关于延时函数下节课再叙。有甚么不懂的年夜家可以不才面提问