復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第528回]
●PICサンプルプログラムの説明(CPUクロックとI/Oポートの設定)
やっと本題に戻ってきました(と言ってもまだテーマ違いのままですが)。
ANSELとANSELHの問題にひっかかってしまい、そこで足踏みをしてしまいました。
そのANSEL、ANSELHについてクリアできたところで、その次の説明に移ります。
まずはCPUクロックの設定です。
PIC16F887はクリスタルを外付けしなくても内蔵のオシレータによってCPUクロックを生成することができます。
それほど正確な実行時間を必要としない用途でしたら、回路が簡単になりますから、これはとても有難い機能です。
内蔵オシレータを使うことは、プログラムの先頭のCONFIGで指定しておきます。
CONFIGは[第519回]で説明をしました。
_INTOSC
を指定します。Internal Oscillatorの意だと思います。
そしてプログラム中でOSCCONレジスタを設定します。
[出典]Microchip Technology Inc. PIC16F882〜887Data Sheet
クロックは最高8MHzまで選択できますが、今回はそれほど速度を必要としませんから4MHzを選択しました。
4MHzだと1命令時間が1μsになるので、ステップ数から実行時間を割り出すのに都合がよいというメリットがあります。
ですからbit6−4は’110’です。
bit3〜0は、’0100’にします。
bit0を1にすれば、CONFIG1の設定に関係なく、内部オシレータを選択できるようですね。
ということはここは’1’でも’0’でもよいことになります。
でもCONFIG1で指定していますから、ここは’0’にしておきましょう。
プログラムは下のようになります(下のリストのうち上から3行)。
bcf STATUS,6;bk1 movlw 64 movwf OSCCON clrf TRISA clrf TRISB clrf TRISC clrf TRISD clrf TRISE bcf STATUS,5 ;bank0 ; clrf PORTE |
その後ろではI/Oポートの向きを指定しています。
PICのI/OポートはPORTAはTRISA、PORTBはTRISBというように、対応する名前のTRISレジスタで入出力の向きをビットごとに設定します。
TRISレジスタで、入力に指定するビットは1に、出力に指定するビットは0に指定します。
今回のテストプログラムではPORTEのビット0とビット2を出力に使いますが、そのほかは使いません。
ですから簡単にCLRF TRISEで済ませています。
そのほかのPORTA〜PORTDは使わないので設定しなくてもよいと思われるかもしれませんが、なにも指定しない場合、そのポートは入力(TRISの全ビットが’1’)になります(下表の85h〜89h参照)。
[出典]Microchip Technology Inc. PIC16F882〜887Data Sheet
入力になにもつながない状態にしておくと、その入力はハイインピーダンスになりますから、ノイズによって誤動作したり、最悪の場合はICが破損する可能性があります。
ですから未使用ポート(未使用ビット)は出力にしておくのが安全です。
なお上のプログラムリストで最後に
CLRF PORTE
と書いていますが、スタート時にPORTEの出力を’0’にして開始したいと思ったからで、いつもこうしなければならないということではありません。
ワンボードマイコンでCP/Mを![第528回]
2013.12.19upload
前へ
次へ
ホームページトップへ戻る