2016-04-22 15 views
-1

私はアセンブラを学び始めていますが、私はこの疑いがあります。私は、ポートBのビット0がクリアされている場合、私は(この場合は)何SBICが行うことは確認していることを読んだAVCアセンブラのSBIC命令

LDI R16, 0 
OUT DDRB, R16 ; Configures port B as an input port 
SBIC PORTB, 0 
LDI R18, 0xAA 
OUT PORTC, R18 
RETI 

次のコードセグメントを持っています。そうであれば、次の命令をスキップします。

私の質問は以下のとおりです。

1)は、ポートBのビットのすべてにOUT DDRB, R16書き込み0の場合、またはそれだけで、設定命令であるが、それはない書き込み何もしていますか?つまり、ポートBのビットはすべて0に設定されていますか?

2)これらがすべて0に設定されている場合、SBIC以降の命令はスキップされます。しかし、次にスキップされる最初の命令、またはRETIに達するまでのすべての命令だけですか?

+0

コメントには、ポートが入力として設定されていると記載されています。何も書いていない。 'SBIC'はポートピンに接続された外部回路が何であれ返り、単一のビットだけをチェックし、単一の命令もスキップします。これはすべてマニュアルに書かれています。 – Jester

+0

ポートのピンに 'LDI R16、0xFF'、' OUT PORTA、R16'のように1と0を書くことはできませんか?この場合、「SBIC」が返すものは外部回路に依存しないか、間違っていますか?最後に、「SBICが次の命令をスキップするかどうかを知ることは可能ですか? – Tendero

+0

ポートが入力として設定されている場合、ポートへの書き込みは通常、内部プルアップを制御します(ただし、特定のチップのドキュメントを参照してください)。いいえ、「SBIC」がスキップするかどうかはわかりません。もしあなたがそこにそれを使用していることはありません。 – Jester

答えて

1

最初の命令は、DDRBレジスタの全ビットに0を書き込みます。コメントとレジスタの名前からポートB入力のすべてのピンを作ると仮定します。これは明示的に何も出力しませんが、デバイスが電気的にどのように構成されているかに応じて、その時点でポートBピンのいずれかを読み取ろうとする外部デバイスは、読み込み用に設定されていないため、

次の命令は、PORTBレジスタの0番目のビットをテストします。その値は、対応するピンに接続されている値によって異なります。クリアされた場合、次の指示LDI R18, 0xAAはスキップされます。設定されていれば、次の命令が実行されます。

これは、OUT PORTC, R18でPORTCレジスタに格納された値が、サンプルコードの実行開始時にポートBの最初のピンの状態とR18に含まれる値の両方に依存することを意味します。