• ベストアンサー

Z-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に表示する

質問者が選んだベストアンサー

  • ベストアンサー
  • msystem
  • ベストアンサー率42% (79/186)
回答No.3

質問の言語はどうもアセンブラの様ですね。 ただし、記述の部分は言語自身ではなく、マクロ命令の部分の様ですので、ハッキリは分かりません。 LD B,C などがあれば、ザイログ表記のアセンブラ言語 MOV B,C などがあれば、インテル表記のアセンブラになります。 アセンブラは、ハードウェアとの関連が強く、御質問の内容だけだと答えることができません。とくに御質問の内容は制御関係なので特にハードウェアとの関連が強いですね。 例えば、(1)だと、SW1のポートアドレス、押した時が1なのか0なのか、LEDのポートアドレスとLEDがいくつついていて、どのようなデータを出力すれば点灯、消去できるか・・・などなど (2)、(3)も同じですね。 回路図があれば分かりやすいのですが、ここでは難しいですね ちなみに、「トラスペ」とは、「トランジスタ技術スペシャル」という、雑誌の別冊です。

kenta999
質問者

お礼

回答ありがとうございました。質問の内容が少しすくなかったみたいで。 トラスぺの意味もわからなっかったので、丁寧にありがとうございます。

その他の回答 (2)

  • hamuzo
  • ベストアンサー率48% (88/180)
回答No.2

ANo.#1に補足、トラスペのリストです。 もうちょっと勉強してまずはなにがわからないか 質問の内容を具体的にしてください。

参考URL:
http://www.cqpub.co.jp/trs/
kenta999
質問者

お礼

どうもありがとうございました。トラスぺ見て勉強します。ありがとうございます。

  • akino4
  • ベストアンサー率18% (35/185)
回答No.1

