?? printerb.asm
字號:
;參考程序B:PRINTERB.ASM程序功能:按下列格式打印出當前時間表:
;YEAR: 2005 (2005年)
;DATE: 10:05:05 ( 10月:6日:周5)
;CLOCK: 19:15:53 (19點:15分:53秒)
$include (c8051f020.inc)
ORG 00H ;PRINTERB.ASM
AJMP MAIN
ORG 100H
MAIN: LCALL PORTINT ;端口初始化.外設(打印機)和片外RAM是統一編址的.
ACALL PRINTERA
ACALL PRINT
STOP: AJMP STOP
PRINT: MOV A,#0AH ; 換行
LCALL PR
MOV A,#0DH ;回車
LCALL PR
MOV DPTR,#CLK ; 打印ASCII字符:"CLOCK: "
SC: CLR A
MOVC A,@A+DPTR
LCALL PR
INC DPTR
CJNE A,#20H,SC
; CLOCK
MOV R0,#71H ;打印 時:分:秒( "19:15:53: ")
MOV R5,#6
SS0: MOV A,@R0
ADD A,#30H ;轉換數值為ASCII碼
LCALL PR ;打印一個字符
INC R0
MOV A,R0
JNB ACC.0,SB ;在第1,3,5位之后應打印安": "號
MOV A,#3AH ;在第0,2,4位之后應不打印": "號
LCALL PR
SB: DJNZ R5,SS0
MOV A,#20H
LCALL PR
MOV A,#20H
LCALL PR
MOV A,#0DH
LCALL PR
MOV DPTR,#DATE ;打印ASCII字符:"DATE: "
SD: CLR A
MOVC A,@A+DPTR
LCALL PR
INC DPTR
CJNE A,#20H,SD
; DATE
MOV R0,#77H ;打印 月:日:周日:("10:6:5: ")
MOV R5,#5
SS1: MOV A,@R0
ADD A,#30H
LCALL PR
INC R0
MOV A,R0
JNB ACC.0,SA
MOV A,#3AH
LCALL PR
SA: DJNZ R5,SS1
MOV A,#20H
LCALL PR
MOV A,#20H
LCALL PR
MOV A,#0DH
LCALL PR
MOV DPTR,#YEAR ;打印ASCII字符:" YEAR: "
SE: CLR A
MOVC A,@A+DPTR
LCALL PR
INC DPTR
CJNE A,#20H,SE
; YEAR
MOV R0,#7CH ;打印年:("2003")
MOV R5,#4
SS2: MOV A,@R0
ADD A,#30H
LCALL PR
INC R0
DJNZ R5,SS2
MOV A,#0AH ;打印機換行
LCALL PR
MOV A,#0DH ; 打印機回車
LCALL PR
RET
PR: PUSH DPH ;打印子程序,要打引的字符在A中。
PUSH DPL
PUSH ACC
MOV DPTR,#8400H
Z: MOVX A,@DPTR ;讀忙碌位
JB ACC.4,Z ;判忙碌位置"1"否?
MOV DPTR,#8200H ;8200H為打印口
POP ACC
MOVX @DPTR,A ;開始打印A中的字符
POP DPL
POP DPH
RET
YEAR: DB 59H,45H,41H,52H,3AH,20H ; "YEAR:" ASCII 字符
DATE: DB 44H,41H,54H,45H,3AH,20H ;"DATE:" ASCII 字符
CLK: DB 43H,4CH,4FH,43H,4BH,3AH,20H ;"CLOCK:" ASCII 字符
PORTINT: ;端口初始化.外設(打印機)和片外RAM是統一編址的.
MOV WDTCN,#0DEH ;關閉看門狗
MOV WDTCN,#0ADH
MOV XBR2,#40H; 使能交叉開關,弱上拉
MOV P74OUT,#03FH ;設置P7為漏極開路,P4,P5,P6為推拉模式
MOV EMI0CF,#2CH ; EMIF工作在地址/數據復用方式,只用外部存儲器,
;ALE高/低脈寬占1個SYSCLK周期
MOV 0A1H,#6DH ;地址建立/保持時間占1個SYSCLK周期,
RET ;/WR和/RD占12個SYSCLK周期(EMIOTC)
PRINTERA: ; 子程序功能:在C8051F020的 RAM 71H~7FH中寫入要打印的數據.
MOV R7,#15 ;共寫入15個數
MOV R0,#71H ;從RAM 71H到80H共存入15個數值.
MOV DPTR,#TAB
SS: MOV A,#0
MOVC A,@A+DPTR ;查表.
MOV @R0,A
INC R0
INC DPTR
DJNZ R7,SS
RET
TAB: DB 01,09,01,05,05,03 ;19:15:53(時:分:秒)
DB 01,0,0,06,05 ;10:06:5:(月:日:周日)
DB 02,00,00,05 ;2005 (年)
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -