kuroの覚え書き

96の個人的覚え書き

本日の参照ページ



http://joshua.cs.inf.shizuoka.ac.jp/2003/V050/no4/index.html

シリアル通信のテスト

ちょっと改変して使ってみよう。


LIST P=PIC16F84 ;PIC16F84を使う
INCLUDE "P16C84.INC" ;標準インクルードファイル読み込み
;******************************************************
;ファイルレジスタの定義
;******************************************************

CBLOCK 0CH

;***シリアル通信用***
DAT1B ;***データ格納 ***
CNT8 ;***カウント用 ***
SCNT

ENDC

;******************************************************
;定数定義
;******************************************************
;***シリアル通信用***
RS_IN EQU 02H ;***データの入力ピン(RA2)***
RS_OUT EQU 03H ;***データの出力ピン(RA3)***

BSF STATUS,RP0 ;Bankを1にする
CLRF TRISB ;ポートBを全て出力に設定
BCF STATUS,RP0 ;Bankを0に戻す
LEDTEST
CALL READ1B
MOVWF PORTB ;ポートBに出力
GOTO LEDTEST

;******************************************************
;シリアル通信に関する関数定義
;******************************************************
;***半周期待ち関数(動作周波数10MHz,通信速度9600bps)***
HALFWAIT
MOVLW 028H
MOVWF SCNT
WAITLOOP
DECFSZ SCNT, F
GOTO WAITLOOP
NOP
NOP
RETURN

;***1バイト読み込み関数(読み込み失敗時Zフラグがセットされる)***
READ1B
CLRF DAT1B ;***受信バッファをクリアする(Zフラグも1にする)***
BTFSS PORTA, RS_IN ;*** データがきているかチェック***
GOTO EXITREAD1B
CALL HALFWAIT
CALL HALFWAIT
BTFSS PORTA, RS_IN
GOTO EXITREAD1B

MOVLW 08H ;***1バイトのデータ読み込み***

MOVWF CNT8
READLP
CLRC
RRF DAT1B, F

CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT

BTFSS PORTA, RS_IN
BSF DAT1B, 7

DECFSZ CNT8, F
GOTO READLP

CALL HALFWAIT ;***終了ビットを待つ***
CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT
MOVF DAT1B, W ;***入力データをWに移動させてリターン***
CLRZ
RETURN

EXITREAD1B
SETZ
RETURN

;***1バイト送信関数***
SEND1B
MOVWF DAT1B ;***出力データをロードする***

BSF PORTA, RS_OUT ;***スタートビット***

CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT

MOVLW 08H
MOVWF CNT8
SENDLP
BTFSS DAT1B, 0
BSF PORTA, RS_OUT
BTFSC DAT1B, 0
BCF PORTA, RS_OUT

CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT

CLRC
RRF DAT1B, F

DECFSZ CNT8, F
GOTO SENDLP

;***エンドビット***
BCF PORTA, RS_OUT
CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT
CALL HALFWAIT

RETURN

;******************************************************
;終了
;******************************************************
END