PICのSTATUSレジスタのz〔ゼロ〕フラグとC〔キャリー〕が同時に1になることはあるのでしょうか?以下のようなときのことなのですが・・・

movlw b'00000001'
sublw b'00000001'
このような時のZフラグとCフラグはどうなるのでしょう?
PIC活用書等を読んでみたのですが、あまりわかりませんでした。
初心者な質問ですが宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

PIC16F84A+ADXL202+WonderSwanをフライパンに取り付け、


炒飯を作るゲームを作っています(^^;)。

>z〔ゼロ〕フラグとC〔キャリー〕が
>同時に1になることはあるのでしょうか?

普通はないと思います。
あるとすれば、フラグを意味するワークへのストア。

>movlw b'00000001'
>sublw b'00000001'

の結果は、Z=1, C=0だと思います。
Cは引き算で足りなかったときに1だと思いますが...。
    • good
    • 0

手元にあるPIC16F84の命令表によると,


ZとCが同時に変化する可能性のある命令は
 ADDLW
 ADDWF
 SUBLW
 SUBWF
と書かれています.

参考URLから,お使いのPICのデータシートをダウンロードしておくと
良いと思います.

参考URL:http://www.microchip.co.jp/
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QPIC(MOVFで何故、STATUS Zフラグが変わるのか)

こんにちは。
PICマイコンで割り込みをやる場合、
MOVFはSTATUSのZフラグに影響を与えるので、
使わない、とありますが、
何故、MOVFでZフラグに影響を与えるのか、
どういう影響を与えるのか分かりません。
割り込みを使わなくても、STATUS<Z>を
条件判断に使っている限り、
MOVFは使えないのでしょうか。

また、
本によっては、
(割り込みのはじめ)
MOVWF W_TEMP
MOVF STATUS,W(*)
MOVWF ST_TEMP
   ~割り込みの内容
MOVF ST_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
(割り込み終わり)
のように書いてあり、
この場合、*で、
STATUSのコピー前(同時)に、
MOVFを使っていますが、
これは、OKなのでしょうか。

何か分かる人がいましたら、
よろしくお願いします。

Aベストアンサー

こんばんわ。

>何故、MOVFでZフラグに影響を与えるのか、どういう影響を与えるのか分かりません。
MOVFでZフラグに影響が出るのは、PICの設計の思想の問題なのですが、とりあえず影響を与えると受け入れるしかありません。
割り込みは、いつ発生するか分りませんので全てのフラグとレジスタに影響を与えては行けません。割り込み開始時と同じ状況に復元して割り込み処理を終了する必要があります。
>割り込みを使わなくても、STATUS<Z>を条件判断に使っている限り、MOVFは使えないのでしょうか。
条件分岐とかで判断する前にMOVFを使うとZフラグ変わってしまいます。

以下の割り込みの開始処理の解説してみます。
MOVWF W_TEMP   ;WレジスタをW_TEMPに退避。
MOVF STATUS,W ;STATUSレジスタをWレジスタへ。
MOVWF ST_TEMP ;STATUSレジスタをST_TEMPに退避。
で、この時のMOVFが問題ないのかって事だと思うのですが。
MOVFでZフラグが変化するのは移動後なんです。つまりレジスタの中身を移し変えた後で変化します。
なので、
MOVF STATUS,W
とすると元のSTATUSレジスタの内容がwレジスタに移されます。
その後にZフラグが変化しますが、wレジスタにあるSTATUSレジスタの内容はMOVF前のままって事になります。

えーと、分っていただけましたか?
分らなかったら、また補足などで質問してください。

こんばんわ。

>何故、MOVFでZフラグに影響を与えるのか、どういう影響を与えるのか分かりません。
MOVFでZフラグに影響が出るのは、PICの設計の思想の問題なのですが、とりあえず影響を与えると受け入れるしかありません。
割り込みは、いつ発生するか分りませんので全てのフラグとレジスタに影響を与えては行けません。割り込み開始時と同じ状況に復元して割り込み処理を終了する必要があります。
>割り込みを使わなくても、STATUS<Z>を条件判断に使っている限り、MOVFは使えないのでしょうか。
条件分...続きを読む

