「加算・減算」と言う記事で、1byteデータの加算を例示していますが、今回は 13bit 以下のデータ同士の加算と減算です。 コーディング中の赤外線リモコン受信プログラムの一部アセンブラ・ソースで説明します。 <PICデバイス=18F1320>
下図のコメントに 16bit とありますが、197~202行目の加算処理ではオーバーフローの可能性があることに注意が必要です。 赤外線リモコン受信プログラムの中で下図が扱うデータは 13bit 長以下のためこのまま使います。 また181~186行目で入力値の大小比較に基づく分岐を行って、減算時結果が負にならない設計です。 デバックの結果、下図の大小比較には不充分な点があります。 加算・減算部のみ参考にして下さい。 (08/20日追記)
プログラムは、入力値( shiftwh , shifutwl , irtoldh , irtoldl , irtim0h , irtim0l )を破壊することなく出力先( irtdth , irtdtl )に演算結果を記録します。
なお、前述ラベル名の末尾 h , l はそれぞれ上位、下位を示します。
加算・減算共に下位から演算を初め、下位同士の演算ではキャリーまたはボローを含まない命令を使います。 続く上位同士の演算ではキャリーまたはボローを演算に含めます。 16bit 長を超える値同士の演算も同様に、最下位の演算だけはキャリーまたはボローを含まず、他はキャリーまたはボローを含む命令を使います。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
下図のコメントに 16bit とありますが、197~202行目の加算処理ではオーバーフローの可能性があることに注意が必要です。 赤外線リモコン受信プログラムの中で下図が扱うデータは 13bit 長以下のためこのまま使います。 また181~186行目で入力値の大小比較に基づく分岐を行って、減算時結果が負にならない設計です。 デバックの結果、下図の大小比較には不充分な点があります。 加算・減算部のみ参考にして下さい。 (08/20日追記)
プログラムは、入力値( shiftwh , shifutwl , irtoldh , irtoldl , irtim0h , irtim0l )を破壊することなく出力先( irtdth , irtdtl )に演算結果を記録します。
なお、前述ラベル名の末尾 h , l はそれぞれ上位、下位を示します。
加算・減算共に下位から演算を初め、下位同士の演算ではキャリーまたはボローを含まない命令を使います。 続く上位同士の演算ではキャリーまたはボローを演算に含めます。 16bit 長を超える値同士の演算も同様に、最下位の演算だけはキャリーまたはボローを含まず、他はキャリーまたはボローを含む命令を使います。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。