Z80の割り込み制御設定のときに、割り込みマスクの設定を行わない場合、リセット後に割り込みベクトルを設定しなかった場合に、どのような振る舞いをするか教えてください。

よろしくお願いします。

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

A 回答 (2件)

Z80の割り込みモードは3種類あって、(モード0~モード2)リセット後のモードの設定をするかどうかによって変わります。

(設定しなければリセット後はモード0だったような気がします。)
それぞれのモードの内容もうる覚えですが、8080互換モードと、Z80簡易モードとZ80周辺機器から専用の割り込みモードだったと思います。
リセット直後は、確かZ80簡易モードだったと思いますので、マスク不可割り込み(NMI)は0066H番地、マスクか割り込み(INT)は0038H番地へのサブルーチンコールだったと思います。(RETはRETIで戻ってくださいね)
すべてうる覚えで申し訳ありませんが、この辺を参考に、資料を探してみてください。
    • good
    • 0

お使いのZ80のチップは何でしょうか?(Z84C015とか)


もしくは、割り込みを発生する要因となるものは何ですか?(SIOとかPIOとか)

Z80 CPU単体には割り込みマスクというと、DI、EI命令くらいしかありません。

割り込みベクトルとおっしゃっているのは、Iレジスタと組み合わせる下位のベクタですかね?

もう少し情報がないと回答に困ります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

QAVRマイコンの割り込みについて

AVRマイコンの割り込みについて

初心者です。
・AVRマイコンの割り込みの優先順位ですが、割込みベクターのアドレスが小さい順に優先度が高いでよろしいでしょうか?
・優先低の割り込みルーチンを処理している時に、優先高の割り込みが入った場合、
 (1)優先低の割り込みルーチン処理中断→優先高の割り込みルーチンの処理、完了→優先低の割り込みルーチン処理再開(中断ヶ所から)
 (2)優先低の割り込みルーチン処理、完了→優先高の割り込みルーチンの処理、完了
 (3)その他
(1)、(2)、(3)のどの処理が行われますか?
・優先高の割り込みルーチンを処理している時に、優先高の割り込みを禁止し、ルーチン内で優先低の割り込みが入った場合、優先高の割り込みルーチンから優先低の割り込みルーチンにとばすことは可能でしょうか?

以上、よろしくお願い致します。

Aベストアンサー

AVRは使用経験がないのでマイコン一般的な回答ですが、
・優先度は割り込みごとに設定できるものが多いです。同優先度の割り込みが複数入った場合にどうなるかはハンドラ次第です。

・多重割り込みをサポートしていない、あるいは有効にしていない場合は(2)です。多重割り込みが有効の場合は(1)ですね。

・多重割り込みで可能なのはより高優先の割り込みのみです。ISR実行中にその割り込みを禁止したとしても、ISR自体が終了する訳ではない上に優先度は有効のままですから、ISR中に低優先度割り込みが入ることはできません。

Qz80について

マイコンz80を使って、17H+09Hを16進加算とDAAを用いて10進加算を
行うプログラムをつくったのですが、この場合、
16進加算 20H
10進加算 26

となるのはわかるのですが、同じプログラムで、
「ABH+FFH」をやると
16進加算 AAH
10進加算 10

「EFH-44H」
16進加算 ABH
10進加算 45
となるんですが、この理屈がどうもわかりません。教えてください。

Aベストアンサー

いまさらですが、

加算後の DAA は、

1. 加算結果の下位4ビットが 0AH 以上か、ハーフキャリーが立っていれば 06H を加算する。
2. さらに A0H 以上か、1 の結果でキャリーが立てば、60H を加算する。

ということだから、

ABH + FFH = AAH となり、そのあとに DAA を実行すれば、
下位4ビットが 0AH 以上だから、06H を加算して B0H となり、A0H 以上だから、さらに 60H を加算して 10H となる。

減算後の DAA は、加算の場合の 06H と 60H の加算が減算になるので、

EFH - 44H = ABH となり、そのあとに DAA を実行すれば、
06H を減算して A5H となり、さらに 60H を減算して 45H となる。

もはや BCD の計算にはなっていないので意味の無い値ですが。

Q割り込み処理について

割り込み処理について

初心者です。
AVRマイコンの割り込み処理について質問させて頂きます。
INT0割り込みの割り込みが入ったら、割り込みルーチン中の他の割り込みを許可し、かつINT0の割り込みを禁止したいのですが、下記ソースで問題はありませんか?
INT0割り込みが終了して、メインルーチンに復帰した直後にINT0割り込みを許可したいのですが、下記ソース(1)で問題はありませんか(メインルーチンに復帰した直後に許可したいのですが、方法がわかりません)?

ISR(INT0_vect,ISR_NOBLOCK)
{
    int0割り込み禁止
     ・
     ・
     ・
     ・
   (int0割り込み要求フラグクリア) ・・・・(1)    
   (int0割り込み許可)         ・・・・(1)  
}

よろしくお願い致します。

Aベストアンサー

初心者なら、マイコンのマニュアルを見てプログラムできるようになる練習をすることです。

URLに個別の割込みマスクとretiでの動作等書かれています。

・SREG ($3F) : Status Register
bit7-I : Global Interrupt Enable
すべての割り込みを可能にするにはこのビットを1にする必要があります。割り込みがかかるとクリアされ、割り込みルーチンの終わりでRETI命令がかかると同時に再びセットされます。CEI,SEI命令でクリア,セットできます。

にあるように、基本的にはAVRの割込みモデルは多重割込みでない対応としているようです。
これを
>割り込みルーチン中の他の割り込みを許可し
ということなので、多重割込みの対応をしたいようですが、多重割込みについての問題点等
検討されているでしょうか。たとえば、多重割込みでは何重の多重割込みを想定して、それに必要なスタックサイズは検討されていますか?

されているとして、以下のようになると思います。

ISR(INT0_vect,ISR_NOBLOCK)
{
    int0割り込み禁止
    ・SREG ($3F) : Status Register bit7-I : Global Interrupt Enableを1にする。
     (これで割込み許可になる。もともと他の割込みは許可されているものと考えています。)
     ・
     ・このへんは他の割込みが許可状態。
     ・
     ・
    ・SREG ($3F) : Status Register bit7-I : Global Interrupt Enableを0にする。
   (int0割り込み要求フラグクリア) ・・・・(1) これは不要と思います。(理由)   
   (int0割り込み許可)         ・・・・(1)  
}

理由:
・割り込みフラグは割り込みが起こったときにセットされ、割り込みハンドリング時に自動でクリアされます。割り込みをマスクしていた場合にはフラグは立ったままとなります。

参考URL:http://ww2.tiki.ne.jp/~maro/AVR/programing/index.html

初心者なら、マイコンのマニュアルを見てプログラムできるようになる練習をすることです。

URLに個別の割込みマスクとretiでの動作等書かれています。

・SREG ($3F) : Status Register
bit7-I : Global Interrupt Enable
すべての割り込みを可能にするにはこのビットを1にする必要があります。割り込みがかかるとクリアされ、割り込みルーチンの終わりでRETI命令がかかると同時に再びセットされます。CEI,SEI命令でクリア,セットできます。

にあるように、基本的にはAVRの割込みモデルは多重割込みでない対応と...続きを読む

QZ80プログラムなんですが・・・。

Z80関係のレポートで困っています。

レジスタ退避・復帰の時にEX、EXX命令を使う事が好ましくない
理由を挙げなければならないんです。

全然分かりませんので、詳しい方のお知恵を拝借できませんでしょうか?
どうか宜しくお願いいたしますm(_ _)m

Aベストアンサー

たしか裏レジスタとの切り替え命令だったかな?

であれば、主な理由としてはレジスタの待避がEX、EXXじゃまずいのは、再帰や内部で更に別のルーチンを呼ぶことがある場合、レジスタ内容の保証が出来ないことでしょう。

