51单片机汇编语言教程:4课第一个单片机小程序.pdfVIP

  • 4
  • 0
  • 约2.71千字
  • 约 2页
  • 2019-07-08 发布于江苏
  • 举报

51单片机汇编语言教程:4课第一个单片机小程序.pdf

51单片机汇编语言教程-由慧净助学会员收集整理 (全部28课) 51单片机汇编语言教程:第4课-第一个单片机小程序 (基于HJ-1G、HJ-3G实验板) 上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯持续地 闪烁,这就有一定的实用价值了,比如能把它当成汽车上的一个信号灯用了。怎样才能让灯 持续地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10持续地输出高 和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行: SETB P10 CLR P10 …… 这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETB P10后,灯是 灭了,但在极短时间(微秒级)后,计算机又执行了CLRP10指令,灯又亮了,所以根本分 辨不出灯曾灭过。第二,在执行完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后面的名字也得跟 着改了。 第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是LCALL,这条指 令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指 令的前面,显然,这也是一个标号。这条指令的作用是这样的:当执行LCALL指令时,程序 就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则 51 51 WWW.HLMCU.COM / 推荐使用慧净 实验板。推荐 学习网 淘宝网: 51单片机汇编语言教程-由慧净助学会员收集整理 (全部28课) 程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,能看到确实 有RET指令。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条 指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10 清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条 指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复 始,灯就在持续地亮、灭了。 在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时 零点几秒,至于具体的时间,以后我们再学习如何计算。 程序的最后一行是END,这不是 一条指令,它只是告诉我们程序到此结束,它被称为伪指令。 单片机内部结构分析:为了知道延时程序是如

文档评论(0)

1亿VIP精品文档

相关文档