• 締切済み

電気回路とソフトウェアの連携

画像の回路で以下のプログラムを実施するとLEDはどのように点灯しますか? 00H MOV C, #00H ;「c」の状態の初期化 01H MOV B, #00H ;「B」カウント値のリセット 02H OUT B ;出力ポートの状態を変更 03H IN A ;入力ポートの状態を取得 04H MOV D, A ;入力ポートの状態をDに退避 05H AND A, #02H ;2ビット目の情報を取得 06H JNZ L00H ;リセットボタンが押されている場合,0行目にジャンプ 07H MOV A, D ;入力ポートの状態をAにロード 08H AND A, #01H ;1ビット目の情報を取得 09H JNZ L0CH ;カウントボタンが押されている場合,C行目にジャンプ 0AH MOV C, #00H ;「C」の状態を0に設定 0BH JMP L02H ;2行目にジャンプ 0CH MOV A, C ;「C」の状態をAにロード 0DH CMP A, #00H ;「A」の状態は0か 0EH JNZ L02H ;ボタンが押されたままなので,2行目にジャンプ 0FH INC B ;Bの値を1カウントアップ 10H MOV C, #01H ;「C」の状態を1に設定 11H JMP L02H ;2行目にジャンプ

この投稿のマルチメディアは削除されているためご覧いただけません。

みんなの回答

  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.1

>画像の回路で以下のプログラムを実施するとLEDはどのように点灯しますか? 途中の遷移状態を聞いてます? それとも最終状態? そもそも 内部レジスタと 入力ピン、出力ピンとの対応関係が不明のなので、 回答不可だと思います。

wakatyu1
質問者

補足

500in1を用いた場合です

