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

📄 ltp1245.a51

📁 单片机A51开发的打印机出动程序
💻 A51
📖 第 1 页 / 共 5 页
字号:
;
; Module:       Program for Print, Use SII 1245 Printer
; Programed by: DZHB
; Programed on: Date: 01-8-15 19:51
; Modified  by: DZHB
; Modified  on: Date: 
; Copyright (c) All rights reserved
; 
        ORG     00H
        	LJMP    BEGIN				;开始
        ORG     03H
        	RETI						; *外部中断0
        ORG     0BH
        	LJMP    INTT0				; 定时器0中断 (加热时间控制)
        ORG     13H
        	LJMP    INTE1				; 外部中断1 (并行口接收数据)
        ORG     1BH
        	LJMP    INTT1				; 定时1器中断 (步长控制)
        ORG     23H
        	LJMP    INTSE				; 串口0中断 (纸测试,电平触发)
        ORG     2BH
        	LJMP    INTT2				; 定时器2中断 (加热时间控制)
        ORG     2EH
        	DB 01H,30H,00H				;版本号V1.0
        	RETI
        ORG     33H
        	DB 00H,00H
;        
NPRTCEND:
			DB 0FFH,0FFH,020H			;3个字节,表示上电状态下无数据打印计数计时器的计数终值,
;以主程式的循环次数表示时间(约3~4分钟);该值在程序调试完后才确定,低位在前
PRTTYPE:	
			DB 22H, 42H					;打印机型号
        	DB 01H, 00H 				;打印程序版本号
        	DB 00H, 00H					;打印程序代码和

