第25週
;16F877 USART送信でプリンタ駆動
;*********************************************
        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
SENDCNT 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を出力モードに設定
        CLRF    TRISC           ;ポートCを出力モードに設定
        CLRF    TRISD           ;ポートDを出力モードに設定
        CLRF    TRISE           ;ポートEを出力モードに設定
        
        MOVLW   024H            ;8ビット、送信イネーブル、非同期
                                ;高速ボーレート選択
        MOVWF   TXSTA           ;
        MOVLW   081H            ;SPBRG=129(9600)
        MOVWF   SPBRG
        BCF     STATUS,RP0      ;バンク0に戻す
        MOVLW   090H            ;シリアルピン、8ビット、連続受信
        MOVWF   RCSTA
        

MAIN
;スタートスイッチ待ち(ON-OFF)
STRT    BTFSS   PORTA,0
        GOTO    STRT
STRT2   BTFSC   PORTA,0
        GOTO    STRT2        

;プリント
SND                             ;テーブル処理で読み込んだ文字を順次送信
        CLRF    TBPOINT
        MOVLW   d'10'
        MOVWF   SENDCNT         ;送信文字数カウンタ(10文字)
LPSND   MOVF    TBPOINT,W
        CALL    TABLE
        CALL    SEND
        INCF    TBPOINT,F
        DECFSZ  SENDCNT,F
        GOTO    LPSND
        
        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   0DH             ;CR
        
;***********************
;サブルーチン
;***********************
;***************************************************
;送信
SEND
        MOVWF   WTEMP           ;待避
        BSF     STATUS,RP0      ;BANK1
LPSEND  BTFSS   TXSTA,TRMT      ;TSR空チェック
        GOTO    LPSEND
        
        BCF     STATUS,RP0      ;BANK0
        MOVF    WTEMP,W
        MOVWF   TXREG
        RETURN
        
;***************************************************
;タイマ(今回は不使用 たぶん次回のパラレルで使用する)
TIM20                           ;約20μSECタイマ
        MOVLW   012H
        MOVWF   TIMCNT
TIMLP   
        DECFSZ  TIMCNT,F
        GOTO    TIMLP
        RETURN
TIM02   ;RETURN ;デバッグ用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                          ;約0.2mSECタイマ
        MOVLW   0FFH
        MOVWF   TIM2CNT
TIM2LP  NOP
        DECFSZ  TIM2CNT,F
        GOTO    TIM2LP
        RETURN
TIM5    ;RETURN  ;デバッグ用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                          ;約5msecタイマ
        MOVLW   01AH
        MOVWF   TIM5CNT
TIM5LP  CALL    TIM02
        DECFSZ  TIM5CNT,F
        GOTO    TIM5LP
        RETURN

;*********************************************************

        END