スタックであればオーバーフローするまで何度でも待避、復帰できますが、裏レジスタとの交換だと一階層しか潜れません。

通常、コンパイルやアセンブルが出来る言語の場合、ソースを分割しての作成が出来るので、設計の段階では機能(関数やルーチン)などは入力と出力しか定義しません(特にチーム開発時とか。一人でやってても3ヶ月前の自分の書いたコードは別の人が書いたコードと思えといった言葉もあります)。
そのような場合、ルーチンコール中で二度以上レジスタ交換してしまうと内容が破壊されてまともにプログラムが動かなくなるからでしょう。

Qシステムの割り込みについて システムの割り込みで調べてもよく分からないのですが遅延など調べましたが、

システムの割り込みについて
システムの割り込みで調べてもよく分からないのですが遅延など調べましたが、主にシステムの割り込みとはどんなのでしょうか?
先程cpuが1%(何もしてない時1〜0%)でしたがシステムの割り込みというはじめて聞いた単語がありましたので質問されていただきました。
システムの割り込みが0〜0.3%になっていて何か動いているのかなと思い数分ほど放置しましたが常に0〜0.3%だったのでシャットダウンしましたが割り込みと書いてましたのでもしかしたらシャットダウンとかしない方が良かったのでしょうか?

Aベストアンサー

ある処理の途中に、その処理以外の事象発生により、処理を中断(これが割り込みです)して別のことを行う様なことを言います。
例えば、円周率πの計算プロセスが稼働中はほぼCPU100%で動作しますが、この計算中にDVDメディアが装填されて自動再生が動き出すケースです。これは円周率πの計算中にDVDデバイスからシステムに割り込みが入り、システムが計算を一旦中断して自動再生プログラムを起動(CPUをこの処理に回す)したらかなる状態なのです。
割り込み要件には、上記のデバイスの割り込みの他にタイマーの割り込み(特定の時間が経過したらある処理を実行する等)や他のプロセスが終了したことによる割り込み等多種多様なものがあります。

QZ80,PIC,H8について

ハード、ソフトの勉強がしたくてマイコンを作ろうと考えているのですがタイトルの3つのうちのどれにしようか悩んでいます。
自分としてはZ80を作りたいと思っていたですが秋月にあるAKI-80のゴールドキット以外にも必要ということでどうしようか悩んでいます。
(今月中に出せるお金が5千~1万のため。)
やることによってかかるお金は違うと思いますが目安として
それぞれ大体どのぐらいの投資が必要ですか?
それとテスターはすぐに買う必要があるのでしょうか?

Aベストアンサー

PICはデバッグが面倒なのと、以外にお金がかかるのが弱点ですかね。
AKI-80(Z80)は何も付いていないので外付けの表示装置やらSWやらを自分で汎用基板で自作しなくてはなりませんので難易度が高いです。
H8でしたらZ80と比べて遜色ないCPUですしネット上の情報や書籍も多い。そして秋月のメイン商品ですからバリエーションも豊富です。

で、私としてはH8をお勧めしたいですね。特にこのキット。
http://akizukidenshi.com/catalog/g/gK-00168/
このキットのポイントはROMが百回程度しか書き換えできないので、デバッグ時にプログラムをROM変わりに豊富なRAMに置ける(最重要)のと、全て付いて5700円で買えること。SWやらLEDやらLCDなど初心者が実験に使うのは十分な入出力が揃っている事です。LANも付いてて勉強が進めばLANも使えるようになります。
あとマイコンの開発にはパソコン側にCOM(RS232C)端子が必要です。確認してから購入してください。ない場合は補足してください。

>それとテスターはすぐに買う必要があるのでしょうか?
キット組み立て時に導通試験用にほしいですね。秋月で同時購入されてはどうでしょうか?
http://akizukidenshi.com/catalog/g/gM-00137/
日本語説明書つきの一番安いやつです。

