不知你外围电路,虽然每一句都 知道啥意思,但整体实现什么功能只能猜
可能 是将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
这个程序有问题的,使用了串口,但没有设置波特率,没有初始化工作方式等等。
狗急跳墙