楽々PIC

水田除草と言うブログを書いていますが、PIC関連の記事が意外に人気で驚いています。 PICを使った電子工作に興味を持つ方が多いことを知って、一緒にPICを学ぶブログを作りたいと思いました。 「楽々PIC」は教材と言うよりも少し実用性?のある楽しい道具を作りながら学ぶブログを目指します。

USART

ポート入出力

温度制御定数と出力」の中で、下図のようにポート出力を High / Low に切り替えるアセンブラ・ソースを紹介しています。 <PICデバイス=18F1320>

温度制御出力

ポートの入出力を行う SFR には、PORTn と LATn があり上図の LATB はポートBに対応しています。 PORTn を入力(読み出し)、LATn を出力(書き込み)に使うようなので、私もそれに従っています。

PORTn と LATn の違いは以下のページが勉強になります。
 PORTレジスタとLATレジスタ
 http://homepage3.nifty.com/mitt/pic/pic1320_06.html

ポート出力は LATn に書き込み、入力は PORTn を読み出したりビットチェックを行うことで実現します。
1bit だけ書き換える場合には BSF , BCF , BTG と言ったニーモニックを使います。 複数の bit を同時に(同期して)書き換える場合は ANDWF , IORWF , XORWF が便利です。 8bit を一気に書き換える際には MOVF , MOVWF , MOVFF , CLRF , SETF 等が使えます。 ただし、8bit の中に他の割り込みプログラムで(も)書き換える bit がある場合は、割り込み処理による書き換えタイミングにより、他のプログラムの実行結果に対して意図しない悪影響を与える場合があり注意が必要です。

同様にポート入力では 1bit だけの時に BTFSC , BTFSS を使い、複数 bit を同時に(同期して)読み出す場合は 8bit 全てを読み出してから処理します。 入力時には他のプログラムに影響を与えることは無いでしょう。

ポートの入出力を行う前に下図のように各ポートについて bit 単位で入出力の設定を済ませる必要があります。

ポート定義

A/DコンバーターとUSARTの設定を先に済ませ、各ポートの入出力を設定します。 ポートとして使う bit だけでなく、A/Dコンバーター、USART、PWM、タイマー入力、外部割込みと言った用途の端子についても矛盾の無い入出力設定を行います。 (例 受信端子=入力 送信端子=出力)


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。




音声合成LSI 5 データ送信

 「音声合成LSI 4 フラグ」の続きです。 今回は、実際に音声データを送信しているプログラムについて説明します。 音声データに限らず、USART 送信プログラムに共通する内容です。 <PICデバイス=18F1320> 音声合成LSI は、株式会社アクエスト製 AquesTalk pico  ATP3011F4-PU です。

下図は、TIMER2 低位割り込み中に CALL される送信プログラムのアセンブラ・ソース( tlks.asm の一部)です。 
最初に、メイン処理で使われているテーブル・データ用ポインターを退避して、音声合成データ・テーブルのポインターを復旧します。(34~39行目)
続いて、テーブル・ポインター・アドレスから 1byte を送信し、ポインターをインクリメント(+1)しています。(41~42行目) その後、送信データがCRコード( 0DH )であれば送信中フラグ( tlkflg<bit0> )をクリアして、次回 TIMER2 割り込みで talksend を CALL しないように設定します。(43~47行目)
44行目の tlkcr の値は 0DH です。( intdef.asm で初期化)
49~51行目は、CRコードと異なる 1byte データを送信する時(ブレーク・コマンド)の為に準備しましたが、今回は使っていません。

tlks_tlksend

最後に、音声合成用テーブル・ポインターを退避して、上図プログラム実行前の値に復旧します。

下図はTIMER2 割り込み処理の中にあって、上のプログラムを CALL している部分( intlow.asm の一部)です。 tlkflg<bit1>が 1 の時だけ前述のサブルーチン tlksend を CALL します。
tlkflg を使ったプログラム制御の仕組みについては「音声合成LSI 4 フラグ」をご覧下さい。

TIMER2_tlksend


音声合成LSI 関連記事のインデックスはこちら → 音声合成LSI 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。




音声合成LSI 3 USART

 「音声合成LSI 2」の続きです。 今回は、USARTの設定について説明します。 <PICデバイス=18F1320> 音声合成LSI は、株式会社アクエスト製 AquesTalk pico  ATP3011F4-PU です。

下図は、USART の設定を行っているアセンブラ・ソース( intdef.asm の一部)です。 音声合成LSI に合わせて、送受信共にデータ長 8bit 、パリティー無し、ボーレート 9600bps に設定しています。 ストップビットは 1bit 固定で選択出来ません。 ポート入出力設定の前にシリアル通信イネーブルの設定を行った後で、TX=出力/RX=入力になるようにポート設定を行う必要があるようです。

26~40行目は音声合成LSI 用に私が準備したワークの初期化で、USART の設定には関係ありません。

41~44行目で受信時低位割込みに設定し、割込みフラグをクリアして受信割り込みを許可しています。 送信は 2msec 間隔で発生する TIMER2 割り込みで 1byte づつ送信します。 9600bps では約 1msec で 1byte 送信を完了します。 次の TIMER2 割り込み( 2msec 後)には送信完了確実で、さほど急ぐ通信ではないので USART の送信割り込みは使わないことにします。

intdef_USART


設定に当たりデータシートを見ると、いつも頼りにしている参考書には載っていないレジスター( BAUDCTL 下図)があったので、念の為に上図23行目で BRG16 をクリアしています。 おそらくデフォルト値=0と思われます。


BAUDCTL


下図も、データシートの記述です。

REGISTERS


音声合成LSI 制御の為に準備したワーク(データ・メモリー)について説明します。

以下は、テーブル参照に使うポインターを退避するデータ・メモリーのラベル(シンボル)定義です。 テーブル参照のポインター( TBLPTRU , TBLPTRH , TBLPTRL  )は一組しかないので、他のプログラムに影響を与えないように退避/復旧を行います。 赤外線リモコン受信を行う際に9~12行目を追加していましたが、今回は TIMER2 の低位割り込み処理の中でもポインターを使う為、12~14行目を追加しました。
退避用のデータ・メモリーは、メイン処理、低位割り込み処理、高位割り込み処理に各々独立に準備する必要がありますが、今のところ高位割り込みでポインターを使う予定がないので省略しています。

symboldef6_TBOPTR


以下は、音声合成LSI 制御用に準備したワークです。 各プログラムの説明の時に詳細を紹介します。

symboldef6_talk


音声合成LSI 関連記事のインデックスはこちら → 音声合成LSI 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



ダウンロードコーナー
記事検索
アンケートに御協力下さい


アーカイブ
楽々PIC 宛てBlogMail


--- ご了承下さい ---

注意して記事を書いていますが、記事及びリンク先の情報による不利益について、一切責任を負い(負え)ません。
QRコード
QRコード
アクセスカウンター

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