=================================== シリアルポート拡張インターフェイス Serial Port eXtender @ 2000.06 (c) Masaya TAKAHASHI =================================== Document written by T. Masaya =================================== Target MPU -> PIC16F877 @ 20MHz Assembler -> MPLAB ver.5.00 PICWriter -> AKI-PIC ▼ ピン割り当て(SPXとしての割り当て.PPXとの互換性なし) PIC16F877 +----+ +----+ */MCLR[16] -| 1 +--+ 40|- PB7(30) PA0( 5) -| 2 39|- PB6(29) PA1( 6) -| 3 38|- PB5(28) PA2( 7) -| 4 37|- PB4(27) PA3( 8) -| 5 36|- PB3(26) BauRate-Config#0(RA4/T0CKI)-| 6 35|- PB2(25) PA4( 9) -| 7 34|- PB1(24) PA5(10) -| 8 33|- PB0(23) PA6(11) -| 9 32|- VDD PA7(12) -|10 31|- VSS VDD -|11 30|- PC7(22) VSS -|12 29|- PC6(21) CLKIN -|13 28|- PC5(20) N.C. -|14 27|- PC4(19) (RC0/T1OSO/T1CK1)-|15 26|- RxD (RC1/T1OSI/CCP2)-|16 25|- TxD (RC2/CCP1)-|17 24|- (RC5/SDO)ChipADDR#0 BaudRate-Config#1(RC3)-|18 23|- (RC4/SDI/SDA)ChipADDR#1 PC0(13) -|19 22|- PC3(16) PC1(14) -|20 21|- PC2(17) +------------+ * 注 * (x) ... Tゼミ規格 34 ピンコネクタ(オス)の x 番ピンに接続 [x] ... D-sub 25 ピン(オス)の x 番ピンに接続 * 印 (/MCLR) ... 10〜50kΩ 程度でプルアップ 11,12番ピン間、31,32番ピン間には 0.1μF 程度のセラミックコンデンサを入れる pin I/O -------------------------------------------------------------------------- PA0〜PA7 I/O 汎用入出力ポート:入力はTTL入力 A/D 変換のために割り当てることも可能 アクセス速度が他のポートに比べてやや遅い PB0〜PB7 I/O 汎用入出力ポート:入力時はシュミットトリガ入力 ソフトウェアで全ピンのプルアップが可能 PC0〜PC7 I/O 汎用入出力ポート:入力時はシュミットトリガ入力 (PIC16F877上ではPORTDだが便宜上PORTCと呼ぶ) RxD I シリアル受信 TxD O シリアル送信 /MCLR I "L"にすると PIC がリセットされる VDD --- +5V に接続 VSS --- GND に接続 CLKIN --- 20MHz の水晶発振器を接続 ===================== PIC16F877ピン割り当て ===================== [parallel I/O] RA0-3 ... PA0-3 RA4 ... Baud-Rate Configure-Pin #0 RA5 ... PA4 RE0-2 ... PA5-7 RB0-7 ... PB0-7 RD0-7 ... PC0-7 [serial and other I/O] RC0/T1OSO/T1CK1 ... N.C.(PWM/Compare/Capture機能のため予約) RC1/T1OSO/CCP2 ... N.C.(PWM/Compare/Capture機能のため予約) RC2/CCP1 ... N.C.(PWM/Compare/Capture機能のため予約) RC3/SCK/SCL ... Baud-Rate Configure-Pin #1 RC4/SDI/SDA ... ChipAddressConfigure-Pin #0 RC5/SDO ... ChipAddressConfigure-Pin #1 RC6/TX/CK ... RS232-TxD( to PC/AT-RxD via MAX232) RC7/RX/DT ... RS232-RxD( to PC/AT-TxD via MAX232) ===================== 通信速度設定 ===================== #1 #0 : Baud Rate L L : 9600bps(BPS96) L H : 38400bps(BPS384) H L : 57600bps(BPS576) H H : 115200bps(BPS1152) ===================== チップアドレス設定 ===================== #1 #0 : Address L L : 0(Access with "W""R"set or "w0""r0"set) L H : 1(Access with "w1""r1"set) H L : 2(Access with "w2""r2"set) H H : 3(Access with "w3""r3"set) ======== 通信仕様 ======== 通信速度 BaudRate-Configure Pinによる選択 9600/38400/57600/115200bps ※注意:βテストはすべて115200bpsのみ. その他 N81,フロー制御なし. ============ アクセス方法 ============ 1.コマンドワードをシリアルに流す. 2.応答するコマンドの場合はすべての応答文字列を読みきる必要がある. 3.改行などのコード付加は必要無し. コマンド構成([]内は1バイトアスキー文字) [r/w][chipADDR][ADDR][DataH][DataL] [r/w] 書きこみ時は"w",読み込み時は"r". [chipADDR] ChipADDR Pinによって設定されるチップ番号. w0,r0に限り,W,Rに置き換え可能. [ADDR] SPX内部のレジスタアドレス. 0-9,A-Fの16レジスタ. [DataH][DataL] アスキー文字列で8ビット分のデータを書く(つまり2文字分). 使用できる文字は0-9,A-F. 書きこみ時には不要(というよりつけてはならない). ============ 内部レジスタ ============ 内部レジスタアドレスは大文字で指定のこと #0 PA(r/w) #1 PB(r/w) #2 PC(r/w) #3 AD(r) #4 PA_CFG(r/w) #5 PB_CFG(r/w) #6 PC_CFG(r/w) #7 AD_CFG(r/w) #8 SPX_VERSION(r) #9 #A #B #C #D #E #F =========================================== Future Work =========================================== (future work)->PWMのため内部に間接レジスタを作成する (future work)->CTS/RTSを実装したほうがいんでないか? (future work)->シリアル受信エラーへの対策(フレーミングとかオーバーフローとか) (future work)->送受信の完全2重化 =========================================== Version History =========================================== ソースファイル参照.