PRTTYPELONG     DATA    6H      ;常数
;
T2CON           DATA    0C8H
CP_RL2          EQU     0C8H
C_T2            EQU     0C9H
TR2             EQU     0CAH
EXEN2           EQU     0CBH
TCLK            EQU     0CCH
RCLK            EQU     0CDH
EXF2            EQU     0CEH
TF2             EQU     0CFH
;
RCAP2L          DATA    0CAH
RCAP2H          DATA    0CBH
TL2             DATA    0CCH
TH2             DATA    0CDH
WMCON           DATA    096H
;内部RAM
TX      		DATA	10H		;存放AD转换温度结果
VP      		DATA	11H		;存放AD转换电压值
PHASE   		DATA	12H		;相位寄存器
TL              DATA    13H     ;
TH              DATA    14H     ;t1时间值
EH              DATA    15H     ;能量值
REL             DATA    16H     ;
REH             DATA    17H     ;电阻值
CH              DATA    18H     ;C值
N1              DATA    19H     ;点
N2              DATA    1AH     ;数
N3              DATA    1BH     ;累
N4              DATA    1CH     ;加
N5              DATA    1DH     ;器
N6              DATA    1EH     ;
PHMAINTAIN      DATA    1FH     ;相位保存寄存器
;常数
ADCH0           DATA    11000000B
ADCH1           DATA    11100000B
STEPCMAX        DATA    10      ;马达最快时步进计数器值(走纸)
STEPFAST        DATA    2       ;马达最快时步进计数器值(打印)
ETABLONG        DATA    39      ;温度表长度
RTABLONG        DATA    14      ;电阻表长度
TMAX            DATA    29
TMIN            DATA    232
VMAX            DATA    243
VMIN            DATA    142
OBJ135          DATA    15H
OBJ246          DATA    2AH
DEFCODE         DATA    0FEH
WDTIME          DATA    15
SPTIME          DATA    40
CRITICALT1      DATA    42H		;临界温度1
CTIMEH1			DATA	0EEH
CTIMEL1			DATA	0CFH 
CRITICALT2      DATA    39H		;临界温度2
CTIMEH2			DATA	0F2H
CTIMEL2			DATA	075H 
CRITICALT3      DATA    20H		;临界温度3
CTIMEH3			DATA	0F5H
CTIMEL3			DATA	095H 
CTIMEH4			DATA	0F9H
CTIMEL4			DATA	0BFH 
CORRECTOR       DATA    01		;温度补偿系数
;
ZJRETSTATUS     DATA    020H	;自检/校验 返回状态
CODEERROR       EQU     00H     ;代码和错
ZKERROR         EQU     01H     ;字库代码和错
RAMERROR        EQU     02H     ;内存错
E_RAMERROR      EQU     03H     ;外存错
QUEUEFULL       EQU     04H     ;打印队列满
NODEF4          EQU     05H     ;未定义
NODEF1          EQU     06H     ;未定义
NODEF5          EQU     07H     ;未定义
;
TPCSTATUS       DATA    021H    ;TPC 状态
HEAD_HEAT       EQU     08H     ;打印头过热
HEAD_OPEN       EQU     09H     ;打印头开路
VPABNORM		EQU		0AH		;电压非正常标志,为1出错
NOPAPER         EQU     0BH     ;没纸
NODOWN          EQU     0CH     ;打印头末放下
NODEF2          EQU     0DH     ;未定义
NODEF3          EQU     0EH     ;未定义
OTHERERROR      EQU     0FH     ;其它致命错误
;
WPAGE_U7        DATA    022H    ;页面与打印驱动控制
XA14            EQU     010H
XA15            EQU     011H
XA16            EQU     012H
XA17            EQU     013H
XA18            EQU     014H
PE              EQU     015H    ;数据寄存(缺纸)
PERR_           EQU     016H    ;加热驱动
CVP             EQU     017H
;
WMC_U2          DATA    023H    ;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
PA              EQU     018H    ;相位
PB              EQU     019H
PA_             EQU     01AH
PB_             EQU     01BH
EEA             EQU     01CH    ;马达
EB              EQU     01DH    ;驱动电流
STAMP           EQU     01EH
WIND            EQU     01FH    ;卷纸
;
TEMPBITBUF      DATA    024H
T1OVER          EQU     020H    ;步进电机大电流驱动完标志
PRTING          EQU     021H    ;正在打印标志标志
DSTOVER         EQU     022H    ;加热结束
HEATFLAG        EQU     023H    ;是否加热标志
TIMEOUTEND      EQU     024H    ;=1 已打印"无法与主CPU建立链路联接"
LUMPFLAG        EQU     025H    ;块操作标志
CROSSBIG        EQU     026H    ;横向放大标志
LENGTHBIG       EQU     027H    ;纵向放大标志
DRVDST_U9       DATA    025H
DST1            EQU     028H
DST2            EQU     029H
DST3            EQU     02AH
DST4            EQU     02BH
DST5            EQU     02CH
DST6            EQU     02DH
;
RUNSTOPFLAG     EQU     030H     ;步进停止标志
WINDOVER        EQU     031H
CONFIRM         EQU     032H	 ;没纸
PRTFLAG         EQU     033H
SAVEC           EQU     034H
INTT1FLAG       EQU     035H
CHOOSE          EQU     036H     ;步进判断标志
SAVEC1          EQU     037H
INTOUT          EQU     038H
HARDFLAG        EQU     039H
;计数器
NOPRTC          DATA    030H    ;3字节,打印机上电状态下无数据打印计数计时器,低位在前
GETDNFC			DATA	033H	;1字节,同一命令执行次数计数
WDOTFLAG        DATA    034H    ;写点阵同一行ASC码写计数
DOTLINEC		DATA	035H	;点行计数器
STEPLONGC       DATA	036H	;步长计数器
PAREORDER       DATA    037H    ;对象指示器
WINDC           DATA    038H    ;
RSTOPC          DATA    039H    ;
CONDLINLONG     DATA    03AH    ;连续有效点行长度
DOTTRAC         DATA    03BH    ;点阵传送计数
DSTC2           DATA    03DH    ;第二区加热次数计数器
REMAINLONG      DATA    03EH    ;
PINLATION       DATA    03FH
;标志 FLAG
DOTNOPFLAG      DATA    040H    ;点阵缓冲区为空标志
ORDFLAG         DATA    041H    ;为0表示完成,FF表示末完成,其它表示命令串指针
PAPERTYPE       DATA    042H    ;纸标志(为0表示单层纸,为1表示双层纸)
ROWSPACE		DATA 	043H	;行间距(点行数)
RTYPE           DATA    045H    ;电阻类型
DOTTRAFLAG      DATA    046H    ;数据,点阵,传送标志
YBIT            DATA    047H    ;
HOTCT			DATA	048H    ;加热次数计数器
ADDSA			DATA	049H	;加热地址中间寄存器
;临时缓冲区
TEMPBUF1        DATA    050H    ;6字节
TEMPBUF2        DATA    056H    ;6字节
TEMPBUF3        DATA    05CH    ;6字节
TEMPBUF4		DATA	062H	;2字节
TEMPBUF5		DATA	064H	;2字节
DPH1            DATA    066H
DPL1            DATA    067H
DPH2            DATA    068H
DPL2            DATA    069H
;指针
ORDBUFPIN       DATA    06AH
HPPIN1          DATA    06BH
HPPIN2          DATA    06CH
;
COMBUFPHL       DATA    070H    ;通讯缓冲区头指针
COMBUFPHH		DATA	071H
COMBUFPEL       DATA    072H    ;通讯缓冲区尾指针
COMBUFPEH		DATA 	073H
;
PRTTEMPBUFP     DATA    074H    ;打印暂存缓冲区指针
;
DOTBUFPH        DATA    075H    ;点阵缓冲区头指针
DOTBUFPE        DATA    076H    ;点阵缓冲区尾指针
DOTBUFP			DATA 	077H	;点阵缓冲区写位置指针
;
DEFBUFPR        DATA    078H    ;自定义汉字缓冲区读指针
DEFBUFPWL       DATA    07AH    ;自定义汉字缓冲区写指针
DEFBUFPWH       DATA    07BH    ;
;
;外部
TEMPDOTBUF      DATA    00H     ;144 BYTE
TXDBUF          DATA    90H     ;10 BYTE 发送暂存缓冲区
;
ORDBUF          DATA    0800H     ;4 个字节长
ORDBUFLONG      DATA    4H      ;命令寄存缓冲区长度
;
PRTTEMPBUF      DATA    0C6H	;32个字节 (20H)
PRTTEMPBUFLONG  DATA    020H	;打印暂存缓冲区长度
HPARBUF1        DATA    0E8H	;加热参数缓冲区长度18个字节
HPARBUF2        DATA    0F1H
HPBUF1          DATA    09AH
HPBUF2          DATA    0A3H
;
COMBUF          DATA    01000H	;2K 通讯缓冲
COMBUFLONG      DATA    0800H   ;通讯缓冲区长度
COMBUFMAX       DATA    0800H   ;通讯缓冲区尾空极大值 ()
COMBUFMIN       DATA    76      ;通讯缓冲区尾空极小值 (1*38)
;
DOTBUF          DATA    021A0H  ;252*49=12348 (16F8H)
DOTBUFLONG      DATA    0303CH  ;打印点阵缓冲区长度
DOTBUFMAX       DATA    252     ;点阵缓冲区尾空极大值 (10*24)
DOTBUFMIN       DATA    60      ;点阵缓冲区尾空极小值 (2*24)
;
PICBUF          DATA    06000H  ;3*4*72=864 (0362H)
PICBUFLONG      DATA    0362H   ;
;
DEFHZBUF        DATA    07000H  ;32*72=2304(900H);自定义汉字通讯缓冲区
DEFHZNUM        DATA    32
DEFBUFLONG      DATA    0900H   ;自定义汉字点阵长度
;驱动
WPAGE           DATA    0C000H  ;页面地址(写)
RPDB            DATA    0C000H  ;并口地址(读)
WMC             DATA    0C003H  ;马达,及卷纸控制驱动地址
DRVDST          DATA    0C002H  ;打印驱动地址
ASCZKBG         DATA    08000H  ;ASC码开始地址
HZZKBG			DATA	09200H	;汉字开始地址

