0000 ; 0000 ; KBC−Z05サンプルプログラム (2) 0000 ; RS−485を使ったパーティラインでの通信例 0000 ; 0000 ;******* I/Oアドレス 0000 0010 CTC0 EQU 10H ;CTCチャネル0 001A SIOBD EQU 1AH ;SIO チャネルB データ 001B SIOBC EQU 1BH ;SIO チャネルB コマンド 0000 0000 ;******* ワークエリアと定数 0000 0005 MY_ID EQU 5 ;ボードに割り当てるID番号 0000 ;同じライン上で重複しないこと 0000 ;******* プログラム本体 0000 0000 ORG 0 0000 310000 LD SP,0000H ;スタックポインタ設定 0003 0003 ;******* CTC(ボーレイト・ジェネレータに使用)の初期化 0003 0003 3E17 LD A,00010111B ;CTC0をタイマモードに設定 0005 D310 OUT (CTC0),A ;プリスケーラ 1/16 0007 3E03 LD A,3 ;タイムコンスタント 0009 D310 OUT (CTC0),A ;9600bps(×16モード) 000B 000B ;******* SIO チャネルBの初期化 000B 000B 213700 LD HL,B_CMD ;コマンドのアドレス 000E 0609 LD B,B_CLEN ;コマンドの長さ 0010 0E1B LD C,SIOBC ;出力ポート 0012 EDB3 OTIR 0014 0014 ;******* RS−485受信待ち 0014 0014 DB1B LOOP: IN A,(SIOBC) ;RR0読みだし 0016 CB47 BIT 0,A ;受信キャラクタ有効か? 0018 28FA JR Z,LOOP ;No,受信待ち 001A 001A DB1A IN A,(SIOBD) ;受信データを読み出す 001C FE05 CP MY_ID ;自分のID番号か? 001E 20F4 JR NZ,LOOP ;No,受信待ち 0020 0020 ;******* 自分のID番号を受け取ったのでアスキー文字にして送信する 0020 0020 3E05 LD A,5 ;WR5選択 0022 D31B OUT (SIOBC),A 0024 3E6A LD A,01101010B ;RTSをONにすることで 0026 D31B OUT (SIOBC),A ;送信準備ができる 0028 3E35 LD A,MY_ID+'0' 002A D31A OUT (SIOBD),A ;データ送信 002C 3E05 LD A,5 ;WR5選択 002E D31B OUT (SIOBC),A 0030 3E68 LD A,01101000B ;RTSをOFFにする 0032 D31B OUT (SIOBC),A ;実際にはデータを送り終わるまで 0034 ;ONが続く(SIOの機能による) 0034 C31400 JP LOOP ;送信終了、再び受信待ちへ 0037 0037 ;*******SIO チャネルB イニシャライズ・データテーブル 0037 0037 18 B_CMD: DEFB 18H ;リセット 0038 0100 DEFB 1,00000000B ;WR1,全割り込み禁止 003A 03C1 DEFB 3,11000001B ;WR3,受信イネーブル Data=8bit 003C 0444 DEFB 4,01000100B ;WR4, Clock=x16 Stop=1 003E 0568 DEFB 5,01101000B ;WR5,送信イネーブル RTS=OFF 0009 B_CLEN EQU $-B_CMD ;SIO チャネルBコマンドデータ数 0040 0040 END