QSTATUSのZフラグについて

STATUSのZフラグについてお聞きしたい事があります。
参考書を読んでみると、「Zフラグは、計算結果や代入結果が'0'となったことを表す指標のことをいう。数値の一致を知るには引き算をしてZフラグを見るプログラムを書く」とあります。
サンプルプログラムを見ても'0'か'1'しかZフラグには存在しない様に思われますが、現在私が組んでいるプログラムでは、プログラムが1行進むにつれてZフラグの数字が1ずつ増えていってしまい、計算結果を確認する事が出来ません。これは単に私のプログラムの設定が間違っているのでしょうか。もしソースがあれば判断出来るのであれば後ほどアップしますのでどなたか教えてもらえませんか。PICアセンブラで組んでいます。宜しくお願い致します。

Aベストアンサー

0Vと5Vがショートしない限り発火の心配はないと思います。
10Kオームの抵抗でパルスとの間は安全に接続されていますので、この回路で問題はでないと思いますが、ゲート側にコンデンサが入っているのでノイズには良いかもしれませんが、多少信号が遅延しているかも(時定数をすぐ言えるほど精通していないので勘ですが)。カウントできているなら問題ないと思います。
コンデンサは信号の変化をゆるやかにする効果がありますので。

QPIC16F88で500という数字を8ビット+2ビットのレジスタに設定

PIC16F88で500という数字を8ビット+2ビットのレジスタに設定する方法を教えていただきたいです。

変数D1,D2,D3にそれぞれ、0,0,5 という500を意味する各桁の数字が入っているのですが、
これをPWMのDutyのレジスタに8ビット+2ビットで設定したいのですが、
どんな手順をとったら10ビットの2進数に変換できるでしょうか?

Aベストアンサー

16bit単位アクセス可能なレジスタなら普通にshort型変数にD1~D3を合成した結果を入れた上で、その変数を直接レジスタに投げ込めば問題なく入ります。

8bit単位でアクセスするなら、このshort型変数を上位バイト・下位バイトに分割(ビット演算とビットシフトでできます)してそれぞれ投げればOK。

2bit側の残り6bit(以上)の部分に何かしらの意味がある場合はその部分を保持して合成する手順が入るので少し面倒ですが、単純には上記の考え方がベースになります。

QPIC18FのSTATUS

PIC18FのSTATUSレジスタ(N,OV,Z,DC,C)の内Z,DC,Cは16Fと同じだと思いますがN,OVが部分的にわかりません
OV:7ビット越えのオーバーフローフラグということですが8ビットオーバーすればC=1と思いますがなぜ7ビットなのでしょう?
どういった時に使えるものなのでしょうか?(符号付とは?)
N:演算の負フラグ
16Fの時はCで兼用だったのが分離したものだと思いますが、実際にマイナスになると=1になります。が足して7ビット越えした状態でも=1になっていますがそういうものなのでしょうか?

Aベストアンサー

2の補数表現では、演算結果の最上位ビットが0なら正(0含む)、1なら負なので、フラグNはそれに準じます。

で、8bitでの2の補数表現なら、0から127(0x7f)までが正で、それに1足すと0x80となり、これは最上位がたって、正から負にあふれてしまったので、フラグOVがセットされます。

――って話ではないかと。

Q255の2の補数、B'00000001'が-255を表さない理由は

こんにちは。
8ビットマイコンで、
127=B'01111111'の2の補数
B'10000001'は-127を
表します。
しかし、8ビットマイコンで、
マイナスを扱うのは、-127~127で
先頭一桁は正負を表すので
使えない、と説明されています。
しかし、
255=B'11111111'の2の補数を、
B'00000001'を-255としても、
問題ないのでは、ないでしょうか。
両者を足せば、0になります。
先頭ビットを使ってはいけない理由は、
何でしょうか。
(127までなら、マイナスは先頭
ビットが、0になる。分類に便利、
というなら、分かりますが)。
何か分かる人がいましたら、
よろしくお願いします。

Aベストアンサー

 
00000001を-255とするなら「1」はどの様に表現する?

 


このカテゴリの人気Q&Aランキング

おすすめ情報