PicBasic Pro Compiler

完全日本語訳サンプル(テック・ハンゾウガネ訳)

Copyrights and Trademarks

Copyright ©2000 microEngineering Labs, Inc.
All rights reserved.

EPIC and PicBasic Pro are trademarks of microEngineering Labs, Inc.
BASIC Stamp is a trademark of Parallax, Inc.
PICmicro is a registered trademark of Microchip Technology Inc.

シリアルEEPROM命令 I2CREAD
              LCD    
命令 LCDOUT
   RS-232C
アウト命令 SEROUT

日本語訳文の著作権はテック・ハンゾウガネ諸橋義明に帰属します。

Japanese Translation  Copy Right

    ©2001-2003 TechHanzougane Yoshiaki Morohashi
尚、日本語訳文から派生する利用者のいかなる不利益もテック・ハンゾウガネ諸橋義明は責任を負いません。

 

 

 

I2CREAD

I2CREAD DataPin,ClockPin,Control,{Address,}[Var{,Var...}]{,Label}

ControlとオプションのAddressバイトをClockPinとDataPinに送出し、受け取ったバイトを変数の中に格納してください。 ClockPinとDataPinは定数、ナンバー0-15(e.g. B0 )あるいはピン名前(e.g. PORTA.0 )を含む0-15、あるいは変数であることができます。I2CREADとI2CWRITEがマイクロチップ24LC01Bと類似のデバイスのような2ワイヤーのI2CインタフェースでシリアルEEPROMにデータを読み書きに使うことができます。 それが、電源が止められた後さえ、保持されるように、データは外部の不揮発メモリに格納されることができます。これらのコマンドはI2Cマスターモードで動作して、そして同じく温度センサやA/DコンバータのようなI2Cインタフェースで他のデバイスと通話をするためにもわれます。

12ビットのコアのためにPICmicro MCUのみ、I2C クロックとデータピンがDEFINEによってコンパイル時に固定されます。 このインフォメーションがコンパイラによって無視されるけれども、それらはまだI2CREAD命令で指定されなければなりません。

        DEFINE I2C_SCL PORTA,1    'For 12-bit core only
        DEFINE I2C_SDA PORTA,0    'For 12-bit core only

コントロールバイトの上7ビットはチップ選択あるいは追加のアドレスインフォメーションとともに、特定のデバイスによって制御コードを含んでいます。 下位bit はそれが読みまたは書き込み命令であって、そしてクリアしておかれるべきであるかどうかを示す内部のフラグです。コントロールバイトのためのこのフォーマットはオリジナルのPicBasicコンパイラによって使われるフォーマットと異なっています。PBP I2Cオペレーションでこのフォーマットを使うことを確認してください。例えば、24LC01Bとコミュニケートするとき、制御コードは%1010です、そしてチップ選択は使われていません、それでコントロールバイトは%10100000あるいは $A0であるでしょう。 様々な役割のコントロールバイトのフォーマットを次に上げます:

Device

Capacity

Control

Address size

24LC01B

128 bytes

%1010xxx0

1 byte

24LC02B

256 bytes

%1010xxx0

1 byte

24LC04B

512 bytes

%1010xxb0

1 byte

24LC08B

1K bytes

%1010xbb0

1 byte

24LC16B

2K bytes

%1010bbb0

1 byte

24LC32B

4K bytes

%1010ddd0

2 bytes

24LC65

8K bytes

%1010ddd0

2 bytes

bbb =ブロックセレクト(ハイ順アドレス)ビット

ddd =デバイスセレクトビット

xxx =気にかけない

アドレスサイズ送出(バイトあるいはワード)は使われる変数の大きさによって決定されます。 もしバイトサイズの変数がアドレスに使われるなら、8ビットのアドレスが送られます。 もしワードサイズの変数が使われるなら、16ビットのアドレスが送られます。 あなたがそれとコミュニケートすることを望むデバイスのために適切なサイズの変数を使うことを明示してください。定数は定数のサイズにたいへん依存したアドレスのために使われるべきではない。また表現は送出される不適当なアドレスサイズとして使用されるべきではない。

