楽天市場
[無料でホームページを作成] [通報・削除依頼]

PIC10F322 ソフトシリアル一考察

ソフトシリアルインターフェイス

ソフトシリアルインターフェイスはPIC10F322のブートローダーで使用していますが、
更に使用するレジスタの数を減らしプログラムステップ数も短縮できましたのでご紹介します。

ここで示す例はPIC10F322、動作クロック8MHz、受信ポートRX=PORTA,3、送信ポートTX=PORTA,2
通信条件:9600ボー、パリティなし、ストップビット1、フロー制御なしのものです。



壱.設定
define文でDirect_TX,Direct_RXを定義/非定義することで直結/反転接続に対応します。
レジスタはrxdとrsのみ使用する。
PICマイコンはポート入出力の初期値が入力となるので、TXに割り当てるポートを出力に設定 する。img_20130405-203149.jpg
弐.ボーレート
ボーレートの1ビットに相当するPICマイコンのサイクル数は以下の式で求められる。

(動作クロック(MHz)/4)*1000000/ボーレート

クロック8MHz、9600ボーの場合、1ビットに相当するPICマイコンのサイクル数は

(8/4)*1000000/9600=208.333 となるので、

1ビットのディレイがこの値に近づくように設定する。

サブルーチンbwaitではCALL文を含めた遅延が200サイクルとなるように設定してある。



参.1バイト送信プログラ(コードサイズ21ワード) (2013.04.11改訂)(2013.04.14改訂)

Wレジスタの値をシリアル出力する。
Wレジスタのデータはrxdレジスタにコピーされ、rrf命令でLSBから順にポート出力される。

rxdレジスタのMSBには1が最初にセットされ、
2ビット目転送時には0がセットされる。
8ビット転送後には、rxd=B'00000001"となる。



img_20130414-232711.jpg

 

四.1バイト受信プログラム(コードサイズ16ワード)
データが来るまで受信待ちを行い、受信データをWレジスタとrxdレジスタに保存する。
受信データはrrf命令でMSB側からrxdレジスタに書き込まれる。

rxdの初期値をB'10000000"とすることで、
8ビット受信後にはrxdレジスタにデータが、キャリーフラグには1がセットされる。
(rrf命令毎のキャリーフラグの変化は0(1回目)->0->0->0->0->0->0->1(8回目)となる。)
ストップビットは読まずに時間で遅延させる。

 

img_20130405-203658.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.