解释一下这个单片机程序。 ORG 0000H LJMP AAO ORG 0030H AAO: MOV P0,#0FFH AA4: MOV A,#0FEH AA5:MOV 30

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-31
解释一下这个单片机程序。 ORG 0000H LJMP AAO ORG 0030H AAO: MOV P0,#0FFH AA4: MOV A,#0FEH AA5:MOV 30

起始时将P0的8个管脚拉高,然后将P0.0置低,延时(BB0~3这段程序就是个延时作用),再将p0.1拉低,延时,将p0.3拉低,延时。。。。。。直到p0所有管脚都拉低,再回到AA4将p0.0保持低电平其他管脚拉高,延时,再将p0.1拉低。。。。。。然后一直重复以上的过程

ORG 0000H 初始化SP0000AJMP MAIN 跳到MAIN处执行ORG 30H 程序从30处开始MAIN:MOV P0,#00H 程序开始处P0口输出全低电平ACALL DEL (延时1秒子程序)MOV P0,#0FFH 程序开始处P0口输出全高电平ACALL DELDEL (延时1秒子程序)DEL(延时1秒子程序)RET 退出延时程序END 程序结束

接下来我逐行给你解释他们所表示的意思:
ORG 0000H ;起始地址
LJMP AAO ;跳转至 AAO执行程序
ORG 0030H ;程序数据开始地址(一般为30H,30H前的作为51的5个中断地址)
AAO: MOV P0,#0FFH ;将P0口置全1
AA4: MOV A,#0FEH ;将立即数0FE送至累加器A(然后再送给P0口)
AA5:MOV 30H,#7 ;循环次数1
AA1: MOV P0,A ;将0FE送给P0
LCALL BB0 ;调用延时程序
RL A ;循环左移累加器A及循环左移0FE(例:左移完一位的:0FD)
DJNZ 30H,AA1 ;判断循环1是否结束,若没有结束,跳转至AA1继续执行,若循环1结束,则往下执行
MOV 40H,#7 ;循环2(道理同上)
AA2:MOV P0,A
LCALL BB0
RR A ;循环右移
DJNZ 40H,AA2
LJMP AA4 ;跳转到AA4重新执行上述操作
BB0: MOV R0,#4 ;一下均为延时子程序的内容
BB1: MOV R1,#248
BB2: MOV R2,#250
NOP
BB3: DJNZ R2,BB3
DJNZ R1,BB2
DJNZ R0,BB1
RET
END

起始时将P0的8个管脚拉高,然后将P0.0置低,延时(BB0~3这段程序就是个延时作用),再将p0.1拉低,延时,将p0.3拉低,延时。。。。。。直到p0所有管脚都拉低,再回到AA4将p0.0保持低电平其他管脚拉高,延时,再将p0.1拉低。。。。。。然后一直重复以上的过程

支持二楼, 现在很多书,写代码,不写注解而且命名很规则很闹心, 所以要努力养成良好的代码风格