- ベストアンサー
PICで入力ポートの内容を出力ポートにコピーしたい
PICのプログラムをアセンブラで組んでいるのですが、 どうにもシンプルな書き方ができなそうなのでお知恵をお貸しください。 例えば、 ポートAが入力、それ以外のポートは出力になっているとします。 ・ポートAの0番のオンオフを、ポートBの2番へコピー出力。 ・ポートAの1-3番のオンオフを、ポートCの4-6番へコピー出力。 という感じで、Aのオンオフ状況を、各出力ポートにコピーするということをしたいです。 どのようにしたらスマートに書けるでしょうか? ちなみに各出力ポートに関して、コピーする前に一旦全てオフにする、 というようなことはできません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一例ですが BTFSC PORTA,0 ; PORTA_BIT0=0 SKIP BSF PORTB,2 ; PORTB_BIT2=1 SET BTFSS PORTA,0 ; PORTA_BIT0=1 SKIP BCF PORTB,2 ; PORTB_BIT2=0 CLEAR PORTAのリードが 1回目 2回目 変わらないことが前提ですが 複数のビットをコピーするのなら、マクロを組むか、レジスタにコピーして論理演算で合成してから出力します BIT_COPY MACRO PORT_X,BIT_X,PORT_Y,BIT_Y BTFSC PORT_X,BIT_X BSF PORT_Y,BIT_Y BTFSS PORT_X,BIT_X BCF PORT_Y,BIT_Y ENDM BIT_COPY PORTA,1,PORTC,4 BIT_COPY PORTA,2,PORTC,5 BIT_COPY PORTA,3,PORTC,6
その他の回答 (1)
- koi1234
- ベストアンサー率53% (1866/3459)
シンプルかどうかは置いておいて B/Cポートデータが読み込みできないということであれば 事前に書くポートへの出力でーや用のメモリを確保して そのデータの大してAポートのデータを反映して それぞれのポートに出力するのが常套手段となります そういった事を聞いてるんじゃないのかな? (正直何を質問したいのかよくわからん)
補足
ご返信ありがとうございます。 質問としては、どうも自分の思いつく方法だと書き方が冗長になってしまうので 普通はこういう場合にどうやって書くものなのかと思い質問させていただきました。 とりあえず思いついた方法というのは以下のような感じなのですが、 もう少しまとめて書いたりできないものでしょうか。。。 MOVF PORTA,0 ; MOVWF MEM ;PORTAの内容を保存 BTFSC MEM,0 BSF PORTB,2 BTFSC MEM,1 BSF PORTC,4 BTFSC MEM,2 BSF PORTC,5 BTFSC MEM,3 BSF PORTC,6 BTFSS MEM,0 BCF PORTB,2 BTFSS MEM,1 BCF PORTC,4 BTFSS MEM,2 BCF PORTC,5 BTFSS MEM,3 BCF PORTC,6
お礼
一番上の書き方は私が考えたのと大体同じ感じでしょうか。 やはりアセンブラだと冗長になりがちなのはしょうがないのかもしれません。 マクロを組めるのは知りませんでした。 これは便利ですね。 後々にも使える場面が出てくると思います。 ありがとうございました。