ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.5 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆またもやトラブル発生 ND80ZVの説明書作業も大詰めを迎えて、あと一息で販売開始というところまできて、最後の動作確認をしていましたら、おかしなところが出て来てしまいました。 |
[第99回]
●BASICでRS232C受信ができません
[11.7.6注記]この回で参照している過去記事は今回のND80ZVのための再編集では除外されています(そのために元記事へのリンクをつけてあります)。
その除外されている回もND80ZVのハード、ソフトの開発に密接に関係した内容になっているのですけれど、主としてPIC18F14K50のUSB制御がテーマになっていて、ちょっと難しい内容なので、今回の再編集では対象からは外しました。
PIC18F14K50のUSB関係の記事をまとめて再編集するときには、今回除外した回も含めて編集するつもりです。
そんなわけで、今回の記事は前の記事からの連続性に欠けるところがありますが、あしからずご了承くださいませ[注記ここまで]
今回は、ディップスイッチがSTEP側になっている状態で、リモート接続を終了すると、ND80ZVの7セグメントLEDに05C0xxxxと表示されてしまうことについて、その解決編を書くつもりだったのですが、急遽予定変更です。
説明書の作業もいよいよ仕上げ段階に近付いてきています。
BASICの操作説明書の作業で、ちょいと説明が面倒になりそうなので後回しにしておりました、RS232Cの送信、受信の説明に取りかかりましたところ、どういうわけか、全く受信できません。
送信は大丈夫です。
受信だけができなくなってしまいました。
そんなはずは…。
で、ノートを見てみたのですけれど、これがもう、あきれてしまうくらい、いい加減で、肝心の作業記録がほとんど書いてありません。
なにしろ、毎日のように、突発的に問題が発生しては、その対策に没頭する、ということを繰り返してきておりまして、そのために行った対策のあれこれを、きちんとノートにまとめておかなくては、と思ってはいるのですが、なかなかにノートにまとめるという作業は面倒なものなのですよね。
はるか昔、学生時代から、ノートを取らないことが唯一の自慢だったくらいの出来が悪い学生だったものですから、今になってまともにノートが取れるわけがない。
って居直ってみたって仕方がないのですけれど。
そういえば、ホームページの、この連載記事。確かどこかで、RS232Cについてのあれこれを書いたような…。
で、過去記事を読み直してみましたら。
おお。あった。ありました。
ちゃんと、しっかり書いているではありませんか。
これこそ、まさに、ブログそのものでありまして、ほとんど毎日取り留めの無いことばかり書いておりますけれど、このところ、過去記事が結構役に立っておるのであります。
そうなりますと、読者の皆様がたのご迷惑とか困惑とかは、ちょいとご容赦いただきまして、一方的に備忘録をつけさせていただくことに相成ります。
そういう次第で、今回もまた突然の予定変更ですけれど、なにとぞお許しあれ。
で。
その過去記事なのですが。
BASICでのRS232Cについて、最初に書いておりますのがCPUをつくろう![第561回]のようです。7月23日ですから2ヶ月近くも前になります。どうやらこのあたりからBASICでの232Cプログラムの作業にとりかかったようです。
CPUをつくろう![第567回](7月29日)では、まだ大いに悩んでいるようです。BASICでのRS232C受信に問題があって、PIC18F14K50のRS232C受信を割込みを使ったプログラムに変更しなければならない、と書いております。
このあと、ずっとBASICでの232C受信の作業が続くのですけれど、途中からコマンドプロンプト画面への表示速度が遅い、遅すぎると思ったことから、C++での画面表示プログラムの変更だとか、WindowsXPでのコマンドプロンプトの画面設定、などというとんでもない横道にそれていってしまいました。
やっとRS232Cに戻るのはCPUをつくろう![第579回](8月10日)です。
BASICでのRS232C受信でときどきデータが欠落する、と書いています。
そうだったとしても、このあたりではちゃんとBASICで232C受信ができていたのですよねえ。
それが、今はまったく受信できません。
その後の1ヶ月ほどの間に行った作業が関係しているはずなのですが…。
CPUをつくろう![第580回]ではPIC18F14K50のプログラムのフローチャートをお見せしています。
突然に思い出したのですが、そういえば、その後、このフローを一部変更した、と思います。それについても書いておかなければいけませぬ(でも、それについては、また後日)。
CPUをつくろう![第582回](8月13日)に、BASICのRS232C受信プログラムのリストがあります。非常に簡単なプログラムです。
この時点では、このプログラムでちゃんと受信できていました。
今は、これと全く同じプログラムで、全然受信できません。
CPUをつくろう![第583回]で、やっと232C受信時のデータ欠落の原因がはっきりして、そのためのプログラム修正をしています。
そうすると、ここからさらに後で、まだ何か変更作業をしている、はずなのですが…。
おお。そういえば、何かやったような。
どうやらこれが原因らしいです。
CPUをつくろう![第588回](8月21日)で、ND80ZVをリモート接続しないで、単独でRS232C受信をすると、ハングアップしてしまう、と書いています。
それまではBASICでの232C受信が問題だったので、そのために苦労してプログラムを修正してきたのでしたが、今度はND80ZVのモニタプログラムでの232C受信でこけてしまいました。
そこで、その原因の追求が始まります。
そして、おお、CPUをつくろう![第592回]で、それまでの232C受信のときのPIC18F14K50とZ80CPUの間でのデータの受け渡しの方法を完全に変更してしまっています。
やっと、みつけました。
そうだったのでした。
ND80ZV単独でのRS232C受信が、7セグメントLED表示のためのDMAによって、ハングアップしてしまったことから、それまでのPIC18F14K50とZ80CPUとの間のデータの受け渡しの方法を変更してしまったのでした。
そういえば、その後に、キー入力データの受け渡しなどについては、新しいやりかたに合わせるために、プログラムを変更したのでしたが…。
BASICのRS232C受信については、CPUをつくろう![第583回]で行った修正作業が最後になっておりました。
むむ。これじゃあ、受信できるわけがありません。
さっそくプログラムの修正作業にかかりました。
しかし。
これほど、過去記事が役に立つとは思ってもみませんでした。
ほとんど毎日UPしているのですけれど、正直言って、毎日書くのはなかなかにしんどい作業です。
しんどい作業ではありますけれど、こうして、後々役に立つ、ということになりますと、がんばって、書かなくちゃあ、であります。
CPUをつくろう![第583回]に、BASICのRS232C受信命令READ#のマシン語のプログラムリストがあります。
参考までに、そのときのリストと、今回それを修正したあとのリストをお見せすることにいたします。
こちらが修正前のリストです。
39B4 08 RDSB:EX AF,AF' 39B5 C5 RDSB2:PUSH BC 39B6 06EB LD B,EB 39B8 78 LD A,B 39B9 D398 OUT (98),A 39BB DB94 RDSB3:IN A,(94) 39BD E620 AND 20 39BF C2BB39 JP NZ,RDSB3 39C2 3E0A LD A,0A;WAIT ABOUT 20MICROS 39C4 3D RDSB32:DEC A;(4) 39C5 C2C439 JP NZ,RDSB32;(10) 39C8 DB94 IN A,(94) 39CA E620 AND 20 39CC C2F739 JP NZ,RDSB4 39CF DB94 IN A,(94) 39D1 E610 AND 10 39D3 F5 PUSH AF 39D4 CDA706 CALL RSIN 39D7 3EEF LD A,EF 39D9 D398 OUT (98),A 39DB F1 POP AF 39DC CAFD39 JP Z,SINER;=73 39DF 79 LD A,C 39E0 C1 POP BC 39E1 FE0A CP 0A 39E3 C8 RET Z 39E4 FE0D CP 0D 39E6 CAB539 JP Z,RDSB2 39E9 77 LD (HL),A 39EA 23 INC HL 39EB 04 INC B 39EC 08 EX AF,AF' 39ED 3D DEC A 39EE CAF539 JP Z,RDSB33 39F1 08 EX AF,AF' 39F2 C3B539 JP RDSB2 39F5 3C RDSB33:INC A;reset zf 39F6 C9 RET 39F7 3EEF RDSB4:LD A,EF 39F9 D398 OUT (98),A 39FB C1 POP BC 39FC C9 RET ; 39FD F1 SINER:POP AF;DUMMY 39FE F1 POP AF;DUMMY 39FF D1 POP DE 3A00 E1 POP HL 3A01 71 LD (HL),C 3A02 23 INC HL 3A03 3600 LD (HL),00 3A05 3EEF LD A,EF 3A07 D398 OUT (98),A 3A09 3E49 ER49:LD A,49 3A0B C33D31 JP ERRDP 39AC 08 RDSB:EX AF,AF' 39AD C5 RDSB2:PUSH BC 39AE 06EB LD B,EB 39B0 78 LD A,B 39B1 D398 OUT (98),A 39B3 CD8D07 CALL SINSB 39B6 79 LD A,C 39B7 C2C539 JP NZ,RDSB3 39BA FEFF CP FF 39BC CADE39 JP Z,RDSB4;NO DATA 39BF 32B8FF LD (SINERMK),A 39C2 C3E539 JP SINER 39C5 C1 RDSB3:POP BC 39C6 FE0A CP 0A 39C8 CAE039 JP Z,RDSB5 39CB FE0D CP 0D 39CD CAAD39 JP Z,RDSB2 39D0 77 LD (HL),A 39D1 23 INC HL 39D2 04 INC B 39D3 08 EX AF,AF' 39D4 3D DEC A 39D5 CADC39 JP Z,RDSB33 39D8 08 EX AF,AF' 39D9 C3AD39 JP RDSB2 39DC 3C RDSB33:INC A;reset zf 39DD C9 RET 39DE B7 RDSB4:OR A;RESET ZF 39DF C1 POP BC 39E0 3EEF RDSB5:LD A,EF 39E2 D398 OUT (98),A 39E4 C9 RET ; 39E5 F1 SINER:POP AF;DUMMY =PC 39E6 F1 POP AF;DUMMY =BC 39E7 D1 POP DE 39E8 E1 POP HL 39E9 77 LD (HL),A 39EA 23 INC HL 39EB 3600 LD (HL),00 39ED 3EEF LD A,EF 39EF D398 OUT (98),A 39F1 3E49 ER49:LD A,49 39F3 C33631 JP ERRDP |
>list 10 PRINT "START" 20 KETA%=0 30 READ #1,RDATA$,KETA% 40 IF KETA%<=0 GOTO 30 50 PRINT RDATA$; 60 IF RDATA$="END"THEN STOP 70 IF KETA%=40 GOTO 20 ELSE PRINT :GOTO 20 >run START abcxyz ABCXYZ 123 abcdefg /end END break in 60 |
CPUをつくろう!第610回(2010.9.14upload)を再編集
ワンボードマイコンをつくろう![第99回]
2011.7.5upload
前へ
次へ
目次へ戻る
ホームページトップへ戻る