为广大电子爱好者提供技术实验平台

单片机程序简介

上一篇 / 下一篇  2008-02-21 00:19:46 / 个人分类:ele

    上一编我们做的程序是没什么用,要让灯持续地闪烁,当成一个信号灯用。就是要灯亮一段时间,再灭一段时间,也就是要P10持续地输出高和低电平。单用下面的指令是不行:

SETB P10

CLR P10 ……

这有两个问题,第一,计算机执行指令的时间很快,执行完SETB P10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完CLR P10后,不会再去执行SETB P10指令,所以以后再也没有机会让灭了。

  为了解决这两个问题,我们能做如下设定,第一,在执行完SETB P10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就能分辨出灯曾灭过了。第二在执行完第二条指令后,让单片机再去执行第一条指令,持续地在"循环",这样就能完成任务了。

以下先写出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):

;主程序:

RUN: SETB P10     ;(1)

    LCALL DELAY   ;(2)

    CLR P10     ;(3)

    LCALL DELAY   ;(4)

    AJMP RUN   ;(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是一条指令,意思是转移,往什么地方转移呢?后面跟的是RUN,看一下,什么地方还有RUN,对了,在第一条指令的前面有一个RUN,所以很直观地,我们能认识到,它要转到第一条指令处。这个第一条指令前面的RUN被称之为标号,它的用途就是给这一行起一个名字,便于使用。是否一定要给它起名叫RUN呢?当然不是,起什么名字,完全由编程序的人决定,能称它为A、B、。。。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+45,让你回答结果是多少,你会马上答出是168,再看下面一道题:123+45+418,要让你要上回答,就有点难了吧,但是如果有张纸,就不难了,我们先算出123+45=168,把168写在纸上,然后再算168+418得到结果是586。这其中586是我们想要的结果,而168并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出168,并记下来,这其实是一个中间结果,和计算机中的运算处理一样,为了要得到最终结果,一般要做很多步的中间结果,但是这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中能吗?显然不行,因为计算机要将结果写进去,而ROM是不能写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它能将数据写进去。特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区。

                摘自:单片机教程网。

     单片机


TAG:

在这里.在那里 引用 删除 若即若离   /   2008-02-23 19:08:05
有少少明白^
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-11-15  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

我的存档

数据统计

  • 访问量: 610
  • 日志数: 9
  • 图片数: 1
  • 建立时间: 2008-02-11
  • 更新时间: 2008-02-21

RSS订阅

Open Toolbar