Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

PIC16F883その3

$
0
0
 PIC16F883で、シリアル通信の実験をしました。
 
 PIC16F883は、基本的にPIC16F886と同じですから、「LED回路 工作部屋」というWebサイトの記事が参考になります。
 
 PIC16F883には、EUSART(Enhansed Universal Sychronous Asynchronous Reciever Transmitter) という強化された同期または非同期送受信機能があり、簡単にシリアル通信を行うことができます。
 
 今回は、FT234Xという小さいUSBシリアル変換モジュールと直接接続して、シリアル通信実験をしました。
 
イメージ 1
 
イメージ 2
 
 シリアル通信の設定手順は、
①I/0ポートの設定 RC6/TXを出力に、RC7/RXを入力に設定する。
②シリアル通信に使うポートは、デジタルに設定する。(ANSELを0)
③ボーレートの設定
  今回は、低速モード(BRGH=0)とし、ボーレートは、9600bpsにします。
  ボーレートジェネレータにセットする値Xは、次の式で計算します。
  低速モードでは、Fosc=クロック周波数(Hz)のとき
   希望のボーレート=Fosc/(64(X+1))
   今回は、Fosc=8MHz=8000000(Hz)なので、
   9600=8000000/(64(X+1)
       X=8000000/(9600*64)-1
         =13-1
         =12
となり、エラーは、0.16%です。
 
④TXSTAの設定
  非同期モードなので、SYNC=0、低速モードなので、BRGH=0、送信を有効にするので、TXEN=1、8ビットなので、TX9=0
⑤RCSTAの設定
  シリアルポート通信を有効にするので、SPEN=1、連続受信を有効にするので、CREN=1、8ビットなので、RX9=0
以上の設定をすれば、シリアル通信が可能になります。
 
実際のプログラムは、
 
SETUP
     BANKSEL ANSEL
     CLRF ANSEL ;アナログモードを使用しない
     CLRF ANSELH
     BANKSEL OSCCON
     MOVLW 70h
      MOVWF OSCCON ;CLOCK=8MHz 1Clock=0.125μs
      BANKSEL TRISA
     CLRF TRISA ;RAは全て出力
     MOVLW 0FFh
     MOVWF TRISB ;RBは全て入力
     MOVLW 80h
     MOVWF TRISC ;RC0~RC6は出力、RC7は入力(RC6=TX,RC7=RX)
 
;--------------------
;シリアル通信の設定
;--------------------
;ボーレートの設定8MHz,9600bps
     BANKSEL SPBRG
     MOVLW d'12'
     MOVWF SPBRG
 
;TXSTAの設定
     BANKSEL TXSTA
     BCF  TXSTA,SYNC ;SYNC=0 非同期
     BCF  TXSTA,BRGH ;BRGH=0(Low Speed)
     BSF  TXSTA,TXEN ;TXEN=1 送信許可
     BCF  TXSTA,TX9 ;TX9=0 8ビット
 
;RCSTAの設定
     BANKSEL RCSTA
     BSF  RCSTA,SPEN ;SPEN=1 シリアルポート許可
     BSF  RCSTA,CREN ;CREN=1 連続受信許可 
 
 
これで、シリアル通信可能になります。
 
 受信した文字を送信するプログラム(エコーバック)のMAINプログラム、受信ルーチン、送信ルーチンです。
 
;-------------------------
;MAINプログラム
;-------------------------
MAIN
     CALL Read
     CALL Send
     GOTO MAIN
;-------------------------
;シリアル通信サブルーチン
;-------------------------
;-----受信したデータをWに入れる -----
Read
     BANKSEL PIR1
     BTFSS PIR1,RCIF ;RCIF=1なら受信
     GOTO $-1   ;RCIF=0ならチェックを繰り返す
     MOVF RCREG,W
     RETURN
 ;-----Wに入っているデータを送信 -----
Send
     BANKSEL TXSTA
     BTFSS TXSTA,TRMT ;送信可能かチェック(1:可能, 0:禁止)
     GOTO $-1   ;禁止であれば チェックを繰り返す
     BANKSEL TXREG
     MOVWF TXREG  ;シリアル送信
     RETURN
 
TeraTermで動作テストをしました。
 
イメージ 3

Viewing all articles
Browse latest Browse all 440

Trending Articles