PICマイコンによるLEDイルミネーションの製作 Q&A


002. テキストFig.3のIC端子に「RA2/AN0/Vref」のように2, 3つ書いてあるのはどういうことか?

 その端子は複数の機能を持っていて、目的に応じて使い分けが出来ることを表しています。例えば、1番ピンには、1)デジタル入出力[RA2]、2)アナログ入力[AN0]、3)基準電圧出力[Vref]の機能が割当てられています。始めはRA2(デジタル入出力)用となっていますが、然るべき設定を行うとアナログ入力、基準電圧出力として用いることができます。具体的には下図のような回路構成になっていて、切り替えが行われています。

入出力ピン(RA2/AN0/Vref)の内部構成(出典:PIC16F648A Data Sheet, Microchip Technology)


003. RAを使うのとRBを使うのは何か違いはあるのか?

 RA4とRA5を除くRA0〜RA3は、RB0〜RB7と同様に扱えます。今回は、バイト単位で点滅データを記す都合やLEDがいずれの端子に近いかで使用する端子を選んでみてください。


004. 発光ダイオードは、アノード側をピンにつないで、そのビットをONで光らすようにしてもよいのか?

 LEDのアノード側をマイコンにつなぎ、ONで光らせてもOKです。マイコンによっては、OFF(0)出力の方がポートあたりに流せる電流が大きく動作が安定であるため、下図のようにカソード側をマイコンにつなぎ、OFFで光らせる方法が通例となっています。また、LEDには個々に電流を制限する抵抗をつけることが望ましいのですが、今回は省略します。

LED回路点灯例


005. BCF,BSF命令で1つ1つのポートを操作する方法とMOVLW等のバイト命令で複数のポートを操作する方法の違いは?

 次の1)と2)は基本的に同じ働きをしているといえます。しかし、BCFやBSF命令はビット操作命令とは言いながら、一旦ポート全体(8ビット)を読み取り、指定したビットを操作してポートレジスタの上書きを行っています。出力側の影響により信号変化に遅れが生じる場合には、次のビット操作命令実行時に対象外のビットで0と1を誤って読み込み、上書きしてしまう(出力する)可能性があります。そこで、今回はそのような誤動作を防ぐため、1’)のようにビット操作命令間にNOP命令を挿入するか、2)の方法を用いることを薦めます。

1)
 BCF  PORTA, 0
 BSF  PORTA, 1
 BCF  PORTA, 2
 BSF  PORTA, 3
 CALL  WAIT0
 BCF  PORTA, 3
 CALL  WAIT0
2)
 MOVLW B'00001010'
 MOVWF PORTA
 CALL  WAIT0
 MOVLW B'00000010'
 MOVWF PORTA
1’)
 BCF  PORTA, 0
 NOP
 BSF  PORTA, 1
 NOP
 BCF  PORTA, 2
 NOP
 BSF  PORTA, 3
 CALL  WAIT0
 BCF  PORTA, 3
 CALL  WAIT0 

006. サンプルプログラムのUAの値である30Hは、何を表しているのか?

 データメモリ(テキストP.7 Fig.6のマップを参照)のバンク0内 20hから7Fhは、ユーザが利用可能なメモリ領域です。この20hや7Fhは、メモリアドレスと言ってデータを格納する場所を表しています。以下の記述は、このユーザエリアにあるデータメモリ30hをUAで表すことを示しており、サブルーチンWAIT1のUAは30Hと書き換えても何ら問題はありません。プログラム中のコメントでは、UA=150とありますが、データメモリの30hの場所に150が格納されることになります。またメモリには、このデータメモリとプログラムメモリがあり、同様なアドレス値を用いていますが、命令語によってそのどちらのアドレスを用いるかが区別されています。

#DEFINE  UA  30H

<Index>

Last Up Date: 2006/6/25