?? 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 + -