もしワードサイズの変数が指定されるなら、2バイトが読まれて、ハイバイトが最初に格納されます。ローバイトが続きます。 この順序は変数を通常に格納する、ローバイトが最初の方法と異なっています。修飾子、STR、は可変的な名前の前に含まれます。 これは同時にに全部の配列(文字列)をロードすることができます。 もしSTRが指定されるなら、次の変数はバックスラッシュ(\)と数に続いて、ワードあるいはバイト配列の名前でなくてはいけません:

a var byte[8]

I2CREAD PORTC.4,PORTC.3,$a0,0,[STR a\8]

もしワードサイズ配列が指定されるなら、それぞれの要素を構成する2バイトはローバイトは最初に読み込まれる。 これは単純なワードが読まれる方法の正反対であって、そしてコンパイラが通常ワードサイズ変数を格納する方法と一致している。もしオプションラベルが含まれるなら、このラベルはアクノリッジがI2Cデバイスから受信されないならジャンプされるだろう。ICインストラクションは12CExxxと16CExxxデバイスのオンチップシリアルEEPROMにアクセスするために使われることができる。 ただ適切な内部のラインのピン名をICコマンドの部分とプログラムの最上部においてDEFINEに続く場所の一部として明示しなさい:

DEFINE I2C_INTERNAL 1

12CE67xデバイスのために、データラインはGPIO.6である、そしてクロックラインはGPIO.7である。16CE62x デバイスのために、データラインはEEINTF.1である、そしてクロックラインはEEINTF.2である。 もっと多くの情報のためそれらのデバイスのマイクロチップデータシートを見なさい。IC インストラクションのタイミングは(100KHz)から8MHzまでのクロック速度でアクセス可能であるであろう標準スピードデバイスにセットされる。 高速モードデバイス(400KHz)は20MHzまで使える。 もし8MHz以上において標準スピードデバイスにアクセスすることが望まれるなら、次のDEFINEはプログラムに加えられるべきである:

DEFINE I2C_SLOW 1

受信デバイスによって休止できるI2Cバス上でその保持クロックラインlowのため遷移させなさい。 これを可能にするために、次のDEFINEはプログラムに加えられるべきである:

DEFINE I2C_HOLD 1

IC クロックとデータ行は次の回路図でそれらはまた双方向性のオープンコレクター規則で共に動作しているとして4.7K抵抗でVccにプルアップされるべきだ。2極式のIC クロック線を作製するために、オープンコレクターのかわりに次のDEFINEをプログラムに追加できる

DEFINE I2C_SCLOUT 1

 

addr    var      byte
cont    con      %10100000
        addr = 17                 Set address to 17
                           Read data at address 17 into B2
        I2CREAD PORTA.0,PORTA.1,cont,addr,[B2]

さらなる情報のため、それらやI2CREADI2CWRITEコマンドが使われているだろうデバイス上でMicrochip ANon-Volatile Memory (不揮発メモリ)Products Data Book@を見なさい

 

 

 

 LCDOUT

LCDOUT Item{,Item...}

