第26週


;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