PICはデバッグが面倒なのと、以外にお金がかかるのが弱点ですかね。
AKI-80(Z80)は何も付いていないので外付けの表示装置やらSWやらを自分で汎用基板で自作しなくてはなりませんので難易度が高いです。
H8でしたらZ80と比べて遜色ないCPUですしネット上の情報や書籍も多い。そして秋月のメイン商品ですからバリエーションも豊富です。

で、私としてはH8をお勧めしたいですね。特にこのキット。
http://akizukidenshi.com/catalog/g/gK-00168/
このキットのポイントはROMが百回程度しか書...続きを読む

Qpicタイマ0割り込みについて

タイマ0割り込みについて教えて下さい。
解説書などに、割り込みルーチンの最初の部分で

(1)割り込みフラグ(TMR0IF)を消す
(2)TMR0を再設定する

と書かれていますが、なぜ(2)を割り込みルーチンの最初で行うのでしょう?
これでは、
・1秒ごとに割り込みを発生させたい
・割り込みルーチンの作業時間は0.5秒
だとすると、結果的に割り込み発生は0.5秒ごとになってしまいます。

TMR0再設定は割り込みを抜ける時(retfie の直前)に行えば、ほぼ希望通りの間隔で、割り込みを発生させられると思うのですが、それはルール違反なのでしょうか?

Aベストアンサー

N0.2です。
普通の処理だったら問題無いのですが、
たとえば、割り込みが発生してもすぐに
割り込みルーチンに入れない様な場合、
気を付けないと次の割り込みが発生してしまいます。
で、マニュアルでは割り込み原因となる
TMR0を再設定するように指示をしているのですが、
たしかに割り込み後に一定時間間隔でまた割り込みたい
場合には、抜ける前にまた再設定するしかありません。

ただ、通常の場合、一定時間の割り込みというのは
割り込みそのものを一定時間毎に発生させたい筈
なんです。
たとえば、割り込みは10mSおき、処理は1mSだとすると
スタート(0mS)から数えて
10mS 割り込み発生 TMR0再設定
11mS 割り込み処理終了
20mS 割り込み発生 TMR0再設定
21mS 割り込み処理終了
30mS 割り込み発生 TMR0再設定
と言うぐらいに、きれいに
10mSおきに割り込みが発生します。
しかも、割り込み処理が長くなっても短くなっても
間隔は変わりません。

QZ-80に詳しい方教えて下さい。

今Z-80のレポートでかなり困っています。Z-80の事は全く分からないので、ぜひ教えて下さい。PC9801RAを用いたZ80マイコンによるI/Oボードの制御及び計測。
 CWR EQU 0D3h
PB EQU 0D1h
start EQU 8000h
こんな感じの言語を使ったもので、問題が

(1)SW1を押すとLEDが左にシフトをつずけ、もう一度押すとSTOPするプログラム

(2)ステッピングモータを2相励磁で回転させる

(3)温度センサーから得られる信号をAD変換して、その内容をLEDに表示する

Aベストアンサー

質問の言語はどうもアセンブラの様ですね。
ただし、記述の部分は言語自身ではなく、マクロ命令の部分の様ですので、ハッキリは分かりません。

LD B,C

などがあれば、ザイログ表記のアセンブラ言語

MOV B,C

などがあれば、インテル表記のアセンブラになります。

アセンブラは、ハードウェアとの関連が強く、御質問の内容だけだと答えることができません。とくに御質問の内容は制御関係なので特にハードウェアとの関連が強いですね。
例えば、(1)だと、SW1のポートアドレス、押した時が1なのか0なのか、LEDのポートアドレスとLEDがいくつついていて、どのようなデータを出力すれば点灯、消去できるか・・・などなど

(2)、(3)も同じですね。
回路図があれば分かりやすいのですが、ここでは難しいですね

ちなみに、「トラスペ」とは、「トランジスタ技術スペシャル」という、雑誌の別冊です。

QマイコンSH-2の割り込みを用いたシリアル通信

SH7144Fで割り込みを用いたシリアル通信を行っていますが,
途中で割り込みがかからなくなる症状に悩んでいます.