インテリジェント液晶上にItemを表示します。 PBPは日立44780コントローラーあるいは同等品でLCDモジュールをサポートします。 これらのLCDは通常1つのエッジにおいて14あるいはの16ピンの単列あるいは二重横列のヘッダーがあります。もしポンドサイン( # )がItemに前置されるなら、それぞれのデジットのASCII表記はLCDに送られます。 LCDOUT(12ビットのコア以外のすべてのデバイスの上で)は同じくSEROUT2と共に使われる修飾子のいずれも使うことができます。 このインフォメーションのためにSEROUT2の上にセクションを見てください。

Modifier

Operation

{I}{S}BIN{1..16}

2進数を送信しなさい

{I}{S}DEC{1..5}

10進数を送信しなさい

{I}{S}HEX{1..4}

16進数を送信しなさい

REP c\n

文字cがn回繰り返し送信しなさい

STR ArrayVar{\n}

n個の文字ストリングを送信しなさい

最初のコマンドをLCDに送る前に、プログラムが少なくとも0.5秒を待つべきです。 それはLCDがスタートアップする間を取ります。いろんな文字あるいはコマンドがLCDOUTを使って送られる最初に、LCDは初期化されます。 もし動作中に何らかの理由でそれが電源停止やそれから電源バックアップされるなら、LCDOUTを使う次のとき、内部のフラグを再初期化することをプログラムに示すためリセットできます:

FLAGS = 0

コマンドは、$FEに続くコマンドを送出することによってLCDに送られます。若干の有用なコマンドが次の表に載せられています:

Command

Operation

$FE, 1

クリアディスプレイ

$FE, 2

リターンホーム(最初のラインの始め)

$FE, $0C

カーソルオフ

$FE, $0E

アンダーラインカーソルオン

$FE, $0F

ブリンキングカーソルオン

$FE, $10

カーソルを左へ1つポジション移動してください

$FE, $14

カーソルを右へ1つポジション移動してください

$FE, $C0

カーソルを2番目のラインの始めに移動してださい

$FE, $94

カーソルを3番目のラインの始めに移動してください

$FE, $D4

カーソルを4番目のラインの始めに移動してください

カーソルを2ラインのディスプレイの2番目のラインの始まりに動かすコマンドがあることに注意してください。 たいていのLCDに、表示された文字と行はディスプレイメモリーで連続していません−ロケーション間でブレークすることができます。 たいていの16x2ディスプレイのため、最初のラインは$0で始まります、そして2番目のラインは$40で始まります。 コマンド:

LCDOUT $FE, $80 + 4

は最初のラインの4番目の位置で書き始めることを設定します。

16x1ディスプレイが通常1番目と2番目の8文字のためにメモリー配置のあいだのブレークで8x2ディスプレイとしてフォーマットされます。 上の表に示されるように、4ラインのディスプレイはまた複合しているメモリーマップを持っています。文字記憶場所と追加のコマンドのために特定のLCDデバイスのデータシートを見てください。.

        LCDOUT $FE, 1, Hello ’ディスプレイをクリアして、そして「 Hello 」を表示してください
        LCDOUT $FE,$C0,World  ’2番目のラインにジャンプして”World”を表示してください
        LCDOUT B0, #B1         B0とB1の十進ASCII値を表示してください
 
LCDは4ビットのバスあるいは8ビットのバスを使ってPICmicroに接続できる。 もし8ビットのバスが使われるな
ら、すべての8ビットは1つのポートの上になければなりません。 もし4ビットのバスが使われるなら、最下位4ある
いは1つのポートの最上位4bit に接続しなくてはいけません。 イネーブルとレジスタセレクトはどんなポートピンと
でも接続されても良い。 LCDOUTコマンドが書き込みのみである時、 R/Wはグランドに結線されるべきです。

LCDは4ビットのバスあるいは8ビットのバスを使ってPICmicroに接続できる。 もし8ビットのバスが使われるなら、すべての8ビットは1つのポートの上になければなりません。 もし4ビットのバスが使われるなら、最下位4あるいは1つのポートの最上位4bitに接続しなくてはいけません。イネーブルとレジスタセレクトはどんなポートピンとでも接続されても良い。 LCDINコマンドが使われない時、 R/Wはグランドに結線されるべきです。

PBPは、示されないならLCDが特定の Pinに接続していると想定します。 それはPICmicroPORTA.0 - PORTA.3, レジスタセレクトPORTA.4 とイネーブルPORTB.3が接続されたデータラインDB4 - DB7を持った4ビットバスで使われるであろうと想定します。それはまたLCDを2ラインのディスプレイに初期化するようにあらかじめセットされています。このセットアップを変更するため、次のDEFINEの1つまたはさらに多くの文ををあなたのPicBasic Proプログラムのトップに置いてください:

        ' Set LCD Data port
        DEFINE LCD_DREG  PORTB
        ' Set starting Data bit (0 or 4) if 4-bit bus
        DEFINE LCD_DBIT  4
        ' Set LCD Register Select port
        DEFINE LCD_RSREG PORTB
        ' Set LCD Register Select bit
        DEFINE LCD_RSBIT 1
        ' Set LCD Enable port
        DEFINE LCD_EREG  PORTB
        ' Set LCD Enable bit
        DEFINE LCD_EBIT  0
        ' Set LCD bus size (4 or 8 bits)
        DEFINE LCD_BITS  4
        ' Set number of lines on LCD
        DEFINE LCD_LINES 2
        ' Set command delay time in us
        DEFINE LCD_COMMANDUS     2000
        ' Set data delay time in us
        DEFINE LCD_DATAUS        50

このセットアップはPBPに2ラインのLCDが PORTB.0の上に PORTBの最上位4ビット、 PORTB.1上のレジスタセレクトとイネーブル上の4ビットのモードでデータバスに接続していると示すでしょう。次の回路図は、デフォルトを使って、LCDをPICmicroに接続する1つの方法を示します:

(訳者注記):下図はPORTAをデータバスとしたものであり上のDEFINE文はPORTBをデータバスとしたものです。


 

 

 SEROUT

SEROUT Pin,Mode,[Item{,Item...}]

標準的な非同期フォォーマットを使っている8データビット、ノーパリティと1ストップビット(8N1)でPin上に1つかそれ以上のItemを受け取ってください。  SEROUTはBS1 Seroutコマンドに類似しています。 Pin は自動的にアウトプットにされます。 Pinは定数、0−15、あるいは番0−15(e.g. B0 )あるいはピン名(e.g. PORTA.0)を含んでいる変数であることができます。

Mode名(T2400)はファイルMODEDEFS.BASで定義されます。 それらを使うために、PICBasic Proプログラムのトップに

Include "modedefs.bas"
のラインを付加して下さい。

BS1DEFS.BASとBS2DEFS.BASがすでにMODEDEFS.BASを含みます。 もしこれらのファイルの1つがすでに含まれているなら、再びそれを含まないでください。 このファイルを含まないで、Modeナンバーは使われることができます。

Mode

Mode No.

Baud Rate

State

T2400

0

2400

Driven True

T1200

1

1200

T9600

2

9600

T300

3

300

N2400

4

2400

Driven Inverted

N1200

5

1200

N9600

6

9600

N300

7

300

OT2400

8

2400

Open True*

OT1200

9

1200

OT9600

10

9600

OT300

11

300

ON2400

12

2400

Open Inverted*

ON1200

13

1200

ON9600

14

9600

ON300

15

300

* Openモードは12ビットコアPicMicro MCUでサポートしない。

SEROUTはミックスして、一つのSEROUT文中で自由に組み合わされる3つの異なったデータ型をサポートします。

1)

    

