位置:51电子网 » 技术资料 » 单 片 机

单片机的内外部结构分析(二)

发布时间:2008/5/27 0:00:00 访问次数:505

http://www.hificat.com

一、 程序的完善

  上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了。怎样才能让灯不断地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要p10不断地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:

setb p10

clr p10

……

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

  为了解决这两个问题,我们可以做如下设想,第一,在执行完setb p10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,不断地在原地兜圈,我们称之为"循环",这样就可以完成任务了。

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

;主程序:

loop: setb p10     ;(1)

    lcall delay   ;(2)

    clr p10     ;(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后面的名字也得跟着改了。

http://www.hificat.com

一、 程序的完善

  上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了。怎样才能让灯不断地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要p10不断地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:

setb p10

clr p10

……

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

  为了解决这两个问题,我们可以做如下设想,第一,在执行完setb p10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,不断地在原地兜圈,我们称之为"循环",这样就可以完成任务了。

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

;主程序:

loop: setb p10     ;(1)

    lcall delay   ;(2)

    clr p10     ;(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后面的名字也得跟着改了。

-->
相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!