ORG 00H
START:
MOV DPTR, #TABLE ; 将表TABLE的地址存入DPTR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 装表;;;;;;;;;;;;;;;;;;;;;;;
LOOP:
CLR A ; 清除ACC累加器,清零
MOVC A, @A+DPTR ; 基址加变址寻址,取出表数据
CJNE A, #01H,LOOP_1 ; 如果取出01H表明取完,否则跳到LOOP_1
JMP START ; 跳回START
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 取表判断;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP_1:
MOV P0, A ; 将A输出到P0口,低电平
MOV R3,#20 ; 延时0.2秒
CALL DELAY ; 调用延时子程序
INC DPTR ; 数据指针加1,取数据表下一个数据
JMP LOOP ; 间接跳转到LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY: ; 延时子程序
MOV R4, #20
D1:
MOV R5, #248
DJNZ R5, $
DJNZ R4, D1
DJNZ R3, DELAY
RET ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 以下是该程序数据表;;;;;;;;;;;;;;;;;;;;
TABLE:
DB 0FEH, 0FDH, 0FBH, 0F7H ; 左移
DB 0EFH, 0DFH, 0BFH, 07FH
DB 07FH, 0BFH, 0DFH, 0EFH ; 右移
DB 0F7H, 0FBH, 0FDH, 0FEH
DB 01H ; 结束码
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
程序利用MOV DPTR, #TABLE使数据指针寄存器DPTR指到表的开头;利用MOV A,@A+DPTR指令,根据累加器的值再加上DPTR的值,就可以使程序计数器PC到数据表内取出相应数据,并从I/O口送出显示。