;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