📄 printzi.asm
字号:
;************************PRINTZI**************************
;本程序实现炜煌汉字微型打印机打印汉字“广”字。
;入口参数:无。
;出口参数:无。
;占用资源:W,STATUS,RD0~RD7,RA0,RA1,RA2,RA4,RA5,023H,028H,029H,二重堆栈。
;说明: 1,具体型号为WH-40-PT,命令集选用ESC格式。
; 2,接口为标准并行接口CENTRONICS。
; 3, RD口为数据输出口,RA口为控制口。
; 4, 本程序未考虑CALL,GOTO超过2K范围,及表大于256的情况。
;******************常量定义*******************************
#DEFINE ERR PORTA,0 ;打印机的出错信号
#DEFINE ACK PORTA,1 ;打印机的确认信号
#DEFINE BUSY PORTA,2 ;打印机的忙信号
#DEFINE SEL PORTA,4 ;打印机的在线信号
#DEFINE STB PORTA,5 ;单片机对打印机的选通信号
;CNT EQU 23H ;延时用
;TEMP1 EQU 28H ;存待发送数据个数
;TEMP2 EQU 29H ;数据指针
DNUMBER EQU .19 ;待发送数据的个数
IFNDEF PRINTZI1
#DEFINE PRINTZI1
INCLUDE "printinit.ASM" ;包含初始化文件
;****************取数据子程序******************************
IN_DATA ADDWF PCL,F
RETLW 1BH ;自定义“广”字,并打印。
RETLW 26H
RETLW .34
RETLW 02H
RETLW 7CH
RETLW 40H
RETLW 0C0H
RETLW 40H
RETLW 00H
RETLW 1BH ;将当前字符集中的字符44h替换为自定义字符23h
RETLW 25H
RETLW .34
RETLW 44H
RETLW 00H
RETLW 44H ;打印。
RETLW 0DH ;回车
RETLW 1BH ;纸进给32点行。
RETLW 4AH
RETLW .20
;****************子程序******************************
PRINTZI CALL PRINTINIT
BCF STATUS,RP0 ;选体0
MOVLW DNUMBER ;初始化发送数据个数
MOVWF TEMP1
MOVLW 00H ;数据指针赋初值
MOVWF TEMP2
BSF STB ;初始化STB为高电平
N_DATA NOP
IN_SEL BTFSS SEL ;测试是否在线
GOTO IN_SEL
IN_ERROR BTFSS ERR ;测试是否有错误
GOTO IN_ERROR
IN_BUSY BTFSC BUSY ;测试是否忙
GOTO IN_BUSY
MOVF TEMP2,W
CALL IN_DATA ;调取数据子程序
MOVWF PORTD ;发送数据
BCF STB ;产生STB选通信号
CALL DELAY202
BSF STB
IN_ACK BTFSC ACK ;检测应答信号
GOTO IN_ACK
INCF TEMP2,F ;数据指针加一
DECFSZ TEMP1,F
GOTO N_DATA
RETURN
;****************大于20(29)微秒延时子程序*************************
DELAY202 MOVLW .8
MOVWF CNT
LOOP104 DECFSZ CNT,F
GOTO LOOP104
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -