求大神讲一下这个程序是如何运行的,每一步什么意思…单片机老师下午

求大神讲一下这个程序是如何运行的,每一步什么意思…单片机老师下午提问啊,要人命!

ORG 0000H
AJMP START
START: MOV SP,#60H
MOV SCON,#00H
MOV SBUF,#3FH
MOV DPTR,#TABLE
MOV 50H,#00H
MOV 51H,#00H
CLR TI
LOOP1: MOV A,P1
ANL A,#0FH
MOV 50H,A
MOV A,P1
ANL A,#0F0H
SWAP A
MOV 51H,A
LOOP2: MOV A,50H
MOVC A,@A+DPTR
MOV SBUF,A
SETB P0.2
ACALL DELAY
CLR P0.2
CLR TI
MOV A,51H
MOVC A,@A+DPTR
MOV SBUF,A
SETB P0.4
ACALL DELAY
CLR P0.4
CLR TI
AJMP LOOP1
DELAY:MOV R7,#20
DELAY1:MOV R6,#20
DELAY2:MOV R5,#10
DJNZ R5,$
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H
DB 0A1H,086H,08EH
RET
END

不知你外围电路,虽然每一句都 知道啥意思,但整体实现什么功能只能猜
可能 是将P1的状态以十六进制显示在2个数码管上
ORG 0000H 程序开始地址0000
AJMP START 跳转
START: MOV SP,#60H,移SP堆栈指针至#60H
MOV SCON,#00H 串口工作方式0 移位寄存器方式

MOV SBUF,#3FH 先让串口发送数据3FH
MOV DPTR,#TABLE 表格首地址送DPTR寄存器
MOV 50H,#00H 清空50和51存储单无
MOV 51H,#00H
CLR TI 清除串口发送完成标志
LOOP1: MOV A,P1 读P1状态
ANL A,#0FH 取低4位
MOV 50H,A 送50H单元
MOV A,P1 再 读P1状态
ANL A,#0F0H 取高4位
SWAP A 高低字节交换 ,将有效数据移至低4 位以发便查表
MOV 51H,A 送50H单元
LOOP2: MOV A,50H 取50单元数据(P1低4位)
MOVC A,@A+DPTR 查表可能是获得七段码
MOV SBUF,A 将七段码通过串口发出
SETB P0.2 可能是打开数码管
ACALL DELAY 延时
CLR P0.2 关闭数码管
CLR TI 清除串口发送完成标志
MOV A,51H 取51单元数据(P1高4位)
MOVC A,@A+DPTR 同上面一样查表
MOV SBUF,A
SETB P0.4
ACALL DELAY
CLR P0.4
CLR TI
AJMP LOOP1 跳转加去,反复进行
DELAY:MOV R7,#20 三重延时子程序
DELAY1:MOV R6,#20
DELAY2:MOV R5,#10
DJNZ R5,$ 该句反复运行20×20×10次
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET 子程序 返回
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H
DB 0A1H,086H,08EH 可能是共阳七段码表格
RET 如果是主程序的话,该句没有用
END追问

从这里面可以学到什么

追答

可以学到串口的移位寄存器工作方式 查表方法 子程序调用等

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-15
这个程序有问题的,使用了串口,但没有设置波特率,没有初始化工作方式等等。追问

不会吧 都仿真过了

本回答被网友采纳
第2个回答  2016-11-15
狗急跳墙