⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ltp1245.a51

📁 单片机A51开发的打印机出动程序
💻 A51
📖 第 1 页 / 共 5 页
字号:
		
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 + -