質問: z80cpuを用いてステッピングモータを動かすアセンブラプログラムに解説をお願いします(長いです) スイッチ12でスタート、スイッチ11でストップするようにステッピングモータを回転させるプログラムです。 1つ1つの命令は命令表を見れば何とか分るのですが、プログラムのしくみというか、何をしているかがよく分りません。 (うまく言えなくてごめんなさい) 読みにくくて申し訳ないのですが、自分で理解するには難しいのでわかる方にできるだけ丁寧な解説をつけてほしいです。 よろしくお願いします。 (初期設定) begin: di ld sp,stack main: ld a,0fh out (pioac),a ld a,0cfh out (piobc),a ld a,0f0h out (piobc),a xor a ld (scale1),a ld (step_c),a ld (stbcnt),a ld (total_p),a ld (strobe),a out (piobd),a ld a,83h out (cmdpt),a call ctcset ei readin: ld hl,inbuf ld a,2 ld b,0 ld c,a add hl,bc mainlp: ld a,(hl) bit 5,a jp nz,stop ld a,01h ld (total_p),a stop: ld a,(hl) bit 4,a jp nz,mainlp xor a ld (total_p),a jp mainlp vint0: ei ret vinti: jp int1 vint2: ei reti vint3: ei reti enable: ei reti int1: push hl push de push bc push af call enable ld a,(scale1) inc a ld (scale1),a cp count jp nz,int50 xor a ld (scale1),a int16m: call step_m int50: call in_sw ld a,(stbcnt) inc a ld (stbcnt),a cp 6 jp nz,skip xor a skip: ld (stbcnt),a out (piobd),a rtint1: pop af pop bc pop de pop hl ret in_sw: push hl push de push bc push af ld hl,inbuf ld a,(stbcnt) ld c,a ld b,0 add hl,bc in a,(piobd) ld (hl),a pop af pop bc pop de pop hl ret ctcset: im 2 ld hl,vect0 ld a,h ld i,a ld a,l out (ctcadr),a ld hl,ctctbl ld b,4 ld c,ctcadr ctcst1: ld a,(hl) inc hl out (c),a ld a,(hl) inc hl out (c),a inc c djnz ctcst1 ret step_m: push hl push de push bc push af ld a,(total_p) bit 0,a jp z,jppop ld a,(step_c) inc a and mask ld (step_c),a ld e,a ld d,0 ld hl,phase add hl,de ld a,(hl) out (portc),a jppop: pop af pop bc pop de pop hl ret org 8100h (以下データ) end 何か質問等があれば補足します。
回答: 勉強ですか。しかし、このプログラムは結構難易度高いですよ。 理解しておく技術は次のものがあります。 ・割り込み ・タイマlsi(z80ctc) ・パラレル入出力lsi(z80pio) 簡単ですが、下記ページにめとめて解説があります。 http://www.apony.com/elec/elec10/elec10.html#chap8_7 ・パラレル入出力lsi(8255) http://www.apony.com/elec/elec9/elec9.html ・ステッピングモーター ステッピングモーターの動作原理です。 http://www.robotics.ee.shibaura-it.ac.jp/manual/chap2/motorhard.html ・マトリクス・スイッチのダイナミックスキャンの解説。 少ないioポートで多くのスイッチを接続するための技術です。このz80ボードで使われています。 http://www.necel.com/ja/faq/mi_com/__com_ksw.html ソースのコメントで分からない事があったら聞いてください。