ホームに戻る
 PIC16F88 の覚え書き

0、はじめに

PIC16F84aは入門としてはよく使われます。
しかし、PIC16F88のほうが高機能で安価です。
また、外部クロックが必要ないのはお手軽です。

細かい解説は「PIC16F84a の覚え書き」に任せて、
ここではPIC16F88での違いを主に書いていきます。

1、特徴

16F88の主な特徴は内部クロックを使用できること。
内部クロックを使用することによりピンを2つ減らせます。

また、アナログ入力が可能です。
7チャンネルがアナログ入力として選択できます。
解像度は10ビットです。
初期設定がすべてアナログ入力になっているところに注意。
アナログ入力はデジタルに切り替え可能。

RA5は入力のみで出力に使用できない。

コンパレータ入力が2つ使用できます。

SPI、I2C通信に対応しています。

256bytesのEEPROMを内蔵。

16F84aの汎用RAMの先頭は0Chですが、
16F88の汎用RAMの先頭は020hになります。

2、電源

2Vから5.5Vで動作します。
5pinが+、14pinが-。

3、書き込み

pickit2との接続対応

1: 4pin
2: 14pin
3: 5pin
4: 13pin
5: 12pin
6: 接続せず

3、内部クロック

内部クロックを使用する場合には、
コンフィギュレーションワードを以下のようにセットする。

_CONFIG  _CONFIG1, _INTRC_CLKOUT

OSCCONレジスタで周波数を設定。
下位bit4から上位bit6までにセット。

000:31.25kHz
001:125kHz
010:250kHz
011:500kHz
100:1MHz
101:2MHz
110:4MHz
111:8MHz

BSF   STATUS,RP0
MOVLW B'01110000' ; 8MHzに設定
MOVWF OSCCON
BCF   STATUS,RP0

OSCTUNEレジスタで速度の微調整ができますが、
詳細は書きません。

4、タイマー

PICの1命令は4クロックである。
よって、クロックが8MHzのとき1命令は4/8=0.5μsとなる。

以下のルーチンは800命令を実行するので、
0.5μsが800回で400μs=0.4msとなる。

「MOVLW D'200'」に256以上の数値は入らないので注意。
スタックが8段までなのにも気をつけたい。

T1 EQU 020H
T2 EQU 021H
T3 EQU 022H

; 0.4ms
TIME04
 MOVLW D'200'     ; 1
 MOVWF T1         ; 1
 
TIMELOOP1         ; (200-1)回繰り返す
 NOP              ; 1
 DECFSZ T1, F     ; 1
 GOTO  TIMELOOP1  ; 2
 
 RETURN           ; 2

5、アナログ入力

アナログ入力は基準電圧の上と下を設定し、
電圧がその間のどの位置にあるかを10bit値で得ることができる。

使用できるのは以下の7つのpin。

17pin:AN0
18pin:AN1
1pin :AN2
2pin :AN3
3pin :AN4
12pin:AN5
13pin:AN6

ANSELレジスタの下位bit0から上位bit6に1を立てるとアナログ入力。
0だとデジタル入出力になる。

; 1pinをアナログ入力に
BSF   STATUS,RP0
MOVLW B'00000100'
MOVWF ANSEL
BCF   STATUS,RP0

7pinあるものの同時に使えるのは1pinのみ。

どのアナログ入力の電圧を読むかはADCON0レジスタで設定する。
bit3からbit5で設定する。
000のときAN0を使用、001のときAN1を使用となる。

ADCON1レジスタで基準電圧や測定結果の格納方法を指定できる。

結果はADRESH、ADRESLレジスタに入る。
普通はADRESHとADRESLの上位2bitの10bitに結果が入る。
精度が必要なければADRESHのみ使用して、
下位の2bitを切り捨てるほうがやりやすいかもしれない。

6、テンプレ

LIST P=PIC16F88
INCLUDE P16F88.INC

__CONFIG _CONFIG1, _INTRC_IO & _WDT_OFF & _PWRTE_ON & _CP_OFF & _MCLR_OFF & _LVP_OFF & _DEBUG_OFF
__CONFIG  _CONFIG2, _IESO_OFF & _FCMEN_OFF

T1 EQU 020H
T2 EQU 021H
T3 EQU 022H

  ORG 0
MAIN
  BSF STATUS,RP0
  CLRF ANSEL
  CLRF TRISA
  CLRF TRISB
  MOVLW B'01110000'
  MOVWF OSCCON
  BCF STATUS,RP0

LOOP
  MOVLW B'00000001'
  MOVWF PORTA
  CALL TIME1000
  MOVLW B'00000010'
  MOVWF PORTA
  CALL TIME1000
  GOTO LOOP

; 0.4ms
TIME04
  MOVLW D'200'
  MOVWF T1
TIMELOOP1
  NOP
  DECFSZ T1, F
  GOTO  TIMELOOP1
  RETURN

; 20ms
TIME20
  MOVLW D'50'
  MOVWF T2
TIMELOOP2
  CALL TIME04
  DECFSZ T2, F
  GOTO  TIMELOOP2
  RETURN

; 1m
TIME1000
  MOVLW D'50'
  MOVWF T3
TIMELOOP3
  CALL TIME20
  DECFSZ T3, F
  GOTO  TIMELOOP3
  RETURN

 END

inserted by FC2 system