;***********************************************************
;主程序开始
;***********************************************************
BEGIN:
		MOV		IE, #00H
        SETB	P1.6
        MOV		R2, #0
WAIT:
		MOV		R1, #0F8H            		;延时及初始化内部RAM
        MOV		R0, #08H
        CLR		A
WAIT1:
		MOV		@R0, A
        INC		R0
        DJNZ	R1, WAIT1
        DJNZ	R2, WAIT
        MOV		DPTR, #00H
TPCINIT:
		CLR		A                   		;初始化外部RAM
        MOVX	@DPTR, A
        INC		DPTR
        MOV		A, DPH
        CJNE	A, #80H, TPCINIT
        MOV		SP, #80H
        CLR		P1.0						;TLC0832 A/D转换口 ADCLK
        CLR		P1.1						;TLC0832 A/D转换口 ADDIO
        SETB	C
        MOV		P1.2, C						;TLC0832 A/D转换口 ADCS
        MOV		P1.4, C						;加热头数据锁存
        MOV		P1.5, C						;ACK
        MOV		PHASE, #00H					;相位寄存器
        CLR		A
        MOV		WPAGE_U7, A					;页面与打印驱动控制
        SETB	CVP
        SETB	PE							;数据寄存(缺纸)
        SETB	PERR_						;加热驱动
        MOV		DPTR, #WPAGE				;页面及打印头驱动初始化 0C000H 页面地址(写)
        MOV		A, WPAGE_U7
        MOVX	@DPTR, A
        MOV		DPTR, #WMC					;马达,钱箱,及卷纸控制初始化
        MOV		A, WMC_U2					;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
        MOVX	@DPTR, A
        MOV		DPTR, #DRVDST				;0C002H  打印驱动地址
        MOV		A, DRVDST_U9
        MOVX	@DPTR, A
        MOV		TX, #80						;AD转换温度结果寄存器初始化(常温)...... TX 存放AD转换温度结果
        MOV		VP, #200					;AD转换电压值寄存器初始化(额定电压)	VP 存放AD转换电压值
        MOV		R2, #3
        CLR		A
