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

📄 ltp1245.a51

📁 单片机A51开发的打印机出动程序
💻 A51
📖 第 1 页 / 共 5 页
字号:
        LJMP	MAINP_5

ORDNNOP6:
		MOV		ORDBUFPIN, #00H
        MOV		ORDFLAG, #0FFH				;为0表示完成,FF表示末完成,其它表示命令串指针
        LJMP	MAINP_5
        
ORDNOP:
		MOV		A, R7
        JNZ		ORDNOP1						;?? ADD ONE
        MOV		R7, #20H
        SJMP	ORDNOP2

ORDNOP1:
		SUBB	A, #20H
        JC		ITSORD						;判是否命令
ORDNOP2:
		MOV		DPTR, #PRTTEMPBUF			;打印暂存缓冲区	32个字节 (20H)
        MOV		A, PRTTEMPBUFP				;打印暂存缓冲区指针
        CLR		C
        SUBB	A, #PRTTEMPBUFLONG
        JC		ITSDATA
        LJMP	MAINP_5
        
ITSDATA:
		MOV		A, PRTTEMPBUFP				;打印暂存缓冲区指针
        LCALL	DPADDA
        MOV		A, R7
        MOVX	@DPTR, A
        INC		PRTTEMPBUFP
        LJMP	MAINP_5
        
ITSORD:
		MOV		R6, #00H
ITSORD0:
		MOV		A, R6						;??
        INC		R6
        INC		R6
        INC		R6
        MOV		DPTR, #ORDTAB1				;相对应的命令处理入口表
        MOVC	A, @A+DPTR
        CJNE	A, #0FFH, ITSORD4
        MOV		R7, #20H
        SJMP	ORDNOP2						;??

ITSORD4:
		CJNE	A, 7, ITSORD0
        MOV		DPTR, #ORDBUF				;是命令
        MOV		A, R7
        MOVX	@DPTR, A
        CJNE	A, #0DH, ITSORD1
        SJMP	ITSORD3

ITSORD1:
		CJNE	A, #0AH, ITSORD2
ITSORD3:
		MOV		ORDFLAG, #0FFH				;为0表示完成,FF表示末完成,其它表示命令串指针
        LJMP	MAINP_5

ITSORD2:
		MOV		ORDFLAG, #01H				;为0表示完成,FF表示末完成,其它表示命令串指针
        LJMP	MAINP_5

COMNNOP1:
		MOV		DPTR, #DEFHZBUF				;32*72=2304(900H);自定义汉字通讯缓冲区
		MOV		A, DEFBUFPWH
		CJNE	A, #90H, COMDOT0			;?+
		SJMP	COMNNOP2
		
COMDOT0:
		MOV		A, DEFBUFPWL
		ADD		A, DPL
		MOV		DPL, A
		MOV		A, DEFBUFPWH
		ADDC	A, DPH
		MOV		DPH, A
		MOV		A, R7
		MOVX	@DPTR, A
		MOV		DPL, DEFBUFPWL
		MOV		DPH, DEFBUFPWH
		INC		DPTR
		MOV		DEFBUFPWL, DPL
		MOV		DEFBUFPWH, DPH
COMNNOP2:
		DEC		DOTTRAC						;点阵传送计数
		MOV		A, DOTTRAC
		CJNE	A, #00H, COMNNOP3
		MOV		DOTTRAFLAG, #00H
COMNNOP3:
		LJMP	MAINP_5
		
ORDNNOP:
		MOV		DPTR, #ORDBUF
		INC		DPTR
		MOV		A, R7
		MOVX	@DPTR, A
		MOV		DPTR, #ORDBUF
		MOVX	A, @DPTR
		CJNE	A, #1BH, ORDNNOP2
		MOV		A, R7
		CJNE	A, #40H, ORDNNOP3
		LJMP	ORDNNOP2

ORDNNOP3:
		CJNE	A, #2AH, ORDNNOP4			;图形点阵传送 1B 2A N1(高) N2(宽)
		MOV		REMAINLONG, #02H
		LJMP	ORDNNOP5
		
