📄 printp.asm
字号:
;*********************PRINTP****************************
;本程序实现炜煌汉字微型打印机据输入的纵坐标数据打印一点。
;入口参数:SOU存纵坐标数据。(最大为240)
;出口参数:无。
;占用资源:W,STATUS,RD0~RD7,RA0,RA1,RA2,RA4,RA5,023H,024H,028H,029H,二重堆栈。
;说明: 1,多次调用可打印曲线,横坐标为一定时间间隔,且与纸的进给方向相同。
; 2,具体型号为WH-40-PT,命令集选用ESC格式。
; 3,接口为标准并行接口CENTRONICS。
; 4, RD口为数据输出口,RA口为控制口。
; 5, 本程序未考虑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 20H ;延时用
;SOU EQU 21H ;存纵坐标数据
;TEMP1 EQU 22H ;存待发送数据个数
;TEMP2 EQU 23H ;数据指针
IFNDEF PRINTP1
#DEFINE PRINTP1
INCLUDE "printinit.ASM" ;包含初始化文件
;****************取数据子程序******************************
IN_DATA ADDWF PCL,F
RETLW 1BH ;打印曲线命令
RETLW 27H
RETLW .2 ;2个数据
RETLW 00H ;生成横坐标轴
;*******************子程序********************************
PRINTP CALL PRINTINIT
BCF STATUS,RP0 ;选体0
MOVLW .4 ;初始化发送数据个数
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 DELAY20
BSF STB
IN_ACK BTFSC ACK ;检测应答信号
GOTO IN_ACK
INCF TEMP2,F ;数据指针加一
DECFSZ TEMP1,F
GOTO N_DATA
;送纵坐标数据
IN_SEL0 BTFSS SEL ;测试是否在线
GOTO IN_SEL0
IN_ERROR0 BTFSS ERR ;测试是否有错误
GOTO IN_ERROR0
IN_BUSY0 BTFSC BUSY ;测试是否忙
GOTO IN_BUSY0
MOVF SOU,W
MOVWF PORTD ;发送纵坐标数据
BCF STB ;产生STB选通信号
CALL DELAY20
BSF STB
;送回车数据
IN_SEL1 BTFSS SEL ;测试是否在线
GOTO IN_SEL1
IN_ERROR1 BTFSS ERR ;测试是否有错误
GOTO IN_ERROR1
IN_BUSY1 BTFSC BUSY ;测试是否忙
GOTO IN_BUSY1
MOVLW 0DH
MOVWF PORTD ;发送回车数据
BCF STB ;产生STB选通信号
CALL DELAY20
BSF STB
RETURN
;****************大于20(29)微秒延时子程序*************************
DELAY20 MOVLW .8
MOVWF CNT
LOOP102 DECFSZ CNT,F
GOTO LOOP102
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -