2013.12.16
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第525回]


●PICサンプルプログラムの説明で気になったこと(2)

前回からの続きです。
[第521回]に書きましたPICプログラムの説明で、よく確かめないで書いてしまったところがあって、それがあとで気になってきましたので、確認をしてみることにしました。

気になったことは2つありました。
その1つについては前回書きました。
アドレス1、2、3には普通に命令を書いてもよいだろうか、ということについてですが、これはテストプログラムを書いて確認してみた結果、どうやらそのようにしてもよいらしいということがわかりました。

さてもうひとつの気になったことについてです。
PIC16F887では多くのI/O端子をアナログ入力端子と共用しています。
[第521回]に書きましたように、デフォルトではアナログ入力が選択されていますから、各端子をI/O端子として使う場合には、普通は下のプログラムのようにANSELおよびANSELHの設定をI/O入出力にします。

     org 0
st0
     goto start
;
     org 04
        goto int
;
        org 05
;
start
        movlw 60;bk3
        movwf STATUS
        clrf ANSEL
        clrf ANSELH


[第521回]では、データシートのそこのところの説明文を深読みして、アナログ入力が優先されるのは、I/O端子を入力に設定したときだけで、出力に指定したときはTRISの出力設定がANSELの設定よりも優先される、なんて分かったようなことを書いてしまいました。
でも後から気になって試してみました…。

上のプログラムを下のようにANSEL、ANSELHの設定のところをコメント文に直してみましたら…。
     org 0
st0
     goto start
;
     org 04
        goto int
;
        org 05
;
start
        movlw 20;bk1
;       movlw 60;bk3
        movwf STATUS
;       clrf ANSEL
;       clrf ANSELH
;       bcf STATUS,6;bk1
        movlw 64


こんなことになってしまいました。


前回もお見せしましたが下は上のように変更する前のプログラムを実行したときの写真です。



[第521回]で引用した下の文なのですが、よくよく読んでみましたら、とんでもないことを見落としておりました。

[出典]Microchip Technology Inc. PIC16F882〜887Data Sheet

やっぱりDataSheetはよくよく読まなければなりませぬ。
読むべきところは上記の引用文の前後にありました。
結論としては[第521回]に書きました通り、I/O端子をデジタル入出力として使う場合には(たとえ出力として使う場合であっても!!)、「ころばぬ先の杖」としてANSEL、ANSELHを必ずデジタル指定にしておくべきでありました。
しかし、その意味するところは[第521回]ではまだわかっておりませんでした。
次回必見であります。

ワンボードマイコンでCP/Mを![第525回]
2013.12.16upload
2013.12.17一部修正

前へ
次へ
ホームページトップへ戻る