51单片机汇编代码-流水灯
一、基础指令集简介
汇编指令集是由芯片厂商制定的,其实际意义还是1和0。作为最接近硬件的程序语言,它能够帮助我们更容易理解微型计算机的运行原理。当然如果你能够对硬件有所了解,学习它必然是事半功倍的。
1、数据传递指令 mov
MOV A,Rn
Rn指的是通用寄存器R0-R7,将Rn寄存器中的内容放入累加器A中。
MOV A,direct
direct就是指的直接的地址,将该地址内的数据放入累加器A中。
MOV A,#data
#data为立即数(前面加#用于区分立即数和地址),将立即数送入累加器A中。
有下面历程被使用到:
MOV A,#0FEH
将立即数#0FEH放入累加器A中。第一个参数除累加器A外还可以为任意寄存器。
MOV R2,#7
将立即数7放入寄存器R2中。
MOV P2,A
将A的写入P2端口寄存器,从而控制引脚电平。
2、跳转指令
1.短转移类指令 AJMP addr11
2.长转移类指令 LJMP addr16
3.相对转移指令 SJMP rel
它们都用于指令跳转,从当前位置跳转到后面的地址位(一般为自己拟了名字的地址如DELAY:)。(它们的差别在于跳转的范围:LJMP一下能跳64Kb。而AJMP最多只能跳2Kb,而SJMP则最多只能跳256b)
常用的跳转指令还有ACALL
ACALL 使用范围是±2K范围,超出这个范围的调用将会出错,这时可以使用LCALL即长调用语句。
有下面历程被使用到:
ACALL DELAY
跳转到程序中的DELAY处去继续执行。
SJMP DOWN
跳转到程序中的DOWN处去继续执行。
3、位移指令
RL
是左移指令(参加左移的是8个位,也就是一个字节)
RR
是右移指令(参加左移的是8个位,也就是一个字节)
有下面历程被使用到:
RL A
将累加器A中的数据左移一位。
4、条件转移指令
循环转移指令 DJNZ Rn,rel
若寄存器Rn内的内容为0则跳转到rel(自己取的程序地址名)去执行。
有下面历程被使用到:
DJNZ R2,DOWN
若寄存器R2为0则跳转到DOWM去执行。
5、伪指令
是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,不生成机器代码。只用于帮助汇编器提供汇编信息。
ORG address
控制汇编程序最终运行在内存的address地址上。
name EQU expression
类似于宏定义,赋予前者另一个名字。
有下面历程被使用到:
ORG 30H
使该汇编程序被下载到目标机内存的30H处。
CLC1 EQU 200
让CLC1字符串拥有200的含义。
二、流水灯汇编源代码
程序源码:
ORG 30H
CLC1 EQU 200
CLC2 EQU 125
MOV R2,#7
MOV A,#0FEH
MOV P2,A
DOWN: RL A
ACALL DELAY
MOV P2,A
DJNZ R2,DOWN
MOV R2,#7
UP: RR A
ACALL DELAY
MOV P2,A
DJNZ R2,UP
MOV R2,#7
SJMP DOWN
DELAY: MOV R7,CLC2
DEL1: MOV R6,CLC1
DJNZ R6,$
DJNZ R7,DEL1
RET
END
其中符号$代表当前的指令所在的地址。
基本电路图:
注:该文章主要用于对51单片机汇编语句的入门学习。之后可根据个人需要进行系统性学习。