您的位置 首页 技术

单片机实验二:闪耀的发光二极管

一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一…

一次咱们的程序实在是没什么用,要灯亮还要重写一下片子,下面咱们要让灯不断地闪耀,这就有必定的实用价值了,比方能够把它当成轿车上的一个信号灯用了。怎样才能让灯不断地闪耀呢?实践上便是要灯亮一段时刻,再灭一段时刻,也便是说要P10不断地输出高和低电平。怎样完成这个要求呢?请考虑用下面的指令是否可行:

SETB P1.0

CLR P1.0

……

这是不可的,有两个问题,榜首,核算机履行指令的时刻很快,履行完SETB P10后,灯是灭了,但在极短时刻(微秒级)后,核算机又履行了CLR P10指令,灯又亮了,所以底子分辩不出灯曾灭过。第二,在履行完CLR P10后,不会再去履行SETB P10指令,所以今后再也没有机会让灭了。

  为了处理这两个问题,咱们能够做如下想象,榜首,在履行完SETB P10后,延时一段时刻(几秒或零点几秒)再履行第二条指令,就能够分辩出灯曾灭过了。第二在履行完第二条指令后,让核算机再去履行榜首条指令,不断地在原地兜圈,咱们称之为”循环”,这样就能够完成任务了。

以下先给出程序(后边括号中的数字是为了便于解说而写的,实践不必输入):

;主程序:

LOOP: SETB P1.0     ;(1)

    LCALL DELAY   ;(2)

    CLR P1.0     ;(3)

    LCALL DELAY   ;(4)

    AJMP LOOP    ;(5)

;以下子程序

DELAY: MOV R7,#250  ;(6)

D1: MOV R6,#250    ;(7)

D2: DJNZ R6,D2    ;(8)

  DJNZ R7,D1     ;(9)

  RET         ;(10)

  END         ;(11)

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

  榜首条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条如出一辙,也是延时,第五条应当是转去履行榜首条指令。第二和第四条完成的原理稍后谈,先看第五条,LJMP是一条指令,意思是搬运,往什么当地搬运呢?后边跟的是LOOP,看一下,什么当地还有LOOP,对了,在榜首条指令的前面有一个LOOP,所以很直观地,咱们能够认识到,它要转到榜首条指令处。这个榜首条指令前面的LOOP被称之为标号,它的用处便是给这一行起一个姓名,便于运用。是否必定要给它起名叫LOOP呢?当然不是,起什么姓名,完全由编程序的人决议,能够称它为A,X等等,当然,这时,第五条指令LJMP后边的姓名也得跟着改了。

  第二条和第四条指令的用处是延时,它是怎样完成的呢?指令的方式是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得到成果是1552。这其间1552是咱们想要的成果,而690并非咱们所要的成果,可是为了得到终究成果,咱们又不得不先算出690,并记下来,这其实是一个中心成果,核算机中做运算和这个相似,为了要得到终究成果,往往要做很多步的中心成果,这些中心成果要有个当地放才行,把它们放哪呢?放在前面提到过的ROM中能够吗?明显不可,由于核算机要将成果写进去,而ROM是不能够写的,所以在单片机中还有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它能够将数据写进去。

  特别地,在MCS-51单片机中,将RAM中分出一块区域,称为作业寄存器区。

以下是它的a51文件:咱们把它的姓名叫作sy2.asm

LOOP: SETB P1.0
LCALL DELAY
CLR P1.0
LCALL DELAY
AJMP LOOP
DELAY: MOV R7,#250
D1:MOV R6,#250
D2:DJNZ R6,D2
DJNZ R7,D1
RET
END
以下是咱们用编译器编译过的HEX文件, 它就能够烧写啦。

:10000000D29012000CC29012000C01007FFA7EFA0E
:05001000DEFEDFFA2214
:00000001F

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/252461.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部