📄 ltp1245.a51
字号:
;
; 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 + -