送信側と受信側で同期をとらず信号を伝送する方式はUART、USARTとも呼ばれています。RS232Cはこれに属します。非同期通信の代表格です。PIC16F84Aと、これとは別の基板でPIC16F18857の2種類で動作させてみましたが、ここでは84Aでの実験結果を掲載します。16F18857はチップ内にUARTモジュールを内蔵しています。通信ソフトはTeraTermを使用しました。
順調にいけばTeraTermだけで事足りるのですが、うまくいかないときはコードの確認が必要です。最初に戸惑うのはコードの見方です。信号の確認はロジックアナライザを使用しました。今回は論理が逆になっていて少々戸惑いました。ロジアナはPCベースのZEROPLUSで価格の割には安定に動作してくれます。MAX232のICのTX,RX
PINにロジアナのプローブを接続します。PICのソフトはTeraTermからaを入力するとPICからAからZの26文字が送られてTeraTermに表示されます。nを入力すると0から9が表示されます。それ以外では?が表示されます。TeraTermに表示される内容は下記のとおりです
Cmd= ABCDEFGHIJKLMNOPQRSTUVWXYZ
Cmd= 0123456789
Cmd= ?
Cmd=
ソースリストはつぎのようになっています。
#include <16f84a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(CLOCK=10000000)
#use rs232(BAUD=19200,XMIT=PIN_A3,RCV=PIN_A2)
void main()
{
int cmnd,i;
while(1)
{
printf("\r\nCmd= ");
cmnd==getc();
if(cmnd=='a')
{
for(i='A';i<0x5B;i++)
printf("%C",i);
}
else
if(cmnd=='N')
{for(i='0';i<0x3A;i++)
printf("%C",i);}
else
printf("?");
}
}
}
ロジアナの設定はGroup into Busを選択し、UARTモードにします。TeraTermで入力した文字でトリガをかけます。
UARTの信号の確認をします。左が使用したボードです。1993年にマイクロチップから発売されたPICDEM-1で18、28、40PINのPICに対応していますが、今回は16F84Aを使用しました。MAX232、Dサブ9PINメスが搭載されています。電源回路には全波整流のブリッジダイオードがあるためDC電源の極性を選びません。
ロジアナの測定ポイントはMAX232のTX,RXピンです。
T 1000 0010 PT 0100 0010 PT 1100 0010 PT 0010 0010 PT1010 0010 PT0110
PICのRX波形
TeraTermで"a"を入力したときのPCからPICに送る信号を確認します。下のチャートはPIC基板のRX波形で最初のHの52usはスタートビットで後、1000
0110(61h)と続き最後にストップビットがきます。ストップビットは52usのLOWレベルです。61hはアスキーコードのaです。LOWレベルが1の負論理になっています。
PICのTX波形
下のチャートはPICからPCに送られる信号です。St1000 0010SpSt0100 0010SpSt1100 0010SpSt0010
0010SpSt1010 0010Spと並んでいます。 STはスタートビット、Spはストップビットを表します。Hex表示で41h,42h,43h,44hでアスキーコードのA,B,C,Dです。このあとE・・・・・Zと続きます。チャートの下に各ビットに対応する値を記しています。Tはスタートビット、Pはストップビットです。LOWレベルが1,HIGHレベルが0です。