JA2KAI, Usagi Pyon Copyright (c) 2003, all rights reserved USART I/Oの設定 TRISCのRC7(RX) を1、RC6(TX) をにセットします。他のビットはポートの使用目的により設 定します。 SYNCビットを0、RCSTAのSPENビットを1にセットすると、非同期シリアルポートが動作する ようになります。 ボーレイトの設定 SPBRG及びTXSTAのBRGHを必要とするボーレイトになるように設定します。 割込みの設定 GIE、PEIE及びRCIEまたはTXIEをセットするとUARTの割り込みのうち、受信または送信完 了の際の割り込みが有効になります。 他の割り込みが必要なら、それに応じたイネーブルビットをセットします。 なお、割り込みが掛かるとGIEが自動的にクリアされそれ以上の割り込みが掛からないよう に制御されます。割り込みサービスルーチンからRETFIEでリターンするとGIEが自動的に セットされ、次の割り込みが掛かるようになります。 非同期送信 1.ビットTXEN をセットすることにより送信をイネーブルにします。これによりTXIF ビットもセット されます。TXIFビットのセットは、割込を発生します。(割込有効ならば) 2. TXREG レジスタにデータをソフトウェアでロードします(TXIFがリセットされ、 同時に送 信が開始されます)。 *TXREGにデータをセットしてからTXENをセットしてもよい。 3. 送信が完了すると、割込が発生します。(割込有効の場合)割込サービスルーチンで TXIFがセットされていることを確認すれば、送信終了による割込であることを確認できま す。 非同期受信 1. イネーブルビットCRENをセットして受信をイネーブルにします。 2. 受信が完了するとRCIFビットがセットされて割込が発生します (割込有効の場合) ので、 割込サービスルーチンでRCIFビットが1になっていることでRCREGにデータが受信されて いることが確認できます。 3. RCSTA レジスタをリードして、受信中に何かエラーが発生したかどうかを判定します。 4. エラーが発生した場合、イネーブルビットCREN をクリアしてエラーをクリアし、再びCREN をセットします。 4. RCREGからデータバイトをリードするとRCIFビットがクリアされ、次の割込ができるようにな ります。 このプログラムで使用するレジスタの設定内容(全二重 同期調歩のセッティング) TRISC (C Port の入出力コントールレジスタ) (87H) RC6/TX/CK,RC7/RX/DTのセット bit7 6 5 4 3 2 1 0 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 1 0 x x x x x x TXSTA (送信ステータス及びコントールレジスタ) (98H) TSR:送信シフトレジスタ bit7 6 5 4 3 2 1 0 TX9Dは使用しない。 CSRC TX9 TXEN SYNC BRGH TRMT TX9D TRMT:送信シフトレジスタステータ 送信 0:非同 X 0 0 ボーレイ 1:TSR空 期 1:可 ト1:高速 0:TSRフ 0:不可 0:低速 ル SPBRG (ボーレイト設定レジスタ) (99H) TXSTAのBRGHと次式で決まる。 bit7 6 5 4 3 2 1 0 BRGH=0の場合FOSC/64(X+1) RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 bps 0 0 0 0 0 1 0 1 BRGH=1の場合FOSC/16(X+1) bps RCSTA (受信ステータス及びコントールレジスタ) (18H) RX9Dは使用しない。 bit7 6 5 4 3 2 1 0 CREN: SPEN RX9 SREN CREN AD- FERR OERR RX9D 1=連続受信可/0=連続受信不 可 1 0 X 1 0 フレーム オーバラン 1:エラー 1:エラー 有 有 INTCON (コントールレジスタ) (0BH、8BH) GIEは、割込が掛かるとそれ以上 bit7 6 5 4 3 2 1 0 割込 GIE PEIE T0IE INTE RBIE TOIF INTF RBIF が掛からないようになり、RETFIEで 全割込 全周辺 Timer0 RB0 RBport Timer0 RB0 Rbport 割 込 ルー チ ン から 帰 る 際 に 1 に の 割込 割込 割込 割込 フラグ フラグ フラグ 0 0 0 0 0 0 1:可能 1:可能 周辺割込みの中の各機器の割込 PIE1 ( 周辺機能割込イネーブルビット) (8CH) 0:不可 0:不可 bit7 6 5 4 3 2 1 0 み PSPIE ADIE RCIE TXIE SSPIE CCP1I TMR2IE TMR1IE 可/不可を設定します。 0 0 USART USART 0 0 0 0 受信割 送信割 込 込 割込があった際にこのレジスタの PIR1 ( 割込フラグビットジスタ) (0CH) 1:可能 1:可能 bit7 6 5 4 3 2 1 0 各bit を調べ PSPIF ADIF RCIF TXIF SSPIF CCP1I TMR2IF TMR1IF TXREG(19H) 送信buff る と 割 X X X X X 0 USART USART RCREG(1AH) 受信buff 受信 送信 buff buff 1:フル 1:空 モデムからデータを受信して 受信バッファの文字を 受信バッファの RTTEMP=RT? Y Y TCount=0? N N(変化あり) Y MEを“L”にする RTTEMP=RT RT=1? (MN6127の)ME=0? N Y N Y (立上り) RDを読んでバイトに組替える Y DEC(RCount) N RTTEMP:MN6127の読出しクロックRTの変化を検出するための旧状態保持フラグ (1が初期値) RCount:MN6127から受信する際にビットを8回読んで1バイトになったことを数える カウンタ(9が初期値) MECount:MN6127のMEをHにしてから一定時間キャリアのみ送出するための時 間を設定 Tcount:MN6127にSDを送出する際に、ビットを8回数えるためのカウンタ(8が初期 値) STTEMP:MN6127の送出クロックSTの変化を検出するための旧状態保持フラグ (0が初期値) MEを“H”にする MECount=0? N MECountを0FFHにする DEC(MECount) RCount=0? N 割り込み発生 Y (1バイト完 TCount=0? 受信したデータをバッファにセー 送信したいデータありフラグON Y 受信バッファ→送信ワークレジス TCount=8 RCount=9 STTemp=ST? 送信可フラグON? N N Y シリアルポートに送信 Y ST=H? N 他の原因による割り込み N Y (立上り) 1BitをMN6127のSDへ出力 DEC(TCount) Y 受信処理 受信データありフラグON 送信バッファが N (変 化 あ SHR(送信ワークレジスタ) 送信したいデータありフラグOFF 受信バッファに受 N STTemp=ST Y 送信したいデータあ N RETFIE Y 送信可フラグON
© Copyright 2024 ExpyDoc