れれれ?

最近、仕事で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に何かあるのだろうか。
合間を見て究明したいと思う。
しばらく、うなされそうだ。。。
-
前の記事
ナツメ球をLED電球に変えた 2011.04.10
-
次の記事
PICkit2は抵抗が要らない? 2011.05.01