関連するQ&A

  • 電気回路とソフトウェアの連携

    電気回路とソフトウェアの連携 以下のプログラムのフローチャートどういう風に書けばいいですか? 00H MOV C, #00H ;「c」の状態の初期化 01H MOV B, #00H ;「B」カウント値のリセット 02H OUT B ;出力ポートの状態を変更 03H IN A ;入力ポートの状態を取得 04H MOV D, A ;入力ポートの状態をDに退避 05H AND A, #02H ;2ビット目の情報を取得 06H JNZ L00H ;リセットボタンが押されている場合,0行目にジャンプ 07H MOV A, D ;入力ポートの状態をAにロード 08H AND A, #01H ;1ビット目の情報を取得 09H JNZ L0CH ;カウントボタンが押されている場合,C行目にジャンプ 0AH MOV C, #00H ;「C」の状態を0に設定 0BH JMP L02H ;2行目にジャンプ 0CH MOV A, C ;「C」の状態をAにロード 0DH CMP A, #00H ;「A」の状態は0か 0EH JNZ L02H ;ボタンが押されたままなので,2行目にジャンプ 0FH INC B ;Bの値を1カウントアップ 10H MOV C, ;「C」の状態を1に設定 11H JMP L02H ;2行目にジャンプ

  • H8マイコン アセンブラ言語の乱数ルーチンについて

    H8マイコンでアセンブラ言語を使用しております。 アセンブラ言語で、ランダムに分岐するようにしたいのですが、乱数ルーチンをどのように作ればよいかわかりません。 下記は現在のメインプログラムです。ポート4の4の状態を調べ、真ならHYOJIに分岐するようにし、真でないならSTARTに戻るという風にしています。 START: MOV.B @P4DR,R0L MOV.B R0L,@SW_D MOV.B @SW_D,R0H BTST #4,R0H BEQ HYOJI JMP @START 5行目のBEQから乱数ルーチンにひとまず飛んで、そこからさらにランダムに選ばれた分岐に飛ぶというようにしたいです。 乱数ルーチンは現在時刻などから値を取得し、それからランダムな値を作ったりするのでしょうか? どなたかご協力お願いいたします。 ちなみに、下記は自分が参考にしている本です。 H8マイコン入門 堀桂太郎著 東京電機大学出版局発行

  • アセンブラできません。

    初心者です。 アセンブリ言語で1~9の数字を連続的に表示するプログラムを書いたのですが、アセンブラする時 「error A2016 expression expected」というエラーメッセージが出てアセンブラすることができません。 プログラムの内容は下記↓のものです。 何が原因でしょうか? CODE SEGMENT ASSUME DS:CODE,CS:CODE,ES:CODE,SS:CODE ORG 100h START: mov bl,30h jmp aa aa: mov ah,02h mov dl,bl int 21h mov ah,06h mov dl,0ffh int 21h jnz bb: mov ah,02h mov dl,08h int 21h inc bl cmp bl,39h ja START jmp aa bb: int 20h CODE ENDS END START

  • 秀丸での置換方法

    アセンブラプログラムのデバッグをすることになり、LISTというファイルをもらいました。この中に書かれているアセンブラプログラムをGNUsim8085というシミュレーターでデバッグしていきたいと考えています。 もらったLISTファイルにはアセンブラプログラムが下記のように書いてありました。これをそのままGNUsim8085に貼り付けてもエラーが出ます。 たぶん、行ごとに割り当てられたアドレス情報などがあるので、それを削除してあげればよいと思っています。それで”C”と書かれた左側のテキストは削除するということを秀丸の置換でやるにはどうすれば、どうすればよいかご教授頂きますよう、お願い致します。 (LISTファイル内のアセンブラプログラム) 11273 373B' 3A 0004' C LDA ETYPE 11274 373E' 0F C RRC 11275 373F' DA 38AC' C JC XMAKTP ;リバース型の時,ジャンプ 11276 C h_typchk: 11277 C ; 11278 3742' 21 0A0A C LXI H,0A0AH 11279 3745' 22 F097" C SHLD RCVWRK 11280 3748' 21 F09C" C LXI H,RCVBFR 11281 374B' 22 F095" C SHLD RCVIDX 11282 374E' 21 F073" C LXI H,INTREG 11283 3751' 7E C MOV A,M 11284 3752' E6 F0 C ANI 0F0H 11285 3754' F6 02 C ORI 2 11286 3756' 77 C MOV M,A 11287 3757' 2B C DCX H 11288 3758' 2B C DCX H 11289 3759' 7E C MOV A,M 11290 375A' F6 04 C ORI 4 ;リバース型 判定フラグ セット(RVFLAG) 11291 375C' 77 C MOV M,A 11292 375D' C3 036E' C JMP WFRST

  • 大学で習う電気回路の問題です。

    次の(a)、(b)、(c)について、各回路素子が直列に接続された場合と、並列接続された場合のインピーダンスとアドミタンスの大きさおよび位相角を求めよ。 ただし、周波数は50[Hz]とする。 (a) R=50[Ω]、L=0.1[H] (b) R=100[Ω ]、C=10[μF] (c) R=4[Ω]、L=15.9[mH]、C=1590[μF] お手数ですが、宜しくお願い致します。

  • 電気回路について

    ┏ーーーLーーー┳ーーー○A I I I I E C I I I I ┗ ーーーーーー┻ーーー○B 上記のような回路があります。 端子AおよびBを短絡した場合に回路に流れる電流を求めよ、ただしLはインダクタンス、Cはキャパシタンス、Eは電源の起電力、角周波数をωとする問題なのですが、解き方が分かりません… どなたか教えていただけませんか? スペースの問題でCの線がずれてしまいました(>_<)すみません。

  • 8085系プログラミングについて

    私は、現在情報工学科の学生です。現在学校で8085系プログラムの授業を受講しているのですが、私が作成したプログラムで、axbの部分でどうして[01x00]が動かないのかがわかりません。ちなみに[00x01]は動きました。また、他の数字でaxb(02x03等)を試してみましたが動きました。 もしよければアセンブリ言語での8085系のプログラミングでこの質問に対する回答と解説のご教授お願いします。 問題:データa,bをキーボードから入力すると計算結果が表示素子に表示されるようにしなさい。a,bを入力後、両方を同時にいったん素子に表示して、[STEP]キーで積を表示すること。 ・私が考えたプログラミング・ .8085 ASEG DISP EQU 0040H DHEX1 EQU 0043H DHEX2 EQU 0046H KEYIN EQU 004FH ORG 8000H CALL INITIALIZATION L1: CALL KEYIN JNC L1 CPI 14H JZ L1 MVI C,4 CALL DHEX1 CALL DISP RLC RLC RLC RLC MOV D,A L2: CALL KEYIN JNC L2 ORA D MVI C,5 CALL DHEX2 CALL DISP STA 9000H STA aa LDA dd STA 0FF4DH ; L3: CALL KEYIN JNC L3 CPI 14H JZ L3 MVI C,2 CALL DHEX1 CALL DISP RLC RLC RLC RLC MOV D,A L4: CALL KEYIN JNC L4 ORA D MVI C,3 CALL DHEX2 CALL DISP STA 9001H STA bb ; ANS: CALL KEYIN JNC ANS CPI 15H JNZ ANS ; LDA aa MOV E,A LDA bb MOV C,A ; LOOP: DAD D DCR C JNZ LOOP SHLD 9002H MVI C,3 MOV A,L CALL DHEX2 CALL DISP MVI C,5 MOV A,H CALL DHEX2 CALL DISP ; LIGHT_OFF: CALL KEYIN JNC LIGHT_OFF CPI 17H CALL CLEAN JNZ LIGHT_OFF HLT ; CLEAN: LDA dd STA 0FF4DH STA 0FF4EH STA 0FF4FH STA 0FF50H STA 0FF51H STA 0FF52H STA 0FF53H CALL 0040H RET ; INITIALIZATION: LDA dd LXI B,00H LXI D,00H LXI H,00H STA 9000H STA 9001H STA 9002H RET ; aa: DB 00H bb: DB 00H dd: DB 00H ; END 私は自分で考え、もし9001番地などが0ならば、強制的に0を4桁出すプログラムを考えました。しかしどこでそれを入れれば良いのかがわかりません。ヒントだけでもいいので教えてください。

  • 割り込みなしのタイマー

    以下のような割り込みを用いないタイマーを使うプログラムをH8マイコンで動かしたいのですが、上手くいきません・・・。表示を1秒間隔で切り替えていくものです。どこがよくないのでしょうか? MOV.L #FFFFD1,ER0      //PADDR MOV.B #FF,R1L //FF=11111111 MOV.B R1L,@ER0 //PADDR = FF MOV.L #FFFFD4,ER0      //PBDDR MOV.B #FF,R1L //FF=11111111 MOV.B R1L,@ER0 //PBDDR = FF MOV.L #FFFFD6,ER0      //PBDR MOV.B #5B,R1L //5B = "2" MOV.B R1L,@ER0 //PBDR = 5B MOV.L #FFFFD3,ER0      //PADR MOV.B #01,R1L //01 = 0KETA MOV.B R1L,@ER0 //PADR = 0KETA **128 MOV.L #FFFF64,ER2 //TCR0 MOV.B #83,R1H //83 = 1/8 MOV.B R1H,@ER2 //TCR0 = 1/8 MOV.L #FFFF6A,ER3      //GRA0 MOV.W #61A8,E1 //61A8 = 25000 MOV.W E1,@ER3 //GRA0 = 25000 MOV.W #3E8,E4 //3E8 = 1000 MOV.W #0,R4 // 0 MOV.B #F9,R5L // F9 MOV.L #FFFF67,ER0      //TSR0 MOV.L #FFFF60,ER6      //TSTR MOV.B #1,R5H MOV.B R5H,@ER6 //TSTR = 1 *158 MOV.B @ER0,R5H //TSR0の値 CMP.B R5L,R5H BNE FFF* MOV.B #F8,R5H //初期値に戻す MOV.B R5H,@ER0 INC.W #1,R4 CMP.W R4,E4 BNE FFF* MOV.B #0,R5H //ストップ MOV.B R5H,@ER6 MOV.L #FFFFD3,ER0      //PADR ADD.B R1L,R1L //表示桁の更新 MOV.B R1L,@ER0 BRA FFF**

  • 1~10まで足すプログラム

    H8のマイコンを使い始めた初心者です。 1~10まで足すプログラムを作りたいのですが、自分なりに以下のように組んでみました。合っているか分からないので、詳しい方いたら教えていただきです。 (アドレスは適当です。) FFF100 > MOV.L #200100,ER1 FFF106 > MOV.B #00,R0L FFF108 > MOV.B #0A,ROH FFF10A > INC.B #1,R0L FFF10C > CMP.B R0L,ROH FFF10E > BNE FFF10A FFF112 > MOV.B R0L,ER1

  • タイマーを用いたプログラム

    H8のマイコンを用いて、7セグメントLEDを 1秒間隔で表示を切り替えるプログラムを作りたい のですが、いまいち上手くいきません。。。 タイマー割り込みは用いずに行いたいのですが、以下のプログラムでどこが間違っているのでしょうか?? MOV.L #FFFFD1,ER0 //PADDR MOV.L #FFFFD4,ER1 //PBDDR MOV.B #FF,R2L //FF=11111111 MOV.B R2L,@ER0 //PADDR = FF MOV.B R2L,@ER1 //PBDDR = FF MOV.L #FFFFD6,ER0 //PBDR MOV.L #FFFFD3,ER1 //PADR MOV.B #5B,R2L //5B = "2" MOV.B R2L,@ER0 //PBDR = 5B MOV.B #01,R2L //01 = 0KETA MOV.B R2L,@ER1 //PADR = 0KETA *** MOV.L #FFFF64,ER3 //TCR0 MOV.B #83,R2H //83 = 1/8 MOV.B R2H,@ER3 //TCR0 = 1/8 MOV.L #FFFF6A,ER3 //GRA0 MOV.L #61A8,ER4 //61A8 = 25000 MOV.L ER4,@ER3 //GRA0 = 25000 MOV.W #3E8,E3 //3E8 = 1000 MOV.W #0,R3 // 0 MOV.B #F9,R4L // F9 MOV.L #FFFF67,ER5 //TSR0 MOV.L #FFFF60,ER3 //TSTR MOV.B #1,R2H //TSTR = 1 ** MOV.B @ER5,R4H //TSR0の値 CMP.B R4L,R4H //比較 BNE FFF** //ループ MOB.B #F8,R4H //初期値に戻す MOV.B R4H,@ER5 // INC.W #1,R3 //ループ数 CMP.W R3,E3 //比較 BNE FFF** //ループ MOV.B #0,R2H //タイマーのストップ MOV.B R2H,@ER3 // ADD.B R2L,R2L //表示桁の更新 MOV.B R2L,@ER1 // BRA FFF***