ORG 0H ;程序從程序存儲器的0單元開始存放
AJMP MAIN ;跳轉到主程序
ORG 20H ;主程序從程序存儲器的30H單元開始存放
MAIN: MOV 30H,#0 ;給30H單元賦初始值0
LOOP: INC 30H ;30H單元內的數加1
MOV R1,30H ;將30H單元內的數賦值給R1,以便應用 CJNE Rn,#DATA,REL語言判斷并跳轉
CJNE R1,#10,NEXT ;若30H內的數不是10則跳轉到調用顯示
MOV 30H,#0 ;若30H內的數是10,則清零
NEXT: ACALL DISPLAY ;調用顯示子程序
ACALL L2025
SJMP LOOP ;跳轉到加1部分,循環
DISPLAY:MOV R2, #8
MOV R0,#30H ;將顯示數據的存放首單元賦值給R0,以便調用循環將數值賦值給A
MOV DPTR,#TABLE ;將顯示碼的首地址賦值給DPTR
DISLOP: MOV A,@R0 ;將以R0內的數30H內的數值賦值給A
MOVC A,@A+DPTR ;查表語句,將顯示碼賦值給A
DP2: RLC A ;帶進位標志的左移操作
MOV P1.0,C ;串行輸出一位段碼數據
CLR P1.1 ;
SETB P1.1 ;來個上升沿以產生移位時鐘, 每次來這個脈沖,移位寄存器上的數往后面移動一位,原來A=1,
DJNZ R2,DP2
RET
;子程序返回
L2025: MOV R6,#28H ; 延時子程序
L2027: MOV R7,#0F9H
L2029: DJNZ R7,$
DJNZ R6,L2027
DJNZ R5,L2025
RET
TABLE:
DB 40H,79H,24H,30H,19H, 12H,02H,78H,00H,10H
END ;程序結束
|