ORG 0000H
AJMP MAIN
ORG 30H
MAIN: MOV SP, #60H
MOV DPTR, #4100H
MOV A, #0fH
MOVX @DPTR, A
MOV 70H,#01H
MOV 71H,#02H
MOV 72H,#03H
MOV 73H,#04H
MOV 74H,#05H
MOV 75H,#06H
MOV 76H,#07H
MOV 77H,#08H
LOOP:ACALL DISPLAY
AJMP LOOP
DISPLAY:
MOV R0,#70H
MOV R3,#0feH
LD0: MOV DPTR, #4102H
MOV A, #0FFH
MOVX @DPTR, A
MOV A,@R0
MOV DPTR,#DISTAB
MOVC A,@A+DPTR
MOV DPTR,#4101H
MOVX @DPTR,A
MOV DPTR,#4102H
MOV A,R3
MOVX @DPTR,A
ACALL DELAY
INC R0
JNB ACC.7,LD1
RL A
MOV R3,A
AJMP LD0
LD1: RET
DISTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DELAY: MOV R7,#02h
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
AJMP MAIN //跳转到MAIN标志处执行
ORG 30H // 定义MAIN起始地址为0030H
MAIN: MOV SP, #60H //把立即数0x60植入SP
MOV DPTR, #4100H //送立即数4100H到DPTR
MOV A, #0fH //送立即数0fH到A寄存器
MOVX @DPTR, A //将A中的值送到以DPTR中的内容表示的外部地址中,即外部地址4100H中
MOV 70H,#01H
MOV 71H,#02H
MOV 72H,#03H
MOV 73H,#04H
MOV 74H,#05H
MOV 75H,#06H
MOV 76H,#07H
MOV 77H,#08H //以上均是把后面的立即数送到相对应的地址中
LOOP:ACALL DISPLAY //调用子函数,即DISPLAY标志处的程序段
AJMP LOOP //跳转到LOOP处执行,与上面那条构成循环调用DISPLAY
DISPLAY:
MOV R0,#70H //送立即数到R0寄存器
MOV R3,#0feH //送立即数到R3寄存器
LD0: MOV DPTR, #4102H //送立即数到DPTR寄存器
MOV A, #0FFH //送立即数0FFH到A寄存器
MOVX @DPTR, A //将A中的数0FFH送到以DPTR中的内容所表示的外部地址,即外部4102H地址处。
MOV A,@R0 // 将以R0中的内容所表示的地址中的内容送到A中,即地址(70H)中的数01H送到A中
MOV DPTR,#DISTAB //把DISTAB标志所处的地址送到DPTR中
MOVC A,@A+DPTR //查表。@A+DPTR即是取得(A+DPTR)地址中的内容。然后通过MOV指令送到A中。这条指令结合上面两条,及后面的那个INC R0 指令共同构成遍历DISTAB所表示的表。达到查表。
MOV DPTR,#4101H
MOVX @DPTR,A //与上面一句结合,达到把A中的内容送到外部地址4101H中。
MOV DPTR,#4102H //送立即数4102H到DPTR
MOV A,R3 // 把R3中的内容送到A中
MOVX @DPTR,A //把A中内容送到外部地址4102H中
ACALL DELAY //调用延时子函数DELAY,即跳到DELAY处执行
INC R0 //R0中的内容自增1
JNB ACC.7,LD1 //如果ACC.7这一位不为1,则跳到LD1标志处执行。
RL A //A中内容左移一位
MOV R3,A //送A中的内容到R3中
AJMP LD0 //跳到LD0标志处
LD1: RET //子函数返回指令
DISTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //定义一个表,相当于C语言中的数组。DB的意思是规定表中每个数占一个字节。
DELAY: //延时子函数
MOV R7,#02h //送立即数02H到R7中
DELAY1: MOV R6,#0FFH//送立即数0FFH到R6中
DELAY2: DJNZ R6,DELAY2 //R6中的数减1后如不为跳转到DELAY2处,本例中即继续执行这句,直到R6中内容为0.
DJNZ R7,DELAY1 //R7中的内容减一,不为零则跳转到DELAY1处
RET//延时子函数返回
END //程序结束
语言表达不好,解释的难免有点不周到,希望能够帮助LZ。
LZ加油!