INITNPC:
		MOV		R0, #NOPRTC					;无打印计数计时器初始化 
        MOV		@R0, A						;NOPRTC 3字节,打印机上电状态下无数据打印计数计时器,低位在前
        INC		R0
        DJNZ	R2, INITNPC
        MOV		PAPERTYPE, #00H				;缺省为使用单层纸     纸标志(为0表示单层纸,为1表示双层纸)
        MOV		ROWSPACE, #06H				;缺省行间距为6个点行  行间距(点行数)
        MOV		CONDLINLONG, #24			;连续有效点行长度
        MOV		P2, #00H
        MOV		IE, #2EH
        MOV		IP, #04H					;#02H
        MOV		SCON, #00H					;方式1,允许接收
        MOV		TCON, #05					;INT1,INT0为下降沿触发
        MOV		TMOD, #11H					;方式1,定时器0和1为16位定时方式
        MOV		T2CON, #01H					;定时器2
        CLR		A
        MOV		C, P3.4						;P3.4状态选择开关1
        MOV		ACC.0, C
        MOV		C, P3.5						;P3.5状态选择开关2
        MOV		ACC.1, C
        RL		A
        MOV		DPTR, #JMPTAB1
        JMP		@A+DPTR

JMPTAB1:
		AJMP	HARDTEST					;打印机硬件检测
        AJMP	RSETC
        AJMP	RSETB
        AJMP	RSETA

HARDTEST:
		SETB	HARDFLAG
		SETB	EA
		SETB	TF2
HARDT0:
		JB		P3.4, HARDT1				;P3.4状态选择开关1
        JNB		P3.5, HARDT0				;P3.5状态选择开关2
HARDT1:
		CLR		TR2
		MOV		WINDC, #00H
        CLR		HARDFLAG
		LCALL	SAVERTST					;检测外存
		LCALL	PTESTPAG					;打印测试页
		LCALL	ZJZK
		LCALL	FINDVT						;打印电压,温度值
RSETC:
		MOV		RTYPE, #00H					;电阻类型
        SJMP	MAINP_1

RSETB:
		MOV		RTYPE, #01H
        SJMP	MAINP_1

RSETA:
		MOV		RTYPE, #02H
        SJMP	MAINP_1

MAINP_1:
		LCALL	ZJROM						;求代码和   结果低位-->R1,高位-->R0
        MOV		A, R7
        SJMP	TPCOK						;JZ		TPCOK
        LCALL	TPCERROR					;TPC自检出错,未准备好(过热,开路处理,没纸...)
        LJMP	BEGIN

TPCOK:
		MOV		TH2, #0FAH
        MOV		TL2, #0CAH
        SETB	TR2
        CLR		P1.6
        SJMP	MAINP_2

TPCERR:
		LCALL	TPCERROR
        SJMP	TPCERR_
        
MAINP_2:
		SETB	EA
        MOV		A, ZJRETSTATUS				;自检/校验 返回状态
        JNZ		TPCERR      
        MOV		A, TPCSTATUS				;TPC 状态
        JNZ		TPCERR
TPCERR_:
		MOV		A, ORDFLAG					;为0表示完成,FF表示末完成,其它表示命令串指针
        XRL		A, #0FFH
        JNZ		ORDNFUL
        LCALL	EXECUTE						;(7) 执行对应命令子程序
        MOV		A, ORDFLAG					;为0表示完成,FF表示末完成,其它表示命令串指针
        JNZ		ORDNEND
        MOV		DPTR, #ORDBUF				;4 个字节长
        MOV		R2, #ORDBUFLONG				;4H 命令寄存缓冲区长度
        LCALL	CLRBUFE						;清缓冲区(外部RAM)
ORDNEND:
		LJMP	MAINP_5

ORDNFUL:
		MOV		A, COMBUFPHH				;通讯缓冲区头指针
        XRL		A, COMBUFPEH				;通讯缓冲区尾指针
        JZ		COMNOP
        LJMP	COMNNOP