開発環境はHEW上でツールチェインにRenesas SuparH StandardとKPIT GNUSH [ELF]を
組み込んでおり,適宜選んで使っています.
以下,Renesas SuparH Standardで,受信割り込みの場合に限って書かせて頂きます.

少々長くなりますが状況をご説明致します.

最初にSCI1回りの設定を適切に行い,割り込みレベルを15とした後,
set_imask(0)で割り込みレベルを0として割り込みがかかるようにしています.
受信割り込みがかかるとINT_SCI1_RXI1に飛び,
_UBYTE c = SCI1.RDR;
SCI1.SSR.BIT.RDRF = 0;
と直ちにした後,cの内容をバッファに入れ,戻っていますが,一文字受信しただけで
割り込みがかからなくなります.(_UBYTEはtypedefine.hでunsigned charとしています.)

相当悩んだ挙句,INT_SCI1_RXI1の末尾に,
set_imask(0);
を入れてやると連続して割り込みがかかり,うまく受信できるようになっています.

ハードウェアマニュアルを読めば,割り込みがかかるとSRレジスタは退避され,
SCI1の割り込みレベル15の内容がSRレジスタのI0~I3に書き込まれる,とあります.
当然,割り込みが終われば,退避された内容がSRレジスタに戻るので割り込みマスクは
0に戻るもの・・・と解釈していますが,余りにも当たり前なのかハードウェアマニュアルには
明記はされていません.もしかしたら元に戻っていないのでは・・・と,上記のようにいちいちに
割り込みマスクを0にする手続きを追記すると動いている,と言う状況です.

因みに上記の状況はKPIT GNUSH [ELF]を選んだときにも同じです.
更には,送信割り込みのときも上記と同じくset_imask(0)を入れてやると動きます.

そこで質問ですが,
1.SRレジスタは割り込みが終われば元の内容に戻ると解釈していますが,
  これで合っているでしょうか.
2.上記1で元に戻るのだとしたら,なぜいちいちset_imask(0)をしてやらないといけない
  状況になっているのか・・・考えられる原因をお教えください.

雑多な説明で申し訳ございませんが,どうぞ宜しくお願い致します.<(__)>

SH7144Fで割り込みを用いたシリアル通信を行っていますが,
途中で割り込みがかからなくなる症状に悩んでいます.

開発環境はHEW上でツールチェインにRenesas SuparH StandardとKPIT GNUSH [ELF]を
組み込んでおり,適宜選んで使っています.
以下,Renesas SuparH Standardで,受信割り込みの場合に限って書かせて頂きます.

少々長くなりますが状況をご説明致します.

最初にSCI1回りの設定を適切に行い,割り込みレベルを15とした後,
set_imask(0)で割り込みレベルを0として割り込みがかかるようにしてい...続きを読む

Aベストアンサー

ハードウエアマニュアルをよく読めば書いてあるのですが、SHのSSR.RDRFビットをクリアするのは、一度1を読み込んでから0を書く必要があります。
質問文からは、1を読む作業が抜けているように思われます。

set_imask()は、関数呼び出しではなく、インライン展開されるようですが、展開されたものを読んでみても、結果的にLDC命令を使ってSRのIMASK部を書き換えるだけの処理です。
ですから、set_imask(0)を実行した時点で、再びsci割り込みがかかると思いますが、それは新たな受信データを得た訳ではないので、読み出したデータは以前と同じになっているのではないでしょうか。

一方、割り込みからの復帰に使用するRTE命令は、セーブされたSRとPCの値をレジスタに戻すものです。
アセンブラで書いていると、間違ってRTSで戻してしまうことがありますが、この場合はSRの内容うんぬんという以前に、PCの値が変になって暴走するので、すぐにわかります。
Cで書いていればそのような間違いは起きないので、SRの復帰について心配する必要はありません。

ただ、LDCでSRのIMASK部を変えるのと、RTEで変えることに違いが生じているようですが、これは内部割込みのエッジ検出フラグのリセット回路の働きに、なにか違いがあるのかも知れません。