ORDNNOP4:
		MOV		REMAINLONG, #01H
ORDNNOP5:
		MOV		ORDFLAG, #02H
		LJMP	MAINP_5

ORDNNOP2:
		MOV		ORDFLAG, #0FFH				;为0表示完成,FF表示末完成,其它表示命令串指针
		LJMP	MAINP_5

POWEROFF:
		LJMP	MAINP_2
		
;*************************************************************
;中断程序
;*************************************************************
;外部0中断	;纸测试,电平触发
INTSE:
		CLR RI						; 串口0中断
		CLR TI
		RETI

;T0中断         					;加热时间控制
INTT0:
		PUSH	DPL
        PUSH	DPH
        PUSH	ACC
        PUSH	PSW
        PUSH 	0
        CLR		TR0
        MOV		DPTR, #DRVDST		;0C002H  打印驱动地址
        MOV		DRVDST_U9, #00H
        MOV		A, DRVDST_U9
        MOVX 	@DPTR, A         	;关加热
        MOV		A, HOTCT			;加热次数计数器
        JZ		INTT0_1
        MOV		R0, ADDSA			;加热地址中间寄存器
        LCALL 	HOTDO				;取下一区加热的时间控制长度
        MOV		ADDSA, R0
        DEC		HOTCT
        SJMP	OVER2       
INTT0_1:
		JB		CHOOSE, INTT0_2 	;步进判断标志
        PUSH	2
        MOV		DSTC2, HPPIN2		;第二区加热次数计数器
        MOV		R2, #18
        MOV		R0, #HPARBUF1		;加热参数缓冲区长度18个字节
        MOV		DPTR, #HPBUF1
        LCALL	DPX_XR0				;外部RAM-->外部RAM R2( @DPTR-->@R0 )
        POP 	2
        SETB 	P1.4				;加热头数据锁存
        CLR 	P1.4
        NOP
        SETB 	P1.4
INTT0_2:
		CLR 	DSTOVER				;加热结束
        JNB 	INTOUT, OVER2
        CLR		INTOUT
        SETB	TF1					;置T1溢出标志
OVER2:  
		POP		0
        POP		PSW
        POP		ACC
        POP		DPH
        POP		DPL
        RETI

;T1中断		;步长控制
OPENINT1:
		RETI

INTT1:
		PUSH	DPL
        PUSH	DPH
        PUSH	ACC
        PUSH	PSW
        CLR		TR1
SET3:
		JNB		DSTOVER, SET1				;加热结束
		SETB	INTOUT
		SJMP	INT1RET
SET1:
		JB		PRTING, SET4				;打印完关定时器
        CLR		TR1
        CLR		INTT1FLAG
        SJMP	INT1RET
SET4:
		SETB	P1.6						;BUSY
        MOV		56H, 50H
        MOV		57H, 51H
        MOV		58H, 52H
        MOV		59H, 53H
        MOV		5AH, 54H
        MOV		5BH, 55H
        PUSH	7
        PUSH	6
        PUSH	5
        PUSH	4
        PUSH	3
        PUSH	2
        PUSH	1
        PUSH	0
        PUSH	0F0H
        LCALL	DRIVPRT						;驱动打印
        POP		0F0H
        POP		0
        POP		1
        POP		2
        POP		3
        POP		4
        POP		5
        POP		6
        POP		7
        MOV		50H, 56H
        MOV		51H, 57H
        MOV		52H, 58H
        MOV		53H, 59H
        MOV		54H, 5AH
        MOV		55H, 5BH
        CLR		P1.6
        SETB	EX1
INT1RET:
		POP		PSW
        POP		ACC
        POP		DPH
        POP		DPL
        RETI

;T2中断
INTT2:
		CLR		TF2							;T2溢出标志
        PUSH	ACC
        PUSH	DPH
        PUSH	DPL
        PUSH	PSW
        CLR		TR2
        JNB		HARDFLAG, INTT2_0
        INC		WINDC
        MOV		A, WINDC
        CJNE	A, #10, INT220
INT220:
		JC		INTT2_0
        MOV		WINDC, #00H
        MOV		DPTR, #DRVDST				;0C002H  打印驱动地址
        CLR		A
        MOVX	@DPTR, A					;关加热
INTT2_0:
		JNB		T1OVER, INTT2_1         	;步进电机大电流驱动完标志
        CLR		EEA							;马达
        CLR		EB							;驱动电流
        MOV		DPTR, #WMC					;0C003H  马达,及卷纸控制驱动地址
        MOV		A, WMC_U2					;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
        MOVX	@DPTR, A
        CLR		T1OVER
INTT2_1:
		JNB	WINDOVER, INTT2_3
        INC		WINDC
        MOV		A, WINDC
        CJNE	A, #WDTIME, INTT2_10		;常数 15
INTT2_10:
		JC		INTT2_3
        MOV		WINDC, #00H
        CLR		WINDOVER
        MOV		DPTR, #WMC					;0C003H  马达,及卷纸控制驱动地址
        CLR		WIND						;卷纸
        MOV		A, WMC_U2					;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
        MOVX	@DPTR, A
INTT2_3:
		JNB		RUNSTOPFLAG, INTT2_2		;步进停止标志
        INC		RSTOPC
        MOV		A, RSTOPC
        CJNE	A, #SPTIME, STOP1			;常数 40
STOP1:
		JC		INTT2_2
        MOV		RSTOPC,#00H
        MOV		A, WMC_U2					;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
        ORL		A, #0FH
        MOV		DPTR, #WMC					;0C003H  马达,及卷纸控制驱动地址
        MOV		WMC_U2, A					;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
        MOVX	@DPTR, A
        CLR		RUNSTOPFLAG   				;步进停止标志
        MOV		PHASE, PHMAINTAIN			;相位保存寄存器
        MOV		STEPLONGC, #00H				;步长计数器
INTT2_2:
		MOV		TH2, #0FAH
        MOV		TL2, #0CAH
        SETB	TR2
        POP		PSW
        POP		DPL
        POP		DPH
        POP		ACC
        RETI

;并行口中断,外部中断1
INTEX1:
		SETB EX1
        CLR P1.6
INTEE1:
		RETI

INTE1:
		CLR		EX1
        SETB	P1.6					;置PBUSY信号
;        NOP
;        CLR		P1.6
;        NOP
;        SETB	P1.6
INTE10:
;		JB		P3.3, INTEX1			;并口有数据输入 DZHB
;        JB		P3.3, INTEX1
;        JB		P3.3, INTEX1			;检测是否干扰
		JB		QUEUEFULL, INTEX1
        PUSH	ACC
        PUSH	0F0H
        PUSH	DPH
        PUSH	DPL
        PUSH	PSW

;		JB		P3.3, JMP_WAIT_DATA
;		NOP
;		NOP
;		NOP
;		NOP
;		JB		P3.3, JMP_WAIT_DATA
;		NOP
;		NOP
;		NOP
;		NOP
;JMP_WAIT_DATA:		
        MOV		DPTR, #RPDB				;0C000H  并口地址(读)
        MOVX	A, @DPTR
;        CPL		A
        MOV		B, A
		CLR		P1.5					;DZHB 01-8-21 21:47

        PUSH	62H
        PUSH	63H
        PUSH	0
        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
        CLR		C						;DZHB 01-8-16 11:12
        MOV		A, COMBUFPEL
        ADD		A, #01H
        MOV		COMBUFPEL,A
        MOV		A, COMBUFPEH
        ADDC	A, #00H
        MOV		COMBUFPEH, A
        MOV		A, COMBUFPEH
        SUBB	A, #08H
        JC		INTE11
        MOV		COMBUFPEH, #00H
        MOV		COMBUFPEL, #00H
INTE11:
		LCALL	TESTCBUF
        SETB	P1.5
        JNC		INTE12
        SETB	QUEUEFULL				;打印队列满
        CLR		EX1
        SJMP	INTEX3