COMNOP: 
		MOV		A, COMBUFPHL				;通讯缓冲区头指针
        XRL		A, COMBUFPEL
        JZ		COMNOP1
        LJMP	COMNNOP

COMNOP1:
		JB		CVP, POWERON				;判断打印机是否上电(4)
        LJMP	POWEROFF

POWERON:
		MOV		R0, #NOPRTC					;NOPRTC 3字节,打印机上电状态下无数据打印计数计时器,低位在前
        CLR		C
        MOV		A, @R0
        ADD		A, #01H
        MOV		@R0, A
        MOV		R2, #02H
POWERO_:
		INC		R0
        MOV		A, @R0
        ADDC	A, #00H
        MOV		@R0, A
        DJNZ	R2, POWERO_
        MOV		DPTR, #NPRTCEND				;3个字节,表示上电状态下无数据打印计数计时器的计数终值,
        MOV		R2, #03H
        MOV		R0, #TEMPBUF1				;6字节
        LCALL	DPR_DPI						;ROM-->内部RAM R2( @DPTR->@R0 )
        MOV		R2, #03H
        MOV		R0, #NOPRTC					;NOPRTC 3字节,打印机上电状态下无数据打印计数计时器,低位在前
        MOV		R1, #TEMPBUF1
        LCALL	MSU_B						;多字节无符号数减法
        JC		MAINP_5
        CLR		CVP							;计数溢出打印机下电
        MOV		DPTR, #WPAGE				;0C000H 页面地址(写)
        MOV		A, WPAGE_U7
        MOVX	@DPTR, A
        MOV		DPTR, #WMC					;0C003H  马达,及卷纸控制驱动地址
        MOV		A, WMC_U2					;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
        ORL		A, #0FH
        MOV		WMC_U2, A					;相位PA PB PA_ PB_ 马达EEA, 驱动电流EB 及卷纸WIND 控制
        MOVX	@DPTR, A
        MOV		PHASE, #00H					;相位寄存器
        MOV		PHMAINTAIN, #00H			;相位保存寄存器
MAINP_5:
		JB		P1.7, MAIP_50				;打印头抬起,低有效
        SETB	NODOWN
        JNB		PRTING, MAIP_51				;正在打印标志标志
        CLR		PRTING
        LCALL	PRIERR						;停止打印
        SJMP	MAIP_51

MAIP_50:
		JB		P3.2, MAIP_51				;无纸,低有效
        SETB	NOPAPER
        JNB		PRTING, MAIP_51
        LCALL	PRIERR						;停止打印
        CLR		INTT1FLAG
MAIP_51:
		MOV		A, TPCSTATUS				;TPC 状态
        JNZ		DOTNOP
        MOV		A, DOTNOPFLAG				;点阵缓冲区为空
        JZ		DOTNOP
        JB		TR1, DOTNOP					;++
        JB		DSTOVER, DOTNOP				;加热结束
        MOV		R0, #HPARBUF1				;加热参数缓冲区长度18个字节
        CLR		A
        MOVX	@R0, A
        INC		R0
        MOV		A, #0FBH
        MOVX	@R0, A
        MOV		R0, #HPARBUF2
        CLR		A
        MOVX	@R0, A
        INC		R0
        MOV		A, #0FBH
        MOVX	@R0, A
        MOV		HPPIN1, #01H				;指针
        MOV		DSTC2, #01H					;??+ ;第二区加热次数计数器
        LCALL	DRIVPRT						;(6)
DOTNOP: 
		LJMP	MAINP_2

COMNNOP:
		LCALL	GCOMD						;取通讯缓冲区一个字节 结果在R7中
        MOV		A, DOTTRAFLAG				;数据,点阵,传送标志
        JNZ		COMNNOP1					;判断是否点阵传送
        MOV		A, ORDFLAG					;为0表示完成,FF表示末完成,其它表示命令串指针
        JZ		ORDNOP						;判命令缓冲区空否
        MOV		A, ORDFLAG					;为0表示完成,FF表示末完成,其它表示命令串指针
        CJNE	A, #01H, ORDNNOP1
        LJMP	ORDNNOP

ORDNNOP1:
		MOV		DPTR, #ORDBUF
        INC		DPTR
        INC		DPTR
        MOV		A, ORDBUFPIN				;指针
        LCALL	DPADDA
        INC		ORDBUFPIN
        MOV		A, R7
        MOVX	@DPTR, A
        CLR		C
        MOV		A, ORDBUFPIN
        SUBB	A, REMAINLONG
        JNC		ORDNNOP6

⌨️ 快捷键说明

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