ハードウエアマニュアルをよく読めば書いてあるのですが、SHのSSR.RDRFビットをクリアするのは、一度1を読み込んでから0を書く必要があります。
質問文からは、1を読む作業が抜けているように思われます。

set_imask()は、関数呼び出しではなく、インライン展開されるようですが、展開されたものを読んでみても、結果的にLDC命令を使ってSRのIMASK部を書き換えるだけの処理です。
ですから、set_imask(0)を実行した時点で、再びsci割り込みがかかると思いますが、それは新たな受信データを得た訳ではないので...続きを読む

QZ80のアセンブリをアセンブルしたいのですが。。。

Z80のアセンブリをアセンブルしたいのですが。。。

いつもお世話になっております。
小生、只今、WindowsXPSP3上でZ-Vision6.42付録版を用いて、Z80のアセンブリを勉強しています。

今回質問させて頂きたいのは、下記に記述させて頂くコードがZ-Visionではアセンブルできません。

-----ソース-----
OBJ$0100,$01FF
FRE$1000,$1FFF

CALLTEST
END

TEST:
LDHL,1000
LDA,$FF
LDB,32
L_TEST
LD(HL),A
INCHL
DECB
JPNZ,L_TEST
RET
----------

上記に記述させて頂いたコードをアセンブルすると、以下の様なエラーが出ます

-----エラー内容-----
- Can not open message file.
-Pass-1
-Pass-2
-Pass-3
C:\PROGRAM FILES\ZVW6\Z80PROGRAM\TEST.ASM 1 :Asm Error: 4013
C:\PROGRAM FILES\ZVW6\Z80PROGRAM\TEST.ASM 2 :Asm Error: 4013
C:\PROGRAM FILES\ZVW6\Z80PROGRAM\TEST.ASM 9 :Asm Error: 4011
C:\PROGRAM FILES\ZVW6\Z80PROGRAM\TEST.ASM 11 :Asm Error: 4013
C:\PROGRAM FILES\ZVW6\Z80PROGRAM\TEST.ASM 15 :Asm Error: 4011
-Warnings : 0-
-Errors : 5-
----------

そこで、大変申し訳ないのですが、このコードをアセンブルできるフリーソフトなどご教示頂ければ、幸いです。

お忙しい中、大変申し訳ございませんが、以上、先輩方ご教示宜しくお願い致します。

Z80のアセンブリをアセンブルしたいのですが。。。

いつもお世話になっております。
小生、只今、WindowsXPSP3上でZ-Vision6.42付録版を用いて、Z80のアセンブリを勉強しています。

今回質問させて頂きたいのは、下記に記述させて頂くコードがZ-Visionではアセンブルできません。

-----ソース-----
OBJ$0100,$01FF
FRE$1000,$1FFF

CALLTEST
END

TEST:
LDHL,1000
LDA,$FF
LDB,32
L_TEST
LD(HL),A
INCHL
DECB
JPNZ,L_TEST
RET
----------

上記に記述させて頂いたコードをアセンブルすると、以下の様なエラーが...続きを読む

Aベストアンサー

Z80は昔いじってました。


まずは、エラー番号をマニュアルで調べましょう。

アセンブラによって、多少の方言があるので、正しく書いたつもりで間違っている場合もあります。


その製品はもってないで間違った指摘があるかもしれませんが

>OBJ$0100,$01FF
>FRE$1000,$1FFF

こういう疑似命令はそれこそアセンブラ毎に違います。正しい書式かどうか確認してください。
あと、命令と引数が続けて書かれていますが、この表示だけの問題でしょうか?

1,2,9 行めに共通するのは$~という表現です。おそらく16進数だと思いますが、そのアセンブラでの表記方法はそれであってますか?
~hとするとか、0x~とするとか、これも方言があります。

11行目は L_TEST という命令やマクロが無いためのエラーだと思われます。
おそらく L_TEST: とラベルにするべきところでしょう。
アンダーバーがラベルとして使えるかも確認しましょう。


人気Q&Aランキング

おすすめ情報