📄 ltp1245.a51
字号:
MOV A, WPAGE_U7
MOV DPTR, #WPAGE
MOVX @DPTR, A ;置RAM 0页
MOV A, R1
CJNE A, 04H, ZJZK_ERR
MOV A, R0
CJNE A, 03H, ZJZK_ERR
SJMP ZJZK_OK
ZJZK_ERR:
SETB ZKERROR
MOV R7, #0FFH
MOV DPTR, #ERRTAB
MOV R0, #PRTTEMPBUF ;打印暂存缓冲区 32个字节 (20H)
MOV R6, #13
ZJZKERR1:
CLR A
MOVC A, @A+DPTR
MOVX @R0, A
INC DPTR
INC R0
DJNZ R6, ZJZKERR1
MOV PRTTEMPBUFP, #13 ;打印暂存缓冲区指针
MOV DPTR, #ORDBUF
MOV A, #0DH
MOVX @DPTR, A
MOV ORDFLAG, #0FFH ;为0表示完成,FF表示末完成,其它表示命令串指针
ZJZK_OK:
RET
ROMADD:
MOV A, #00H
MOVC A, @A+DPTR
ADD A, R1
MOV R1, A
MOV A, #00H
ADDC A, R0
MOV R0, A
INC DPTR
RET
;打印电压,温度值
FINDVT:
MOV R7, #ADCH0 ;常数 11000000B
LCALL AD ;AD转换子程序
; mov r7, #80 ;DZHB 01-8-21 11:25
LCALL TEMP_COMP ;温度补偿
MOV TX, R7 ;TX 存放AD转换温度结果
MOV A, R7
CJNE A, #TMAX, FIND1 ;TMAX 常数 29
FIND1:
JNC FIND2
SETB HEAD_HEAT ;打印头过热
LJMP VTRET
FIND2:
CJNE A, #TMIN, FIND3 ;TMIN 常数 232
FIND3:
JC FIND4
SETB HEAD_OPEN ;打印头开路
LJMP VTRET
FIND4:
MOV DPTR, #ZITAB1
MOV DPL1, DPL
MOV DPH1, DPH
MOV R7, #15
LCALL FINWCOM ;从ROM写入通讯缓冲区
MOV A, TX ;TX 存放AD转换温度结果
MOV DPTR, #TTAB
MOV B, #02H
MUL AB
ADD A, DPL
MOV DPL, A
MOV A, B
ADDC A, DPH
MOV DPH, A
CLR A
MOVC A, @A+DPTR
MOV R6, A
INC DPTR
CLR A
MOVC A, @A+DPTR
MOV R5, A
CJNE A, #156, FINDVT3
FINDVT3:
JC FINDCT5
MOV B, #2DH
LCALL WCOM ;写通讯缓冲区一个字节
MOV 2H, 6H
LCALL FTC ;BCD码转ASC码
MOV B, R4
LCALL WCOM ;写通讯缓冲区一个字节
MOV B, R3
LCALL WCOM
MOV B, #2FH
LCALL WCOM
MOV A, TX ;TX 存放AD转换温度结果
CJNE A, #163, FINDCT4
FINDCT4:
JC FINDCT6
MOV B, #2DH
LCALL WCOM ;写通讯缓冲区一个字节
FINDCT6:
MOV 2, 5
LCALL FTC ;BCD码转ASC码
MOV B, R4
LCALL WCOM ;写通讯缓冲区一个字节
MOV B, R3
LCALL WCOM
SJMP FIND7
FINDCT5:
MOV 2, 6
LCALL FTC
MOV B, R4
LCALL WCOM
MOV B, R3
LCALL WCOM
MOV B, #2FH
LCALL WCOM
MOV 2, 5
LCALL FTC
MOV B, R4
LCALL WCOM
MOV B, R3
LCALL WCOM
FIND7:
MOV B, #0DH
LCALL WCOM
MOV R7, #ADCH1 ;常数 11100000B
LCALL AD
; mov r7, #200 ;DZHB 01-8-21 11:25
MOV VP, R7 ;VP 存放AD转换电压值
MOV A, R7
CJNE A, #142, FIND8
FIND8:
JNC FIND10
SETB VPABNORM ;电压非正常标志,为1出错
SJMP VTRET
FIND10:
CJNE A, #243, FIND11
FIND11:
JC FIND9
SETB VPABNORM ;电压非正常标志,为1出错
SJMP VTRET
FIND9:
MOV DPTR, #ZITAB2
MOV DPL1, DPL
MOV DPH1, DPH
MOV R7, #09H
LCALL FINWCOM ;从ROM写入通讯缓冲区
MOV A, VP ;VP 存放AD转换电压值
CLR C
SUBB A, #142
MOV DPTR, #VPTAB
LCALL DPADDA
CLR A
MOVC A, @A+DPTR
MOV R2, A
LCALL FTC
MOV B, R4
LCALL WCOM
MOV B, #2EH
LCALL WCOM
MOV B, R3
LCALL WCOM
MOV B, #56H
LCALL WCOM
MOV B, #0DH
LCALL WCOM
VTRET:
RET
;BCD码转ASC码,入口R2
FTC:
MOV A, R2
ANL A, #0F0H
SWAP A
ADD A, #30H
MOV R4, A
MOV A, R2
ANL A, #0FH
ADD A, #30H
MOV R3, A
RET
;从ROM写入通讯缓冲区
;DPH1,DPL1,被写入块首地址,R7,数据长度
FINWCOM:
MOV DPL, DPL1
MOV DPH, DPH1
CLR A
MOVC A, @A+DPTR
MOV B, A
INC DPTR
MOV DPL1, DPL
MOV DPH1, DPH
LCALL WCOM
DJNZ R7, FINWCOM
RET
;写通讯缓冲区一个字节
;入口 B存放被写数据
WCOM:
MOV DPTR, #COMBUF ;2K 通讯缓冲 1000H
MOV A, DPL
ADD A, COMBUFPEL
MOV DPL, A
MOV A, DPH
ADDC A, COMBUFPEH
MOV DPH, A
MOV A, B
MOVX @DPTR, A
MOV A, COMBUFPEL
ADD A, #01H
MOV COMBUFPEL, A
MOV A, COMBUFPEH
ADDC A, #00H
MOV COMBUFPEH, A
MOV A, COMBUFPEH ;DEL MORE
SUBB A, #08H
JC WCOM1
MOV COMBUFPEH, #00H
MOV COMBUFPEL, #00H
WCOM1:
RET
;检测外存
SAVERTST:
SETB P1.6
CLR EA
MOV DPTR, #00H
MOV A, #55H
MOV 50H, A
MOVX @DPTR, A
NOP
NOP
LCALL VERTST ;内存检验子程序
JNZ SAVERR
MOV A, #0AAH
MOV 50H, A
MOV DPTR, #00H
MOVX @DPTR, A
NOP
NOP
LCALL VERTST
JNZ SAVERR
MOV DPTR, #SAVTAB1
MOV DPL1, DPL
MOV DPH1, DPH
MOV R7, #13
LCALL FINWCOM ;从ROM写入通讯缓冲区
MOV B, #0DH
LCALL WCOM
SJMP SAVERET
SAVERR:
MOV DPTR, #SAVTAB2
MOV DPL1, DPL
MOV DPH1, DPH
MOV R7, #12
LCALL FINWCOM
MOV B, #0DH
LCALL WCOM
SAVERET:
CLR P1.6
SETB EA
RET
;内存检验子程序
;出口,A为0,通过,A为FF,出错
VERTST:
MOVX A, @DPTR
MOV R6, A
CLR A
MOVX @DPTR, A
MOV A, R6
CJNE A, 50H, VERTST1
INC DPTR
MOVX @DPTR, A
MOV A, DPH
CJNE A, #80H, VERTST
MOV A, #00H
SJMP VERTST2
VERTST1:
MOV A,#0FFH
VERTST2:
RET
;打印版本号
PEDITION:
MOV DPTR, #002EH ;??
CLR A
MOVC A, @A+DPTR
ADD A, #30H
MOV 50H, A
MOV A,#01H
MOVC A, @A+DPTR
MOV 51H, A
MOV A, #02H
MOVC A, @A+DPTR
ADD A, #30H
MOV 52H, A
MOV DPTR, #PRTTEMPBUF ;打印暂存缓冲区 32个字节 (20H)
MOV A, PRTTEMPBUFP ;打印暂存缓冲区指针
LCALL DPADDA
MOV R0, #50H
MOV R7, #03H
LCALL IR0_DPX ;内部RAM-->外部RAM
MOV A, PRTTEMPBUFP
ADD A, #03H
MOV PRTTEMPBUFP, A
RET
;打印代码和
PROMADD:
MOV DPTR, #0033H
MOV R0, #50H
MOV R7, #02H
PROMA1:
CLR A
MOVC A, @A+DPTR
MOV R6, A
ANL A, #0F0H
SWAP A
LCALL CJBAS ;BCD转换为ASCII
MOV @R0, A
MOV A, R6
INC R0
ANL A, #0FH
LCALL CJBAS ;BCD转换为ASCII
MOV @R0, A
INC R0
INC DPTR
DJNZ R7, PROMA1
MOV DPTR, #PRTTEMPBUF
MOV A, PRTTEMPBUFP
LCALL DPADDA
MOV R0, #50H
MOV R7, #04H
LCALL IR0_DPX ;内部RAM-->外部RAM
MOV A, PRTTEMPBUFP
ADD A,#04H
MOV PRTTEMPBUFP, A
RET
;BCD转换为ASCII
CJBAS:
CJNE A, #0AH, CJBAS1
CJBAS1:
JNC CJBAS2
ADD A, #30H
RET
CJBAS2:
ADD A, #37H
RET
;打印测试页
PTESTPAG:
MOV A, DOTBUFPH ;点阵缓冲区头指针
XRL A, DOTBUFPE
JNZ PTESTPAG
MOV DOTBUFPE, #00H
MOV DOTBUFPH, #00H
MOV DOTBUFP, #00H ;点阵缓冲区写位置指针
MOV R5, #06H
TEST_3:
MOV R6, #24
TEST_2:
MOV DPTR, #21A0H
MOV A, DOTBUFPE
MOV B, #49
MUL AB
ADD A, DPL
MOV DPL, A
MOV A, B
ADDC A, DPH
MOV DPH, A
INC DPTR
MOV A, DOTBUFP ;点阵缓冲区写位置指针
LCALL DPADDA
MOV R7, #08H
MOV A, #0FFH
TEST_1:
MOVX @DPTR, A
INC DPTR
DJNZ R7, TEST_1
INC DOTBUFPE
DJNZ R6, TEST_2
MOV A, #08H
ADD A, DOTBUFP ;点阵缓冲区写位置指针
MOV DOTBUFP, A
DJNZ R5, TEST_3
INC DOTBUFPE
MOV DOTBUFP, #00H ;点阵缓冲区写位置指针
MOV R6, #08H
MOV R5, #64
TEST_5:
MOV A, R6
MOV DPTR, #DSTTAB
MOVC A, @A+DPTR
MOV R4, A
MOV DPTR, #21A0H
MOV A, DOTBUFPE
MOV B, #49
MUL AB
ADD A, DPL
MOV DPL, A
MOV A, B
ADDC A, DPH
MOV DPH, A
INC DPTR
MOV A, DOTBUFP ;点阵缓冲区写位置指针
LCALL DPADDA
MOV R7, #06H
TEST_4:
MOV A, R4
MOVX @DPTR, A
MOV A, #08H
LCALL DPADDA
DJNZ R7, TEST_4
INC DOTBUFPE
DJNZ R6, TEST_6
INC DOTBUFP ;点阵缓冲区写位置指针
MOV R6, #08H
TEST_6:
DJNZ R5, TEST_5
MOV DOTNOPFLAG, #0FFH ;点阵缓冲区为空标志
MOV DOTBUFP, #00H ;点阵缓冲区写位置指针
RET
DSTTAB:
DB 00H
DB 10000000B
DB 01000000B
DB 00100000B
DB 00010000B
DB 00001000B
DB 00000100B
DB 00000010B
DB 00000001B
;TPC自检出错,未准备好(过热,开路处理,没纸...)
TPCERROR:
MOV A, ZJRETSTATUS ;自检/校验 返回状态
MOV R2, #00H
TPCER1:
RRC A
JNC TPCER2
LCALL TPCERDO
TPCER2:
INC R2
CJNE R2, #08H, TPCER1
MOV A, TPCSTATUS
TPCER3:
RRC A
JNC TPCER4
LCALL TPCERDO
RET
TPCER4:
INC R2
CJNE R2, #16, TPCER3
RET
TPCERDO:
PUSH ACC
PUSH 2
MOV A, R2
MOV B, #03H
MUL AB
MOV DPTR, #ERRPTAB
JMP @A+DPTR
ERRPTAB:
LJMP ERR00 ;代码和错 (BUSY,PE,PERR) = 101
LJMP ERR01 ;字库代码和错 (BUSY,PE,PERR) =
LJMP ERR02 ;内存错 (BUSY,PE,PERR) =
LJMP ERR03 ;外存错 (BUSY,PE,PERR) =
LJMP ERR04 ;打印队列满 (BUSY,PE,PERR) =
LJMP ERR05 ;收据头校验错 (BUSY,PE,PERR) =
LJMP ERR06 ;未定义 (BUSY,PE,PERR) =
LJMP ERR07 ;自定义汉字校验错 (BUSY,PE,PERR) =
LJMP ERR08 ;打印头过热 (BUSY,PE,PERR) = 101
LJMP ERR09 ;打印头开路 (BUSY,PE,PERR) = 101
LJMP ERR0A ;电压非正常标志,为1出错 (BUSY,PE,PERR) = 0X1
LJMP ERR0B ;没纸 (BUSY,PE,PERR) = 110
LJMP ERR0C ;打印头末放下 (BUSY,PE,PERR) = 100
LJMP ERR0D ;未定义 (BUSY,PE,PERR) =
LJMP ERR0E ;未定义 (BUSY,PE,PERR) =
LJMP ERR0F ;其它致命错误 (BUSY,PE,PERR) =
ERR00:
POP 2 ;代码和错
POP ACC
SETB P1.6
SETB P1.5
SETB PERR_ ;加热驱动
MOV DPTR, #WPAGE
MOV A, WPAGE_U7
MOVX @DPTR, A
; SJMP $ ;*DZHB 01-8-21 9:53
ERR01:
CLR ZKERROR ;字库代码和错
LJMP ERRRET
ERR02: CLR RAMERROR ;内存错
LJMP ERRRET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -