2013.12.14
前へ
次へ
ホームページトップへ戻る

復活!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

前へ
次へ
ホームページトップへ戻る