れれれ?

NO IMAGE

最近、仕事で16F886というPICマイコンを使ったが、不思議なことがあったので書いておきたいと思う。

16F886のPORTCの6/7ビット目を入力、4/5ビット目を出力とした(出力の初期値は全てL)。6ビット目の入力をL→H→Lにすると、4ビット目の出力がL→Hとなり、6ビット目の出力がLになっても戻らない。
7ビット目の入力をL→Hにすると、4ビット目の出力がH→Lになる。
他のPORT(PORTBの0ビット)がHとなった場合に7ビット目の入力がHであると、今度は5ビット目の出力がL→H→Lとなり、6ビット目の入力をL→Hにした場合だけ5ビット目の出力がH→Lになる…というもの。

つまり、4-6/5-7ビット目が対になっていて、反対側の入力がL→Hとなると、出力がリセットされるという動作なのだ。

これを、INT割り込みを使ってやってみたのだが、16F628などで今まで似たようなことはやってきており、問題ないと思っていたのだが、16F886だとなぜかうまくいかない。

何がうまくいかないかというと、反対側の入力をL→Hにした場合、出力がリセットされるまではよいのだが、反対側の出力までもL→Hに変化してしまうのだ。
おまけに、割り込み時のプロシージャでWhile命令を使ってポーリングさせても、全く無視をされて、While命令の所は素通りされてしまう。
スタックレベルの問題か?うーん。分からん…。

シミュレータでちまちまやっている時間がないので、しぶしぶ割り込みを使わず、MainのプロシージャでWhile命令を使ってグルグル回すようにした。

それにしても、これって一体何ぞや。おいらの凡ミスか?うーん。

微妙に旧型のマイコンと仕様が変わってしまったのだろうか。それとも、プログラムに使ったSourceBoostのver.6.96に何かあるのだろうか。
合間を見て究明したいと思う。

しばらく、うなされそうだ。。。