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

📄 printp.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 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 + -