📄 ltp1245.a51
字号:
ERR03:
CLR E_RAMERROR ;外存错
LJMP ERRRET
ERR04:
NOP ;打印队列满
LJMP ERRRET
ERR05:
CLR NODEF4 ;收据头校验错
LJMP ERRRET
ERR06:
CLR NODEF1 ;未定义
LJMP ERRRET
ERR07:
CLR NODEF5
LJMP ERRRET
ERR08:
SETB P1.6 ;打印头过热
CLR PE ;数据寄存(缺纸)
SETB PERR_ ;加热驱动
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
MOV R7, #ADCH0 ;常数 11000000B
LCALL AD
; mov r7, #80 ;DZHB 01-8-21 11:25
LCALL TEMP_COMP ;温度补偿
MOV A, R7
MOV TX, A
CLR C
SUBB A, #45
JC ERR08_0
CLR P1.6
CLR HEAD_HEAT
SETB PE ;数据寄存(缺纸)
SETB PERR_
SETB CVP ;打印机上电
MOV DPTR,#WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
SJMP ERR08_1
ERR08_0:
MOV A, R7
CLR C
SUBB A, #24
JNC ERR08_2
CLR CVP
ERR08_2:
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
ERR08_1:
LJMP ERRRET
ERR09:
SETB P1.6 ;打印头开路
CLR PE ;数据寄存(缺纸)
SETB PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
MOV R7, #ADCH0
LCALL AD
; mov r7, #80 ;DZHB 01-8-21 11:25
LCALL TEMP_COMP ;温度补偿
MOV A, R7
MOV TX, A
CLR C
SUBB A, #232
JNC ERR09_1
SETB PE ;数据寄存(缺纸)
SETB PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
CLR P1.6
CLR HEAD_OPEN
ERR09_1:
LJMP ERRRET
ERR0A:
CLR CVP ;电压非正常标志,为1出错
CLR PE ;数据寄存(缺纸)
SETB PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
MOV R7, #ADCH1 ;常数 11100000B
LCALL AD
; mov r7, #200 ;DZHB 01-8-21 11:25
MOV A, R7
MOV VP, A
CLR C
SUBB A, #142
JNC ERR0A_1
SJMP ERR0A_2
ERR0A_1:
SUBB A, #243
JNC ERR0A_2
SETB CVP
SETB PE ;数据寄存(缺纸)
SETB PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
CLR VPABNORM ;电压非正常标志,为1出错
ERR0A_2:
LJMP ERRRET
ERR0B:
JB CONFIRM, ERR0B_2 ;没纸
MOV R4, #04H
ERR0B_0:
MOV R7, #48
LCALL FASTGO ;快速走纸,R7(快速走纸行数) ,R6(最快速度)
JNB P3.2, ERR0B_3 ;P3.2 没纸
LCALL RUNSTOP ;有纸
LJMP ERR0B_4
ERR0B_3:
DJNZ R4, ERR0B_0
LCALL RUNSTOP
SETB CONFIRM ;没纸
ERR0B_2:
SETB P1.6 ;BUSY
SETB PE ;数据寄存(缺纸)
CLR PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A ;打印机回送状态:缺纸
JNB P3.2, ERR0B_1
ERR0B_4:
CLR NOPAPER
CLR P1.6 ;BUSY
CLR CONFIRM ;有纸
SETB PE ;数据寄存(缺纸)
SETB PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A ;打印机回送状态:正常
ERR0B_1:
LJMP ERRRET
ERR0C:
SETB P1.6 ;打印头末放下
CLR PE ;数据寄存(缺纸)
CLR PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A ;打印机回送状态:其它错误
MOV R2, #03H
ERR0C_2:
JNB P1.7, ERR0C_1 ;P1.7 打印头末放下
DJNZ R2, ERR0C_2
CLR NODOWN
CLR P1.6
SETB PE ;数据寄存(缺纸)
SETB PERR_
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
ERR0C_1:
LJMP ERRRET
ERR0D:
CLR NODEF2 ;未定义
SJMP ERRRET
ERR0E:
CLR NODEF3 ;未定义
SJMP ERRRET
ERR0F:
CLR OTHERERROR
ERRRET:
POP 2
POP ACC
RET
;执行对应命令子程序
;入口: ORDBUF(命令序列首地址)
;出口: ORDFLAG(ORDFLAG=0, 命令执行完毕; ORDFLAG=0FFH,命令未执行完).
EXECUTE:
MOV DPTR, #ORDBUF
MOVX A, @DPTR
MOV R1, A
MOV R2, #00H
MOV DPTR, #ORDTAB1 ;相对应的命令处理入口表
EXECUT0:
MOV A, R2
MOVC A,@A+DPTR
CJNE A, #0FFH, EXECUT1
MOV R6, #02H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXECUT1:
CJNE A, 1, EXECUT2
INC R2
MOV A, R2
MOVC A, @A+DPTR
MOV B, A
INC R2
MOV A, R2
MOVC A, @A+DPTR
PUSH ACC ;子程序首址低8位入栈
PUSH 0F0H ;子程序首址高8位入栈 PUSH B
RET ;转相应命令子程序
EXECUT2:
INC R2
INC R2
INC R2
SJMP EXECUT0
ORDTAB1: ;相对应的命令处理入口表
DB 0DH
DW EXE_0D
DB 0AH ;同EXE_0D
DW EXE_0A
DB 1BH
DW EXE_1B
DB 14H ;N 纸选择 0单层纸 1双层纸
DW EXE_14
DB 16H ;N 自检 0自检 1打印测试页 2打印版本号 3打印代码和
DW EXE_16
DB 18H ;N 0清打印队列 1终止打印
DW EXE_18
DB 0FFH
DW 0FFFFH
EXE_0D:
MOV R0, #NOPRTC ;NOPRTC 3字节,打印机上电状态下无数据打印计数计时器,低位在前
MOV R2, #03H
LCALL CLRBUFI ;清缓冲区(内部RAM)
JB CVP, EXE_0D1 ;打印机上电
LCALL ONPOWER
EXE_0D1:
MOV A, PRTTEMPBUFP ;打印暂存缓冲区指针
JZ EXE0D_3 ;( 1BH 4AH 01H )--> #ORDBUF N 快速走纸N行(字符行)
SETB P1.6
PUSH IE
CLR EA ;??+
CLR C
MOV A, DOTBUFPE ;点阵缓冲区尾指针
SUBB A, DOTBUFPH ;点阵缓冲区头指针
JC EXE0D_4
MOV R0, A
MOV A, #DOTBUFMAX ;点阵缓冲区尾空极大值 (10*24)
CLR C
SUBB A, R0
SJMP EXE0D_5
EXE0D_4:
MOV A, DOTBUFPH
CLR C
SUBB A, DOTBUFPE
EXE0D_5:
SUBB A, #DOTBUFMIN ;点阵缓冲区尾空极小值 (2*24)
CLR P1.6
POP IE
JC DOTFULL
LCALL GETDOT ;取点阵送打印点阵缓冲区(每次取一个字符行)
CLR P1.6 ;清忙标志
MOV DEFBUFPWL, #00H ;自定义汉字缓冲区写指针
MOV DEFBUFPWH, #00H
MOV DEFBUFPR, #00H ;自定义汉字缓冲区读指针
MOV DPTR, #PRTTEMPBUF ;32个字节 (20H)
MOV R2, #PRTTEMPBUFLONG ;20H 打印暂存缓冲区长度
LCALL CLRBUFE
MOV PRTTEMPBUFP, #00H ;打印暂存缓冲区指针
MOV ORDFLAG, #00H ;为0表示完成,FF表示末完成,其它表示命令串指针
SJMP EXE0D_6
DOTFULL:
MOV ORDFLAG, #0FFH ;为0表示完成,FF表示末完成,其它表示命令串指针
EXE0D_6:
RET
EXE0D_3: ;( 1BH 4AH 01H )--> #ORDBUF N 快速走纸N行(字符行)
MOV DPTR, #ORDBUF
MOV A, #1BH
MOVX @DPTR, A
INC DPTR
MOV A, #4AH
MOVX @DPTR, A
INC DPTR
MOV A, #01H
MOVX @DPTR, A
RET
EXE_0A:
SJMP EXE_0D
EXE_14:
MOV DPTR, #ORDBUF ;选择纸类
INC DPTR
MOVX A, @DPTR
PUSH ACC
CLR C
SUBB A, #02H
POP ACC
JC EXE14_1
EXE14_2:
MOV R6, #02H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXE14_1:
CLR A ;???
MOV PAPERTYPE, A
MOV ORDFLAG, #00H ;为0表示完成,FF表示末完成,其它表示命令串指针
RET
EXE_15:
NOP
MOV R6, #02H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXE_16: ;N 自检 0自检 1打印测试页 2打印版本号 3打印代码和
MOV DPTR, #ORDBUF
INC DPTR
MOVX A, @DPTR
PUSH ACC
CLR C
SUBB A, #04H
POP ACC
JC EXE16_1
MOV R6, #02H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXE16_1:
MOV R7, A
MOV ORDFLAG, #00H ;为0表示完成,FF表示末完成,其它表示命令串指针
LCALL ZJTPC
RET
EXE_17:
NOP
MOV R6, #02H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXE_18: ;N 0清打印队列 1终止打印
MOV DPTR, #ORDBUF ;清打印队列,下电 18 N
INC DPTR
MOVX A, @DPTR
JZ EXE18_1
CJNE A, #01H, EXE18_2
JNB PRTING, EXE18_4
RET
EXE18_4:
CLR CVP ;打印机上电标志
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
MOV A, WMC_U2 ;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
ORL A, #0FH
MOV DPTR, #WMC
MOVX @DPTR, A
MOV PHASE, #00H ;相位寄存器
SJMP EXE18_3
EXE18_2:
MOV R6, #02H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXE18_1:
MOV PRTTEMPBUFP, #00H ;打印暂存缓冲区指针
MOV DPTR, #PRTTEMPBUF ;打印暂存缓冲区
MOV R2, #PRTTEMPBUFLONG ;20H 打印暂存缓冲区长度
LCALL CLRBUFE ;清缓冲区(外部RAM) DPTR(缓冲区首地址) R2(字节数)
EXE18_3:
MOV ORDFLAG,#00H ;为0表示完成,FF表示末完成,其它表示命令串指针
RET
EXE_1B:
MOV DPTR, #ORDBUF
INC DPTR
MOVX A, @DPTR
MOV R1, A
MOV R2, #00H
MOV DPTR, #ORDTAB2
EXE1B_1:
MOV A, R2
MOVC A, @A+DPTR
CJNE A, #0FFH, EXE1B_2
MOV R6, #03H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXE1B_2:
CJNE A, 1, EXE1B_3
INC R2
MOV A, R2 ;转命令处理
MOVC A, @A+DPTR
MOV B, A
INC R2
MOV A, R2
MOVC A, @A+DPTR
PUSH ACC
PUSH 0F0H
RET
EXE1B_3:
INC R2
INC R2
INC R2
LJMP EXE1B_1
ORDTAB2:
DB 40H ;打印机复位
DW EXE1B40
DB 25H ;N 1设置自定义汉字方式 0取消自定义汉字方式
DW EXE1B25
DB 4AH ;N 快速走纸N行(字符行)
DW EXE1B4A
DB 33H ;N 设置行间距(点行)
DW EXE1B33
DB 21H ;N.4=1倍高 N.5=1倍宽 N.4/N.5=0取消
DW EXE1B21
DB 2AH ;图形点阵传送 1B 2A N1(高) N2(宽)
DW EXE1B2A
DB 0FFH
DW 0FFFFH
EXE1B40:
LJMP BEGIN ;打印机复位
EXE1B25: ;N 1设置自定义汉字方式 0取消自定义汉字方式
MOV DPTR, #ORDBUF ;自定义汉字设置 1B 25 N ORDBUF 4 个字节长
INC DPTR
INC DPTR
MOVX A, @DPTR
MOV R7, A
CLR C
SUBB A, #02H
JNC EXE25_1
MOV A, R7
JNB ACC.0, EXE25_2
MOV DOTTRAFLAG, #01H ;数据,点阵,传送标志
MOV DOTTRAC, #72 ;点阵传送计数
MOV A, #DEFCODE ;常数0FEH
MOV R7, A
MOV R6, #02H
LCALL WD2PRTB ;打印暂存缓冲区写R6个字节的R7,如缓冲区满则忽略
EXE25_2:
MOV ORDFLAG, #00H ;为0表示完成,FF表示末完成,其它表示命令串指针
RET
EXE25_1:
MOV R6, #03H
LJMP ORDERR ;打印暂存缓冲区写R6个字节的R7(20H), 如缓冲区满则忽略 ORDFLAG=0
EXE1B4A: ;N 快速走纸N行(字符行)
JB CVP, EXE4A_2
LCALL ONPOWER
EXE4A_2:
MOV DPTR, #ORDBUF ;快速走纸 1B 4A N
INC DPTR
INC DPTR
MOVX A, @DPTR
MOV R2, A
MOV A, DOTBUFPH ;点阵缓冲区头指针
XRL A, DOTBUFPE ;点阵缓冲区尾指针
JNZ E4ARET
EXE4A_1:
MOV A, #48
MOV R7, A
LCALL FASTGO ;快速走纸,R7(快速走纸行数) ,R6(最快速度)
DJNZ R2, EXE4A_1
LCALL RUNSTOP ;电机停止程序;保持相位40MS
MOV ORDFLAG, #00H ;为0表示完成,FF表示末完成,其它表示命令串指针
E4ARET:
RET
EXE1B33:
MOV DPTR, #ORDBUF ;设置行间距 1B 33 N ,??+
INC DPTR
INC DPTR
MOVX A, @DPTR
PUSH ACC
CLR C
SUBB A, #12
POP ACC
JC EXE33_1
MOV A, #01H
EXE33_1:
MOV ROWSPACE, A ;行间距(点行数)
MOV ORDFLAG, #00H ;为0表示完成,FF表示末完成,其它表示命令串指针
RET
EXE1B21: ;N.4=1倍高 N.5=1倍宽 N.4/N.5=0取消
MOV DPTR, #ORDBUF ;放大选择 1B 21 N
INC DPTR
INC DPTR
MOVX A, @DPTR
JZ EXE21_4
JNB ACC.5, EXE21_0
SETB CROSSBIG ;横向放大标志 N.5=1倍宽
SJMP EXE21_1
EXE21_0:
CLR CROSSBIG
EXE21_1:
JNB ACC.4, EXE21_2
SETB LENGTHBIG ;纵向放大标志 N.4=1倍高
SJMP EXE21_3
EXE21_2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -