汇编学习单片机,小小记录,点滴进步
实验目的:一个LED闪烁的简单实验
实验代码:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY
LJMP MAIN
DELAY: MOV R5,#04H
F3: MOV R6,#0FFH
F2: MOV R7,#0FFH
F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到
DJNZ R6,F2
DJNZ R5,F3
RET
END
代码解析:
ORG后面跟一个地址,是指该语句后的指令会放到这个地址里,一直顺序存放,直到END
ORG 0000H:程序从此地址开始运行
ORG 030H :在0000H到0030H之间,很多地址都是留给中断或者DOS保留的使用的,所以一般是从
0030H以后的地址开始,加一条跳转指令,跳转到 MAIN 程序处
LED原理图
现在要D8灯亮,则P1.0需要是低电平,CLR p1.0这条语句是将P1.0中的内容清零,高电平取反为低电平,这时候LED就亮,接着调用延时子程序,即将立即数传给寄存器R5,实现延时SETB p1.0是用来把其后面的寄存器的位置1,即将其变为高电平,这时候LED就不亮,紧接着继续调用延时程序
DJNZ指令的具体功能是使操作数的内容减1,并判断操作数是否等于0,如果不等于0,则跳转至标号处,如果等于0,则顺序往下执行。
#0FFH是单片机汇编语bai言程序中一个8位二进du制数的16进制表示方法,#表示这是一zhi个数字,0是汇编语言的规定,即当16进制数dao的高位数大于9时,前面要加0,FF是这个16进制数的数值,即255,H是16进制数的尾缀。
子程序F3来实现某个灯的熄灭和点亮,0FFH即11111111B,最后一个等D8点亮
|