復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第524回]
●PICサンプルプログラムの説明で気になったこと(1)
[第521回]に書きましたPICプログラムの説明で、よく確かめないで書いてしまったところがあって、それがあとで気になってきましたので、確認をしてみることにしました。
頭でこうだろうと考えて書いたことでも、やっぱり確認してみないと、間違ったことを書いてしまうことがあります。
やはり実際に確認してみるということはとても大切なことだとあらためて実感しました。
気になったことは2つありました。
1つは割込みを使わない場合にアドレス0からそのまま続けてプログラムを書いてもよい、と書きましたが本当にそのようにしてしまってもよいのかどうか、ということです。
org 0 st0 goto start ; org 04 goto int ; org 05 ; start movlw 60;bk3 movwf STATUS clrf ANSEL clrf ANSELH |
ふつうは0番地には5番地へのgoto文を書きます。
アドレス4番地が割込みのエントリポイントになっているのでそれを避けるためです。
それでは割込みを使わない場合にはそのように書かないで0番地から続けてプログラムを書いてしまっても本当によいのだろうかという疑問でした。
疑問が出てきたときは、実際にそのようなプログラムを書いて試してみることです。
さっそく試してみました。
上のプログラムを下のように直してみました。
org 0 st0 movlw 60;bk1 movwf STATUS clrf ANSEL goto start ; org 04 goto int ; org 05 ; start clrf ANSELH bcf STATUS,6;bk1 |
最初は、割込みを使わないプログラムにして、0番地からベタにプログラムを書いてしまうつもりだったのですが、気が変わりました。
おそらく4番地は割込みさえ使わなければ、何を書いてもよいだろうと考えたことと、もとのプログラムとの比較を考えるとやはり割込みはできるようにしておいたほうがよいだろうと思ったからです。
気になっていたのはアドレス1、2、3番地は使ってしまってよいのか、という点だったので、結局上のようなプログラムになりました。
見ていてあまり気持ちのよいプログラムではありませんけれど。
こちらはアセンブルした結果です。
0000 00027 org 0 0000 00028 st0 0000 3060 00029 movlw 60;bk1 0001 0083 00030 movwf STATUS Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0002 0188 00031 clrf ANSEL 0003 2805 00032 goto start 00033 ; 0004 00034 org 04 0004 2B00 00035 goto int 00036 ; 0005 00037 org 05 00038 ; 0005 00039 start Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0005 0189 00040 clrf ANSELH 0006 1303 00041 bcf STATUS,6;bk1 |
見たところちゃんとアセンブルされているようです。
こちらが実行した結果です。
CH1(上側)はRE2の出力でCH2(下側)はRE0の出力です。
これと比較するために、上のようにプログラムを直す前のプログラムを実行した結果が下の写真です。
CH2の出力がちょっと変動しているように見えますが、この出力は割り込みによって周期を変えたパルスを出力しますから、上の写真と下の写真が少し違うように見えてもそれには問題はありません。
このプログラムの割込み処理についてはいずれ説明をする予定です。
さてそのようにして確認してみた結果、どうやらアドレス先頭の1〜3番地は普通にプログラムを書いても問題はないらしいということがわかりました。
このほかに気になったことはもう1点ありました。
そちらについても確認してみたところ、意外な結果になってしまいました。
本日は時間がなくなってしまいましたので、そのことについては次回に説明することにいたします。
ワンボードマイコンでCP/Mを![第524回]
2013.12.14upload
前へ
次へ
ホームページトップへ戻る