文字列定数が文字のリテラル列として出力されます。

2)

 

数値(変数あるいは定数)が対応するASCII文字を送出する。 最も注記すること、13が改行です、そして10はリターンです。

3)

 

ポンドサインを( # )前置がその十進値の ASCIIの表現を送出する。 例えば、もし W0  = 123であるなら、それから # W0 (あるいは # 123)が「1」、「2」、「3」を送るでしょう。


そのビットタイミングを生成するとき、SEROUTは4MHzオシレータを想定します。 他のオシレータ値で適切なボーレートタイミングを保持するために、新しいオシレータ値にOSC設定をDEFINEで明らかにしてください。

ある場合には、SEROUT命令の送信速度は受信デバイスにあまりにも速く文字を渡すことができます。 DEFINEがシリアル出力伝送に文字間隔を付加します。 それらが伝送されるとき、文字間の追加時間を割り当てます。DEFINEの文字間隔は伝送されたそれぞれの文字間に1から65,535マイクロ秒(.001から65.535ミリ秒)のディレーを割り当てます。
例えば、それぞれの文字の送信の間に1ミリ秒ポーズするため:

DEFINE CHAR_PACING 1000

シングルチップRS -232レベルコンバータが普通で、そして高価でない間に、PICmicroの素晴らしい I/O 仕様はたいていのアプリケーションがレベルコンバータ無しで動作することを可能にします。どちらかと言えば、電流制限抵抗器の接続で反転インプット( N300. .N9600 )が使える。
(RS-232Cは短絡許容であると仮定する)

        SEROUT 0,N2400,[#B0,10]  ' B0 の ASCII 値をPin0 の外にシリアルにラインフィードで送信して下さい