📄 printerb.#2
字号:
;参考程序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 + -