INTE12:
;        NOP
;        NOP
;        NOP
;        NOP
        SETB	P1.5
        CLR		P1.6
;        NOP
;        NOP
;        NOP
;        NOP
INTEX3:
		POP		0
        POP		63H
        POP		62H
        POP		PSW
        POP		DPL
        POP		DPH
        POP		0F0H
        POP		ACC
        JB		QUEUEFULL,	INTRET			;打印队列满
        SETB	EX1
INTRET:
		RETI

;*************************************************************
;子程序
;*************************************************************
;TPC 自检(R7为0->上电自检;R7不为0->命令自检,其中R7为命令参数表示对应自检项)
;返回值->R7
ZJTPC:
		CJNE	R7, #00, ZJTPC1             ;代码和自检
        LCALL	ZJROM
        MOV		A, R7
        JNZ		ZJRET
        LCALL	ZJZK
        LCALL	FINDVT						;打印电压,温度值
ZJRET:
		RET
		
ZJTPC1:
		CJNE	R7,	#01H, ZJTPC2			;打印测试页
        LJMP	PTESTPAG

ZJTPC2:
		CJNE	R7, #02H, ZJTPC3			;打印版本号
        LJMP	PEDITION

ZJTPC3:
		LJMP PROMADD						;打印代码和

;求代码和   结果低位-->R1,高位-->R0
ZJROM:
		MOV		DPTR, #00H
        MOV		R0, #00H
        MOV		R1, #00H
        MOV		R2, #33H
CDMH1:  LCALL	ROMADD						;0000H-->0033H
        DJNZ	R2, CDMH1
        MOV		DPTR, #35H
ROMJC:  LCALL	ROMADD						;0035H-->2000H
        MOV		A, DPH
        XRL		A, #20H
        JNZ		ROMJC
        MOV		DPTR, #33H
        MOV		A, #00H
        MOVC	A, @A+DPTR
        XRL		A, R0
        JNZ		CODESUME
        INC		DPTR
        MOVC	A, @A+DPTR
        XRL		A, R1
        JZ		CODESUMY
CODESUME:
;		SETB	CODEERROR					;*DZHB 01-8-21 11:09
		MOV		R7, #00H					;#0FFH     *01-8-21 10:02   
ZJEND:
		RET
		
CODESUMY:
		MOV		R7, #00H
        SJMP	ZJEND
        
ZJZK:
		PUSH	WPAGE_U7
        MOV		R0, #00H					;代码和高位
		MOV		R1, #00H					;代码和低位
        CLR		C
        MOV		A, WPAGE_U7					;置0页
        ANL		A, #0E0H
        MOV		WPAGE_U7, A
ZJZK_2:
		MOV		A, WPAGE_U7
		PUSH	DPH
		PUSH	DPL
		MOV		DPTR, #WPAGE
		MOVX	@DPTR, A
		POP		DPL
		POP		DPH
		MOV		DPTR, #8000H
ZJZK_3: 
		MOVX	A, @DPTR
        ADD		A, R1
        MOV		R1, A
        CLR		A
        ADDC	A, R0
        MOV		R0, A
        INC		DPTR
        MOV		A, DPL
        CJNE	A, #0FEH, ZJZK_3
        MOV		A, DPH
        CJNE	A, #0BFH, ZJZK_3
        MOV		A, WPAGE_U7
        ANL		A, #1FH
        CJNE	A, #1FH, ZJZK_4
        SJMP	ZJZK_5

ZJZK_4:
		MOV		R2, #02H
ZJZK_41:
		MOVX	A, @DPTR
        ADD		A, R1
        MOV		R1, A
        CLR		A
        ADDC	A, R0
        MOV		R0, A
        INC		DPTR
        DJNZ	R2, ZJZK_41
        INC		WPAGE_U7
        SJMP	ZJZK_2

ZJZK_5: 
		MOVX	A, @DPTR
        MOV		R3, A						;高位
        INC		DPTR
        MOVX	A, @DPTR
        MOV		R4, A
        POP		WPAGE_U7

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -