復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第535回]
●テーブル参照(2)
あけましておめでとうございます。
昨年1年拙い文章にお付き合いいただき有難うございました。
本年もよろしくお願いいたします。
さて。
昨年の続きを、ということなのですが、読み返してみますと大体のところはもうすでに書いてしまっておりました。
残っておりますのは、一体このテーブルは何を意味しているのか?
というあたりのところだけのようです。
下がそのテーブルです。
; org 400 ; Htable addwf PCL,f retlw 0d8 retlw 0dc retlw 0e0 retlw 0e4 retlw 0e8 retlw 0ec retlw 0f0 retlw 0f4 retlw 0f8 retlw 0fc ; Ltable addwf PCL,f retlw 0f0 retlw 0d8 retlw 0c0 retlw 0a8 retlw 90 retlw 78 retlw 60 retlw 48 retlw 30 retlw 18 ; end |
HtableはTIMER1に設定する初期値の上位8ビットの値で、Ltableは下位8ビットの値です。
その上下の値を並べてみるとこうなります。
D8F0 55536(65536−10000)
DCD8 56536(65536−9000)
E0C0 57536(65536−8000)
E4A8 58536(65536−7000)
E890 59536(65536−6000)
EC78 60536(65536−5000)
F060 61536(65536−4000)
F448 62536(65536−3000)
F830 63536(65536−2000)
FC18 64536(65536−1000)
右の数値はそれぞれの16進数を10進数に直したものです。
( )内の計算式はその数値の根拠です。
例として上から3番目の値について説明をします。
この数値はTIMER1割込みを8ms後に発生させるための設定値です。
すでに説明しましたようにサンプルプログラムはPIC16F887を内部発振クロック4MHzで動作させます。
プログラムの設定ではTIMER1は発振クロックの1/4である1μsごとにカウンタレジスタをアップカウントします。
8msで割込みを発生させるためのカウント数は8000になります。
ところでこれも説明しましたようにTIMER1はレジスタに設定した値をアップカウントしてFFFFになったあとカウントオーバーして0000になったときに割込みを発生させます。
ですのでTMR1HおよびTMR1Lレジスタに設定する初期値は8000(の16進数)ではなくて8000カウントでオーバーするような値ということになります(このあたりがなかなかに面倒なところです)。
FFFF+1でオーバーフローする値は10000Hです。
その10進数は65536です。
そこで65536−8000の計算をして得られる値の57536が求める値になります。
その16進数がE0C0です。
サンプルプログラムはなかなか面倒なことをやっています。
200Hzのパルスを出力しつつ、同時に10ms〜1msまで10段階に変化するパルス(H=10ms、L=10ms〜H=1ms、L=1ms)をTIMER1割込みによって出力するというものです。
アドレス400H番地台においたテーブルを参照するために、プログラムの先頭でPCLATHに4を入れています(プログラムリストは[第516回]参照)。
PCLATHに値を設定しているところはそこだけです。
ここで注目していただきたいのは、TIMER1の割込みプログラムをアドレス300Hに置いていることです。
割込みプログラムへは4番地のgoto命令でジャンプします。
PCLATHには4が設定してありますから、その設定によるアクセス範囲は400H〜4FFHになるはずですが、それにもかかわらず300Hに置いた割込みプログラムは正しく実行されます。
下は実行中のパルス出力をオシロで観測した写真です。
上(CH1)が200HZのパルスで下(CH2)がTIMER1割込みによる出力パルスです。
パルスの幅が変化しているのがわかると思います。
年をまたいで長々と説明をしてきましたが、(プログラムが2KBの範囲に収まっているならばという条件付で)、PCLATHレジスタはテーブル参照には使われますが、それ以外のgoto、call命令には影響しません、ということを納得していただけましたでしょうか。
次回から新しいテーマでスタートする予定です。
ご期待願います。
ワンボードマイコンでCP/Mを![第535回]
2014.1.6upload
前へ
次へ
ホームページトップへ戻る