目次>8章.機能が豊富なPICを使う(PIC12F683)>(3)内部クロックで動作させる
内部クロックで動作させる (PIC12F683)
更新日2005.12.17
PIC12F683を使ってみます。
まずは、外部にレゾネータ(セラロックなど)を接続せずに、内部クロックのみで動作させましょう。
実験回路
|
・ | 出力としてLEDを5個使用した簡単な回路を作ります。
8ピンしか無いのに、5ピンを入出力として使用できます。更に1ピン(GP3)は入力として使用できます。
| | GP3は入力専用ですので、今回は使用しません。
|
| | 各LEDの並びは気にしません。 今回は、各ポートを出力として制御できる確認だけします。
|
|
プログラムの仕様
|
| 0.5秒毎に5つのLEDを同時にオン/オフさせます。
クロックは、内部クロックを使用し、内部クロックの最大である8MHzで動作させます。
|
プログラムの概要
|
|
0.5秒待つ方法、点滅させる方法は、「5章(1)LEDを点滅させる」と全く同じです。
処理フローも同じで以下の通りシンプルです。
| |
0.5秒の待ちは、命令を一定回数ループさせる事で実現します。
ただし、クロックが「5章(1)LEDを点滅させる」では10MHzでしたが、今回は8MHzです。
従って、実行させる命令サイクル数は次のようになります。
1命令実行時間 | :(1/(8MHz×1,000,000))×4=0.5u秒(マイクロ秒)
| 命令サイクル数 | :(0.5秒×1,000,000)/0.5u秒=1,000,000
|
この処理は、「5章(1)LEDを点滅させる」と同様に、3つのサブルーチンで行います。ただし、命令サイクル数が違うのでサブルーチン内のループ回数は異なります。(プログラム全体を見て下さい。)
|
PIC12F683の初期化では、いくつかのレジスタの設定が必要です。
PIC16F84Aに比べて機能が多いため、どの機能をどのように使用するかを設定するためです。
今回のプログラムで初期設定するレジスタと、その設定値について説明します。
GPIOレジスタ以外は、最初に設定するだけで実行中に変更する必要はありません。
ここでは、今回設定する値を中心に説明します。
PIC16F84Aに近い使い方(追加された機能を使わない)に設定しており、この設定が基本になります。
レジスタのもう少し詳しい説明は、「PIC12F683のレジスタ(特殊レジスタ:SFR)」を参照して下さい。
<GPIOレジスタ>
ビット | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0
| 記号 | - | - | GP5 | GP4 | GP3 | GP2 | GP1 | GP0
| 設定値 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
ポート(GP0〜GP5)のON/OFFを制御するレジスタで、0をセットするとOFF(LEDは消灯),1をセットするとON(LEDは点灯)になります。
初期値としては、全て0にします。
尚、Bit3,6,7は設定が無視されますが、プログラムでは0をセットします。
<TRISIOレジスタ>
ビット | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0
| 記号 | - | - | TRISIO5 | TRISIO4 | TRISIO3 | TRISIO2 | TRISIO1 | TRISIO0
| 設定値 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
ポート(GP0〜GP5)を入力で使うか出力で使うかを指定します。
尚、Bit3,6,7は設定が無視されますが、プログラムでは0をセットします。
<CMCON0レジスタ>
ビット | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0
| 記号 | - | COUT | - | CINV | CIS | CM2 | CM1 | CM0
| 設定値 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1
|
コンパレータの動作を設定するために使用しますが、今回はGP0〜2をデジタル入出力として使用しますので、CM0〜CM2には1を設定します。
<OSCCONレジスタ>
ビット | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0
| 記号 | - | IRCF2 | IRCF1 | IRCF0 | OSTS | HTS | LTS | SCS
| 設定値 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0
|
OSCCONレジスタでは、オシレータの動作モードを設定します。
今回は8MHzで動作させますので、IRCF0〜IRCF2は全て1を設定します。
<ANSELレジスタ>
ビット | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0
| 記号 | - | ADCS2 | ADCS1 | ADCS0 | ANS3 | ANS2 | ANS1 | ANS0
| 設定値 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
ANSELレジスタでは、アナログ入力(A/D変換)の設定を行います。
今回は、AN0〜AN3(GP0,1,2,4)はデジタル入出力で使用しますので、全て0にします。
コンフィグレーションビット(__CONFIG命令の設定)
|
__CONFIG命令では以下の記述をします。
__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF
|
_CP_OFF | プログラムメモリコードプロテクトしない
| _CPD_OFF | EEPROMメモリコードプロテクトしない
| _WDT_OFF | ウォッチドックタイマ使用しない
| _BOD_ON | 電源電圧低下監視を有効にする
| _IESO_OFF | 内部・外部切り替えモード無効
| _PWRTE_ON | パワーアップタイマ有効
| _INTOSCIO | オシレータは内部クロック使用(2番ピン:GP5,3番ピン:GP4)
| _MCLRE_OFF | マスタクリア無効(4番ピンをGP3として使用)
|
|
プログラム全体
|
| 上記の処理を組み込んだプログラムはこちらです。
メモ帳などのテキストエディタに取り込んで、P683INTOSC1.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。
今まで、PIC16F84Aを使用していた場合は、MPLABのプロジェクトウィザードで「PIC12F683」を選択して下さい。
また、PICライタでも同様に「PIC12F683」を選択して下さい。
0.5秒毎に5個のLEDが点滅すれば成功です。
|