98はホストマシンであってターゲットマシンのプログラムには関係ないっすよ あと、Z80マイコンぼーどによるってさぁ~~どうせ8225互換ちっぷか 74でバッファ組んだだけの回路だろうけどさ~~~I/Oアドレスもわからんじゃん とりあえず回路図どっかにあっぷしたら・・・・(--; あと、きっとそれはアセンブラって言語だよ。どこのメーカーのアセンブラか わからんから詳しい言語仕様がわからんけど・・・ アセンブラってメーカーによって細かい仕様がちがうのよね~~ あと、教えてって言われても・・・それのなにが分からないの? アセンブラ言語の使い方とかCPUのアーキテクチャが分からないとか言うレベル なら、授業が悪いです、先生を問い詰めましょう。 (授業にでてないなら論外ですけど(笑) まぁ~Z-80ぐらいならトラスペ読めばいいとおもいますよ多分 トラスペNo41ぐらいじゃなかったけ?

kenta999
質問者

お礼

どうもありがとうございます。トラスぺを買って勉強します。ありがとうございました。

関連するQ&A

  • PCとマイコンとのシリアル通信

    マイコンとパソコンでシリアル通信を考えています。 WEB検索すると「TeraTerm」というソフトにたどり着きました。 通信はバイナリです。(ASCII文字でのやり取りは行いません) 例えば、  マイコンボード上にトグルSWとLEDランプが実装されているとします。  ・PCからトグルSWコマンド「0Ah」をマイコンに送信。  ・マイコンはトグルSWの状態をONなら「00h」をOFFなら「01h」をPCに返信。  ・PCは返信データが「00h」なら、LED点灯コマンド「0Ch」をマイコンに送信。  ・PCは返信データが「01h」なら、LED消灯コマンド「0Dh」をマイコンに送信。 みたいなことを行いたいです。 TeraTermでどのように記述してよいかわからないです。 このへんを教えてくださいよろしくお願いします。

  • PICのEQUでつまづいてしまいました

    PICを習い始めた者です。EQUの理解でつまづいてしまいました。どなたか入門者向けの説明が上手な方、宜しくお願いします。なお、勉強させていただいているページは↓こちらです。 http://www.k3.dion.ne.jp/~digikoma/swf/flpic.html PICの「EQU」と「equ」は、 「大小文字の違いだけで、BULIDしたときは同じ働き」 と理解していたのですが、下記の記述でこんがらかってしまいました。 ;;(ここから引用→ http://www.k3.dion.ne.jp/~digikoma/shoho/shoho11.html#top);; INDF   EQU 0x00 TMR0  EQU 0x01 PCL   EQU 0x02 STATUS EQU 0x03 FSR   EQU 0x04 TRIS_A EQU 0x05 TRIS_B EQU 0x06 TRIS_C EQU 0x07 PORT_A EQU 0x08;PORT_A,4がマイクロ SW4 PORT_B EQU 0x09;7セグメント表示器へ(Hで点灯) PORT_C EQU 0x0A;PORTC_0=LED1を点滅用にする FLG equ PORT_C+1 ;Bit0をSW4の検知状態フラグとして使用する ;↓↓ SW4のON期間の経過値 C_CNT equ FLG+1 ;↓↓ スイッチが押して離した回数 SW_CNT equ C_CNT+1 ;↓↓ LEDタスクへの侵入カウンター LED_RC equ SW_CNT+1 ;↓↓ LEDの点灯(ON)期間のカウンタ LED_ON equ LED_RC+1 ;↓↓ LEDの消灯(OFF)期間のカウンタ LED_OF equ LED_ON+1 ;;(ここまで引用 );; ↑ここでは「INDF」~「LED_OF」のラベルにアドレスを与えているわけですね。(質問1) で、次のところからがわからないんです。 ;;(ここから引用);; CHAT equ 0x07;チャタリング時間(0xFD) JOBCNT equ 0x04;点滅タスク侵入カウンタ(0x00) ON_TIM equ 0x02;LEDの点灯期間(0x25) OF_TIM equ 0x08;LEDの消灯期間(0x60) ;;(ここまで引用 );; ↑ここであたかもラベルのようにみえる「CHAT」~「OF_TIM」にはアドレスが与えられなくてもいいんでしょうか? 小文字の「equ」の後に16進数がありますけど、これはSFRの領域をしてるのではないんでしょうか?(質問2) この後に↓次の記述が来てます・・・ ;;(ここから引用);; ; *** SW4検知の初期化  bcfFLG,0  clrfSW_CNT;スイッチ検知初期化  clrfC_CNT;チャタ検知用のカウンタ初期 ; *** LED点滅の初期化(CPU速度で調整必要)  movlwON_TIM;点灯期間の時間をセット  movwfLED_ON (略) ;;(ここまで引用 );; ↑この部分に相当するところをBULIDの後、逆コンパイラで確認すると、次のようになっています。 0x008  0x018D clrf  SW_CNT 0x009  0x018C clrf  C_CNT 0x00A  0x3002 movlw  0x02 0x00B  0x008F movwf  LED_ON つまり「ON_TIM」に「equ」をつかって「0x02」を代入しているから、 上の「0x00A  0x3002 movlw 0x02」のところでは自動的に16進数「0x02」が入っているのですね。 EQU,equ はアドレスを指定したり、数値を指定したりと、両方が出来るのですか?(質問3) このこんがらかりをナンとか直してください。お願いします!

  • アルディーノのプログラムについて

    アルディーノで現在、スイッチを押すとLEDが点灯し、センサーが、5回反応をするとLEDが消えると言うプログラムを作りました。 このプログラムにセンサーが10秒間一度も反応しなかったら、LEDが消灯すると言うプログラムを追加したいです。ご教授お願いします。 現在のプログラム #define sensor_ON 1 byte sw=2; byte sensor=3; byte led=13; byte val,last_val=!sensor_ON,num; void setup(){ pinMode(sw,INPUT_PULLUP); pinMode(led,OUTPUT); } void loop(){ if(digitalRead(sw)==LOW)digitalWrite(led,HIGH);//スイッチを押したらLED点灯 if(digitalRead(led)==HIGH){//計測状態なら val=digitalRead(sensor); if(val!=sensor_ON && last_val==sensor_ON){//通過(前回検知&今回非検知)なら num++; if(num==5){//5回通過したら digitalWrite(led,LOW);//LEDを消す num=0;//リセット } } last_val=val; } delay(20); }

  • 3048fマイコンでのA/D変換について

    マイコン初心者ですが今3048fマイコンを使ってA/D変換をしようとしているんですが、うまくいかないので教えて頂きたいです。 プログラムは下の通りです。 #include <3048.h> /* メイン関数 *****************************************/ void main(void){ int ad_data; P1.DDR = 0xff; /*port1出力に設定 表示LED */ P4.DDR = 0x00; /*port4入力に設定 操作用sw1~4 */ P4.PCR.BYTE = 0xff; /*port4プルアップon */ AD.ADCSR.BYTE = 0x33; /* SCAN MODE / CH0~3  */ while(AD.ADCSR.BIT.ADF == 0){} /* 4CH分の変換終了を待つ */ while(1){ if(P4.DR.BIT.B4 == 0){ /* sw1の時 */ ad_data = AD.ADDRA>>8; } else if(P4.DR.BIT.B5 == 0){ /* sw2の時 */ ad_data = AD.ADDRB>>8; } else if(P4.DR.BIT.B6 == 0){ /* sw3の時 */ ad_data = AD.ADDRC>>8; } else if(P4.DR.BIT.B7 == 0){ /* sw4の時 */ ad_data = AD.ADDRD>>8; } P1.DR.BYTE = ad_data & 0xFF; /*上位8bit分だけ表示させる */ } } このように4チャンネル分の0~5vのアナログ信号をスキャンモードでA/D変換し、それぞれ対応したスイッチを押すことによって現在どのくらいの電圧が来ているかLEDに2進数で表示させようとしています。しかしsw1とsw2、sw3とsw4がそれぞれ同じ値を表示しています。例えば、sw1を押したらADDRAの値が表示されますが、sw2を押しても同じADDRAの値が表示されます。またsw3とsw4も同じでどちらを押してもADDRCの値が表示されます。 4チャンネル分を同時にA/D変換することは元々出来ないのでしょうか?いろいろ調べてはいますが理由が分かりせん・・・ADDRA=ADDRB、でADDRC=ADDRDなのでしょうか?分かりにくいとは思いますが教えて頂けると幸いです。よろしくお願いいたします。

  • マイコンキットで学ぶ/組み込みシステム入門

    【対象】 日経エレクトロニクス(2007.6.30発行) 16ビット・マイコン搭載ボード付き(組み込み速修キット) エミュレータ一体型 http://techon.nikkeibp.co.jp/embedded/academy/thats1.html http://techon.nikkeibp.co.jp/embedded/academy/guide1.pdf#search='NE... <マイコン> R5F21256SNFP <エミュレータチップ> HD64F2215U(H8Sファミリ/2215グループ) (このマイコンに特殊プログラムをインストールしてエミュレータ機能をもたせているのか?) <パソコンOS> Windows7(32bit版) Sw1(p1_7) Sw2(p1_3) LED1(p2_0) LED2(p2_1) 始めまして。アセンブリの学習を始めた初心者です。 皆さんに質問です。 現在「Sw1を押した時LED1が90%で点灯かつSw2を押した時LED2が80%で点灯する事」を課題として行っています。   私が入力した命令 .INCLUDE sfr_r825.inc .SECTION PROGRAM,CODE .ORG 0009000h Start: MOV.B #01110111b, pd1   p1_7、p1_3を入力ポートに設定 MOV.B #0FFh, pd2     p2_0,p2_1を出力ポートに設定 MOV.B #0FFh, p2      LED1,LED2消灯 Loop: BTST p1_7      Sw1がOnならZフラグに1、OFFなら0 JZ Sw1_On    Zフラグが1ならSw1_Onへ BTST p1_3      Sw2がOnならZフラグに1、OFFなら0 JZ Sw2_On    Zフラグが1ならSw2_Onへ JMP Loop Sw1_On: BCLR p2_0          LED1点灯 JSR Wait_LedOn01     BSET p2_0          LED消灯 JSR Wait_LedOff01 JMP Loop Sw2_On: BCLR p2_1           LED2点灯 JSR Wait_LedOn02 BSET p2_1           LED2消灯 JSR Wait_LedOff02 JMP Loop Wait_LedOn01: MOV.W #198,R0 WaitSub_LedOn01: SBJNZ.W #1,R0,WaitSub_LedOn01 RTS Wait_LedOff01: MOV.W #22,R0 WaitSub_LedOn02: SBJNZ.W #1,R0,WaitSub_LedOn02 RTS Wait_LedOn02: MOV.W #176,R0 WaitSub_LedOn03: SBJNZ.W #1,R0,WaitSub_LedOn03 RTS Wait_LedOff02: MOV.W #44,R0 WaitSub_LedOn04: SBJNZ.W #1,R0,WaitSub_LedOn04 RTS .SECTION FIXVECTOR,ROMDATA .ORG 0FFFCh Reset: .LWORD Start|0FF000000h .END という入力をしました。 しかし、Sw1,Sw2を同時に押した際、LED1のみの点灯となってしまいます。 試行錯誤で今まで行ってきましたが、現在止まってしまっております。 解決策など教えていただければと考えております。 回答の方、宜しくお願いいたします。

  • PICの割り込み機能

    現在電子工作をしており、それにPIC16F84Aを使っています。 正直アセンブリはよくわからないので、C言語でプログラムを作っています。 コンパイラはPICCLITEで、LEDの点灯・消灯に関するプログラムです。 機能としては ・RA0に入力があったときRB0につないであるLEDが消灯しているならLEDを点灯。 ・RA0に入力があったときRB0につないであるLEDが点灯しているならLEDを消灯。 ・RA1に入力があったときLEDが点灯しているなら5秒後にLEDを消灯。 というものを目指しています。 1つ目、2つ目の項目はif文で簡単に実現できましたが、割り込みがうまくいかず、 消えている状態でRA1に入力を入れたときなぜか5秒後に点灯してしまいます。 だからRB0の出力を逆にしてみたんですがうまくいかず・・・。 ハード的には、RB0には反対側から5Vをかけ、 RB0=0の時は点灯 RB0=1の時は消灯 としています。 またセラロックは10MHzのものを使用しています。 現在のプログラムとしては #include "pic.h" #define XTAL_FREQ 10MHZ #define MHZ*1000 void DelayUs(unsigned char cnt){ //時間待ち関数  unsigned char i;  i=(cnt)/(12MHZ/(XTAL_FREQ))|1;  while(--i!=0) continue; } void DelayMs(unsigned int cnt){ //時間待ち関数  unsigned char i;  do{   i=4;   do{    DelayUs(250);   }while(--i);  }while(--cnt); } int cnt,SW; //SWが0なら消灯 //SWが1なら点灯 void interrupt isr(void){ //割り込み関数  if(T0IF==1){   T0IF=0;   cnt--;  }  if(cnt==0){   RB0=1; //消灯   SW=0;   cnt=190;   T0IE=0;   GIE=0;  } } main() {  TRISA=0xFF; //入出力設定  TRISB=0x00;  PORTA=0x00;  PORTB=0x00;  SW=0;  OPTION=0x87; //プリスケーラの設定  TMR0=0x00;  T0IF=0;  T0IE=1;  cnt=190;  while(1){   if(RA0==1){    DelayMs(60); //チャタリング防止    if(RA0==1){     if(SW==0){      RB0=0;      SW=1;     }    else{     RB0=1;     SW=0;    }   }  }  if(RA1==1){   DelayMs(60); //チャタリング防止    if(RA1==1 && SW==1){     TMR0=0;     T0IF=0;     T0IE=1; //割り込み許可     GIE=1; //全体割り込み許可    }   }  } } インターネット上での割り込みのプログラムをいくつか見てみたのですが、 どれもすべて動作を終えて、あとはwhile(1)で割り込みを待つだけ というプログラムばかりでした。 僕のは基本的にRA0の入力によってLEDを点灯・消灯させつつ RA1の入力で割り込みを開始。 5秒後に消えたら割り込みを禁止する。 という仕様にしたいのですが・・・・・・。 1ヶ月ぐらいやってますがうまくいきません。 良ければご回答をお願いします。

  • 圧力センサからの計測値の取り込みについて

    圧力センサからの計測値の取り込みについて質問させて頂きます。 圧力センサからの測定値をアナログ形式でAVRマイコンに取り込みたいと考えているのですが、ハード設計の方は初心者です。 圧力センサ、オペアンプは以下のもの使用を考えています。 ・圧力センサ:http://copal-electronics.info/jp/00182/p2000_ja.pdf ・オペアンプ:http://akizukidenshi.com/download/ds/analog/AD8506.pdf 参考になるサイトをご存じの方、過去に設計経験がある方がいらっしゃいましたら、ご教示下さい。 よろしくお願いい致します。

  • モータ制御を行うCPUの選定について

    現在、以下のようなFA機器の開発を計画しています。 ・3つのモータ制御  (動作させるものは小さいのでステッピングモータの予定) ・入力8点出力8点くらい  (センサ入力および、ソレノイドの制御を想定しています。) ・CANによる上位制御機器との通信接続 ここで以下の質問があります。 (1)CPUは何がよいでしょうか?   (H8/300HおよびH8Sレベルがよいと思っているのですが    まずいでしょうか?できればH8系のマイコンを使用したいと    考えております。また、H8の中でも細かく分かれているので    その中でも何がよいでしょうか?    また、工業用ですので割と市場に出回っていて、安定供給可能な    ものを希望します。) (2)モータについて   モータにもいろいろと種類があってよくわからないのですが、   小さなものを制御しようと思っているのでステッピングモータ   でよいと思うのですが、他によいものはあるのでしょうか?   (小さなものというのは、ビー玉程度のもので、これを    搬送したりする制御を考えています。) (3)モータの制御ソフトについて   今のところステッピングモータの制御を考えているのですが、   この場合、タイマ割り込みでモータにパルスを送るという感じで   よいのでしょうか?   とすると3つのモータを制御する場合、タイマユニットは3つ必要と   なるのでしょうか? ご回答いただくのに情報が足りない場合、補足いたしますので 上記質問に1つでもご回答いただければ幸いです。 よろしくお願いします。

  • モータ制御を行うCPUの選定

    現在、以下のようなFA機器の開発を計画しています。 ・3つのモータ制御  (動作させるものは小さいのでステッピングモータの予定) ・入力8点出力8点くらい  (センサ入力および、ソレノイドの制御を想定しています。) ・CANによる上位制御機器との通信接続 ここで以下の質問があります。 (1)CPUは何がよいでしょうか?   (H8/300HおよびH8Sレベルがよいと思っているのですが    まずいでしょうか?できればH8系のマイコンを使用したいと    考えております。また、H8の中でも細かく分かれているので    その中でも何がよいでしょうか?    また、工業用ですので割と市場に出回っていて、安定供給可能な    ものを希望します。) (2)モータについて   モータにもいろいろと種類があってよくわからないのですが、   小さなものを制御しようと思っているのでステッピングモータ   でよいと思うのですが、他によいものはあるのでしょうか?   (小さなものというのは、ビー玉程度のもので、これを    搬送したりする制御を考えています。) (3)モータの制御ソフトについて   今のところステッピングモータの制御を考えているのですが、   この場合、タイマ割り込みでモータにパルスを送るという感じで   よいのでしょうか?   とすると3つのモータを制御する場合、タイマユニットは3つ必要と   なるのでしょうか? ご回答いただくのに情報が足りない場合、補足いたしますので 上記質問に1つでもご回答いただければ幸いです。 よろしくお願いします。

  • 照度センサー

    下記の照度センサを使用しマイコンのADポートへ入力したいのですが、 http://www.rohm.co.jp/products/databook/sensor/pdf/bh1600fvc-j.pdf 電流出力タイプというやつなんですが、 このセンサーの出力とマイコンとの間に 電流-電圧変換回路とか必要なんでしょうか? 4ページ目の図をそのまま組み、実験してみましたが、 蛍光灯の光と、手でふさいだ時の電圧に変化がありません。 H-Gainモードで、R1,C1の値を色々変えても 電圧の変化は見られません。 なにかヒントでもいただければ幸いです。 よろしくお願いします。