;16F877 パラレルでプリンタ駆動
;*********************************************
LIST P=PIC16F877 ;
INCLUDE "P16f877.inc" ;標準ヘッダ定義ファイル
__CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF & _LVP_OFF
;*********************************************
WTEMP EQU 021H ;Wレジスタ待避
TIMCNT EQU 022H ;タイマ用カウンタ
TIM2CNT EQU 023H
TIM5CNT EQU 024H
TIM1CNT EQU 025H
WRCNT EQU 026H ;書き込み文字数
TBPOINT EQU 027H ;テーブル処理ポインタ
;***********************
; メインルーチン
;***********************
ORG 0 ;Reset Start
;*********************************************************
;初期処理
BSF STATUS,RP0 ;バンク1へ切替
BCF INTCON,GIE ;割り込み禁止
MOVLW 07H
MOVWF ADCON1 ;A/D割り当て用ピンはすべてデジタル
MOVLW 01H
MOVWF TRISA ;ポートAをRA0入力、他は出力モード設定
CLRF TRISB ;ポートBを出力モードに設定
MOVLW 80H
MOVWF TRISC ;ポートCをRC7入力、他は出力モードに設定
CLRF TRISD ;ポートDを出力モードに設定
MOVLW 06H
MOVWF TRISE ;ポートEをRE1,RE2入力、他は出力モードに設定
BCF STATUS,RP0 ;バンク0に戻す
BSF PORTE,0 ;STB ON
MAIN
;スタートスイッチ待ち(ON-OFF)
STRT BTFSS PORTA,0
GOTO STRT
STRT2 BTFSC PORTA,0
GOTO STRT2
;プリント
PRINT ;テーブル処理で読み込んだ文字を順次書き込み
CLRF TBPOINT
MOVLW d'23'
MOVWF WRCNT ;書き込み文字数カウンタ(23文字)
LPPRN MOVF TBPOINT,W
CALL TABLE
CALL CHRWR
INCF TBPOINT,F
DECFSZ WRCNT,F
GOTO LPPRN
GOTO MAIN
TABLE ADDWF PCL,F
RETLW 'Y'
RETLW 'a'
RETLW 'm'
RETLW 'a'
RETLW 't'
RETLW 'o'
RETLW 'm'
RETLW 'b'
RETLW 'o'
RETLW '-'
RETLW 1CH ;FS
RETLW '&' ;& 漢字モード
RETLW 3BH ;山
RETLW 33H
RETLW 24H ;と
RETLW 48H
RETLW 24H ;ん
RETLW 73H
RETLW 24H ;ぼ
RETLW 5CH
RETLW 1CH ;FS
RETLW '.' ;. 漢字モード解除
RETLW 0DH ;CR
;***********************
;サブルーチン
;***********************
;***************************************************
;1文字送信
CHRWR
MOVWF PORTB ;データ出力
CALL TIM20
BCF PORTE,0 ;STB OFF
BSYCK BTFSS PORTE,1 ;BUSY ON チェック
GOTO BSYCK
BSF PORTE,0 ;STB ON
BSYCK2 BTFSC PORTE,1 ;BUSY OFF チェック
GOTO BSYCK2
CALL TIM20 ;/ACK素通り待ち
RETURN
;***************************************************
;タイマ
TIM20 ;約20μSECタイマ
MOVLW 012H
MOVWF TIMCNT
TIMLP
DECFSZ TIMCNT,F
GOTO TIMLP
RETURN
;*********************************************************
END