PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第242回]
●PIC18F45K50(5)SR Latch(2)
PICに限らないのですが組込みに使うことのできるCPUは工場出荷時にはプログラムは書き込まれていないのが通例だと思います。
PICの場合にはConfigとSFRの設定が必須ですがそれらの多くはデフォルトの値が書き込まれています。
今回やりたいことはとりあえずはSR Latchの動作を確認したいということなのでI/OポートのSRI入力端子に値を入力してSRQ出力端子またはSRNQ出力端子に出力される値さえ確認できればそれでよいことになります。
ということはSRI入力端子にLまたはH信号を与えたときにSRQ出力端子およびSRNQ出力端子がどう変化するかを確認できればよいことになります。
それならば。
ひょっとしてうまくいけば工場出荷時のデフォルト値のままでいけたりして。
ところがPIC18F45K50などはなまじ高機能なだけにデフォルトのままではそんなに簡単に希望通りに動いてくれたりはしません。
そもそもどういう考えからかデフォルトの設定のままではI/Oポートは入力にも出力にも使えません。
私の知る限りではアナログ入出力機能があるPICの場合にはデフォルトではアナログ機能が優先になっています。
今回のようにSR Latchを使おうとすると少なくともPORTAとPORTBはデジタルに設定する必要があります。
それにはそのためのSFRを設定する必要があってそれにはプログラムが必要になります。
とりわけPIC18F45K50はアナログからデジタルへの変更にはちょいと悩ましい問題があってプログラムにもそれなりに工夫が必要です。
そしてさらには前回書きましたようにSR Latchを使うためにはそのためのSFR(SRCON0およびSRCON1)の設定が必要です。
それもそのためのプログラムをPIC18F45K50に書き込まなければ設定することができません。
そこまでできてはじめてSR Latchの動作確認ができることになります。
ことほど左様にとにかくPICは便利なICなのですが使うのはなかなか簡単ではありません。
そこで前回の終わりにも書いたのですがPICBASICコンパイラならばインタプリタ感覚でちょいちょいとプログラムを作成して即席で動かして試してみることができます。
ちなみにPICBASICコンパイラではI/Oポートはアナログではなくてデジタルに初期設定済みです。
ですからたとえばPORTBにある値を出力するなら
PORTB=xx
のように書けばよいのです。
PORTBもSFRですから他のSFRについても同じように書くことができます。
PORTBを入力にしたければ
TRISB=FF
と書くだけです。
これがインタプリタならばそのままダイレクトモードで実行することができますが残念ながらBASICコンパイラにはダイレクトモードはありません。
ですからあくまでプログラムとして
10 PORTB=55
のように書いてそれを実行することになります。
とは言ってもPICBASICコンパイラは/RUNコマンドでコンパイラから実行まで一度にやってしまいますからダイレクトモードが使えなくてもそれほど不便はありませんでしょう。
とここまで書いてきて。
あれ?
PICBASICコンパイラではSFRにアクセスするのにもっと便利な機能があったはず。
やっと思い出しました。
/RDと/WRです。
実質的にダイレクトモードそのままです。
/RDは[第131回]と[第132回]で説明しています。
/WRは[第133回]で説明しています。
PIC18F45K50でこの機能を使うのは初めてなのでテストを兼ねて使ってみました。

PICBASICコンパイラではPORTBは出力に初期設定してあります。
ですからいきなりPORTBに値を出力することができます。
出力に設定してあるPORTを読むと現在の出力値がそのまま読み込まれます。
最初に/rd PORTBを実行しました。
読み込まれた値は[00]ですから現在PORTBには00が出力されていることになります。
続いて/wr PORTB,aa
を実行しました。
PICBASICコンパイラでは8ビットの数値はそのまま16進数で表記します。
00、aaはともに16進数です。
00H、AAHです。
そのあとでもう一度/rd PORTB
を実行しました。
読み込まれた値が[aa]になりました。
PICBASICコンパイラには/rd、/wrのほかに/dmrdコマンドがあります。
/dmrdは[第134回]と[第135回]で説明しています。
PORTBのアドレスはF81です。
上の/dmrdの出力値を確認してみるとF81の値はAAになっています。
ちなみにTRISBのアドレスはF93です。
上の/dmrdの出力値を確認してみるとF93の値は00になっています。
TRISXのビットが1のときそのビットは入力に設定され0のときそのビットは出力に設定されます。
下はPIC18F45K50のSFRのアドレス表(一部)です。

[出典]Microchip TechnologyInc. PIC18F2X/45K50 Datasheet
上の方でコマンドプロンプトでPICBSコンパイラを実行して/rd、/wrを実行している画像をお見せしましたがそのとき実際にUSB経由でWindowsパソコンに接続していたPICBSコンパイラボードPICBS02(18F45K50)の写真です。

I/Oポート入出力用26pinコネクタに接続したLED表示ボードでPORTB出力データの確認をしています。
写真撮影の都合でLEDボードが横向きになっています。
一番右の列がPORTB出力です。
上側がビット7で下側がビット0です。
回路の都合で出力が1のときに消灯、0のときに点灯します。
その並びを見ると出力が10101010になっています。
つまりAAです。
/wr PORTB aaを実行した結果がそのまま実際にPIC18F45K50のPORTBの出力になっていることがわかります。
手前味噌の宣伝ですが。
これってすごいことじゃありませんか。
こんなに簡単にPICを操作できるものなんてほかには無いと思います。
今回は念のための小手調べでした。
次回はいよいよSR Latchを実際に使ってみます。
PICBASICコンパイラ[第242回]
2026.6.23 upload
前へ
次へ
ホームページトップへ戻る