山本ワールド
PIC18F46K22でRS232C送受信(アセンブラプログラム)
概要
PIC18F46K22のEUSARTモジュールを使用しRS232Cを経由してパソコンと通信するプログラムである。
パソコンからターミナルで文字列を入力するとPICで受信してパソコンへ同じ文字を送信する。
秋月電子 PIC18F46K22使用 マイコンボードをベースとし半田付けされている水晶20MHzをH8/3048ボードの16MHzと交換し64MHzで動作可能とした。このボードはICSP端子を備えておりPICKIT 3で書き込みができ、電源はミニUSBで供給可能である。またユニバーサル基板になっているので簡単に回路を追加することができる。
ちなみに水晶が20MHzの場合は、通信速度がかわるので設定を変更しなければならない。
EUSARTの設定値の計算はPIC18 EUSART ボーレート計算を参照してください。
使用メモリは以下のとおりです
プログラムメモリ 109byte使用
回路は次のとおりである。
回路図(PDF)
パソコンでRS232Cを使用する
パソコンとの接続
RS232Cを使用する場合、パソコン同士等の接続を考慮したリバースケーブルとパソコンと端末等との接続を考慮したストレートケーブルがあります。RS232Cを使用した機器を製作する場合、ケーブルの接続が自分の入力に対して出力となっているかなどを考慮しないと出力同士及び入力同士が接続され正常動作しないばかりか故障の原因にもなります。
リバースケーブルには内部の結線方法において幾つの種類があります。
本回路の場合、パソコンとはストレートケーブルで接続してください。
パリティなしで文字jkを送信した場合のRS232C送信波形
文字jとkを偶数パリティで送信した場合のRS232C送信波形
文字jとkを奇数パリティで送信した場合のRS232C送信波形
秋月電子 USB-シリアル変換ケーブル スケルトン
最近のパソコンはRS232Cが搭載されていませんのでUSBとRS232Cを変換するケーブルを使用してみました。秋月電子のUSB-シリアル変換ケーブル スケルトンを使用しました。
このケーブルはWindows 10のサポートしておりませんが、秋月のサイトから古いドライバをダウンロードしインストールすると動作しました。以下にドライバのバージョン等を示します。
PL2303用ドライバー RS232C-USB
OS | プロバイダー | 日付 | バージョン |
---|---|---|---|
Windows 7 Service Pack 1 64bit | Prolific | 2016/09/19 | 3.8.3.0 |
Windows 10 32bit | Prolific | 2010/03/12 | 3.3.11.152 |
Windows 10 64bit | Prolific | 2008/09/24 | 3.3.2.102 |
プログラムの説明
ソースファイル
以下のファイルで構成されているeusart2a.asm ・・・ メインプログラム
ソースファイルのダウンロード eusart2a.zip
; EUSAER1を用いたRS232Cサンプルプログラム 2017/01/08
; 慈渓博瑞テクノロジー株式会社 PIC18F46K22 マイコンキット Ver2013.12.08用
; http://akizukidenshi.com/catalog/g/gK-07231/
; 水晶は16MHzに交換してPICを64MHzで駆動
; RC7:RX1 RC6:TX1
; MPLAB X IDE v3.45 Microchip MPASM(v5.70)
; PicKit 3
#INCLUDE <p18f46k22.inc>
; 水晶発振(16MHz) クロック分周無 PLL有効(*4) プライマリクロック有効 ウォッチドッグタイマ無効 低電圧プログラム書き込みモード無効
CONFIG FOSC = HSHP,PLLCFG=ON,PRICLKEN=ON,WDTEN=OFF,LVP=OFF
; PC側のターミナル(例えTera Term)と通信を行う
; 最初にPIC18F46K22 EUSART1という文字列を送信後、受信した文字を送信する。
; 19200bps 8bit ストップビット1 パリティなし フロー制御無し
; PC側のターミナルの改行コードは例えば受信CR、送信CR+LFに設定する。
; PC側のターミナルの送受信文字コードをJISにした場合、半角カタカナを使用可能
; プログラムメモリのアドレスadsをTBLPTRレジスタに設定
LDTBLPTR MACRO ads
movlw UPPER ads
movwf TBLPTRU
movlw HIGH ads
movwf TBLPTRH
movlw LOW ads
movwf TBLPTRL
ENDM
CODE
ORG 0
goto start ; リセット時
start
; USART初期化
BANKSEL ANSELC
movlw b'00100100' ; CSRC=0:非同期 TX9=0:8bit BRGH=1:高速
movwf TXSTA1
movlw b'10010000' ; シリアル 8bit
movwf RCSTA1
movlw d'207' ; 64MHz/(16*19200)-1=207 19230bps 0.16%
movwf SPBRG1
movlw b'00111111'
movwf ANSELC,BANKED
movlw b'11111111'
movwf TRISC
; ROM内の文字列をRS232Cで送信
LDTBLPTR open_msg_str
loop1
tblrd *+
movf TABLAT,W
bz loop1_exit
call usart1_write
bra loop1
loop1_exit
loop2
call usart1_read
call usart1_write
bra loop2
open_msg_str
DB "PIC18F46K22 EUSART1",0dh,0ah,0
usart1_write ; USART1へWREGの1byte書き込み
btfss TXSTA1,TRMT ; TSR空か
bra usart1_write
movwf TXREG1
return
usart1_read ; USART1から読み取り
btfss PIR1,RC1IF ; 受信完了
bra usart1_read
btfsc RCSTA1,FERR ; フレミングエラーがない場合次の命令をスキップ
bra usart1_ferr
btfsc RCSTA1,OERR ; オーバーランエラーがない場合次の命令をスキップ
bra usart1_oerr
movf RCREG1,W
return
usart1_ferr ; フレミングエラーが発生
usart1_oerr ; オーバーフローエラーが発生
return
Copyright (C) 2012 山本ワールド All Rights Reserved.