CPU Central Processing Unit

[第

1 章]

PIC マイコンはどんなコンピュータか知る

ワンチップ・マイコン
PIC シリーズの概要
PIC（Peripheral Interface Controller）は，週末に何か自動化したシステムを作ってみたい，オリジナルの測定器やコントローラを自作したいという要求に最適なワンチップ・マイコンです．今のコンピュータ
時代に参加して，何かを自動化したいと思う方の味方です．
小さなこのマイコンの中は，コンピュータの中心になる CPUと多くの機能，そしてたくさんの手足をもっています．一つのピンは，単なるディジタル入力や出力だけでなく，たとえばアナログ入力に切り替えて使える機能が選べるすぐれものです．

この印は頁右上に略語の語源の説明があります

ここではパワフルな PIC マイコンの位置付けと概要を説明します．

1-1 本書を読んでいただきたい方
筆者が，最初に使用したパソコンは，Z80 という 8 ビットのマイコンを CPU として，1 年がかりで自作したものです．白黒 TV をディスプレイとし，8 インチのフロッピ・ディスクを外部記憶装置とした
CP/M という OS が動くマシンでした．このときは，CPU 基板，メモリ基板，キーボード，非同期通信基
板，フロッピ・ディスク・コントローラと順番にユニバーサル基板に配線・組み立てしていきました．費
用も時間もかかりましたが，完成したときには，その各デバイスの内容が良く理解できました．また，自分で作る面白さを存分に満喫しました．
その後，CPU も 16 ビット，32 ビットと性能が向上すると共に，OS も巨大なものになり自作できるものではなくなりました．それ以来，もっぱらコンピュータは使うものとしてきました．時代は PC/AT 互換機が主流になり，ボードを組み立てる自作パソコンもあり，もちろんそれなりの技術と知識は必要です
が，それは装置のセットであって，ものづくりではありません．
そのような中，1 年がかりで CP/M パソコンをすべて手作りする本をまとめたことのある CQ 出版社から，PIC の入門書をという話がありました．本書もその当時と同様のコンセプトを踏襲しています．PIC
は，ハードウェアの費用と規模が小さくてすみますから，パーツを集めるのも簡単です．秋葉原に出かけなくてもインターネット上からもパーツの購入ができます．
今まで電子機器の製作は，多くの知識と情報，そして経験が必要でした．しかし，PIC はむずかしい所をスキップして，結果を早く手にすることができるデバイスです．何か作りたい，アイディアがある，という方にとってとても強力な武器になることでしょう（図 1-1）．
本書では，好奇心の旺盛な方が独力で，実際にテスト・ボードを作りながら本書を体験することで，自分の作りたいものを作れるようになる入門書を目指しています．また，リファレンス・マニュアルとして
1-1

本書を読んでいただきたい方

11

IC Integrated Circuit

図 1-1 PIC は技術的興味と創造力をかきたてる

利用できるように必要な資料も日本語で掲載しました．

1-2 はんだ付けの経験がなくても興味がある方なら誰でも作れるようになる
今まではんだ付けなどまったく経験がない方，電子回路についても高校の物理以来勉強したことがない
方，高校では物理を選択しなかったという方は，中学の理科で習ったオームの法則を思い出してください．
オームの法則を理解している方が本書を読みながら，① 基板に IC

ソケット，LED（発光ダイオード），抵抗，コンデンサをはんだ付けし② 順番に回路を組み立て，プログラムを作り動作を確認することで③ 温度，明るさなどを測り，その結果に応じて，照明を点灯したりサンプリングしたデータを保存するなどの，システムを作るための基本となる技術を身につけることができるということを目標としています．
もうひとつの前提条件があります．プログラムの作成，テストをパソコン上で行います．そのため，Windows を利用できる状況が必要です．今まで，インターネットで何か調べたことがある，文書を作って印刷したことがある，という経験があれば十分です．

12

第1章

ワンチップ・マイコン PIC シリーズの概要

図 1-2 初めははんだ付けから始めます1-2

はんだ付けの経験がなくても興味がある方なら誰でも作れるようになる

13

DIP Dual In-line Package● 実際の手順
最初に，小規模のテスト・ボードを作り，PIC の各機能の動作を確認していきます．部品を揃え，回路を確認し，それぞれの部品をはんだ付けし配線していきます．その作業の中で，自然とそれぞれの部品の役割，配線する端子の機能が理解できます．今週は首っ引きで本書を読んでも内容がはっきりわからなくても，次の週には接続する端子や抵抗の役割を含めて全体が見えてきます（図 1-2）．
配線するときに，部品をはんだ付けするとき何回も繰り返し回路図を見ることになります．間違えると動作しませんから，何度もチェックすることになります．解決しないと翌週まで宿題となります．本書は30 分でわかる何々の本ではありませんが，ここに示したものを実際に組み立てて確認していただければ，皆さんが希望する新しい工夫を創造する基本が理解でき，その後は自分の望むものが自力で作れるようになるでしょう．

1-3 一般に入手できる主なワンチップ・マイコン
PIC の話に入る前に，この業界を少し見てみます．ワンチップ・マイコンとして利用される IC を図 1-3に示します．現在，国内では利用の多い H8 シリーズ以前に，1984 年に発売された HD64180 という Z80 の上位互換で，周辺デバイスもワンチップにしたマイコンがありました．このベースとなった Z80 は 8 ビット・マイコンのベストセラーで，初期のパソコンは Apple を除いてほぼすべてこのチップか，セカン
ド・ソースとして各半導体メーカから発売されていた互換チップが利用されていました．
その後，新しいワンチップ・マイコンの製品系列として，H8 300L シリーズの 8 ビット，H8 300H シリーズで 16 ビット，SH シリーズでは 32 ビットと発展し，今後のディジタル家電，産業機器，自動車などのディジタル化の中核を担うことを狙っています．また，H8 tiny シリーズの展開により小型化のニーズにも対応しています．
ルネサステクノロジ社は，日本の半導体業界の再編が行われたときに設立された会社で，2003 年 4 月に日立製作所と三菱電機の半導体部門が融合しました．ローエンドよりのマイコンとして，日立製作所は
H8 シリーズ，三菱電機は R8C シリーズをラインナップしています．
もちろん，再編が行われた後も，家電組み込み用マイコンとしてメーカ独自の CPU を各社が出していますが，ここでは開発ソフトなどの入手性，価格を考慮し，それらの代表として H8 シリーズを図に示しました．

● PIC にもシリーズがある
PIC には大別すると次の 3 種類があります．

このアイコンは，章末に用語解説があります

12 ビット命令，33 命令数のシリーズとして，PIC12C509A など 8 ピン DIP
ら数本以上のディジタル I/O−−−−−−−−−−−の小型パッケージなが，40 バイト前後の RAM と 1K のプログラムできる ROM−−−−−をもつ「PIC12 シリーズ」の最小のコンピュータ・システムから始まって，14 ピン DIP，28 ピン DIP と I/O 数を強化しています（2004 年年末からこの下位の PIC10 シリーズも入手できるようになった）．
14 ビット命令，35 命令と強化され，8K ワードのプログラム領域，256 バイト前後の RAM 領域，タイマ，A-D コンバータ ，各種の通信機能をもった「16 シリーズ」は，マイクロチップ・テクノロジー社で−−−−−−−−−−−−

は「ミッドレンジ」といっています．利用例の多い 18 ピン DIP の 16F84A，今回主に取り上げる 16F877Aなどはこのクラスになります．通常の工作には一番使いやすいシリーズです．

14

第1章

ワンチップ・マイコン PIC シリーズの概要

図 1-3 よく使われるワンチップ・マイコン
デバイスが容易に入手でき，安価に開発システムが用意でき，そしてアマチュアが容易に利用できるものを選んだ．

1-3

一般に入手できる主なワンチップ・マイコン

15

EEPROM Electrically Erasable and Programmable Read Only Memory
PIC の場合，16XXX とあってもすべてが 14 ビット命令のものではなく，12 ビット命令のシリーズも混在しているので，選択する際には注意が必要です．
PIC の最上位シリーズとしては，16 ビット命令，命令数も 76 命令と強化した 18 シリーズがラインナップ
されています．基本的なアーキテクチャ−−−−−−−−−−−−

はみな共通していますので，ミッドレンジの内容をしっかり確認しておけば，機能の強化された点を重点的に確認することで足ります．本書では取り上げませんが，メ
モリ容量などがほかのシリーズに比べて強化されているので，開発には C 言語が中心に使われているようです．
このほかに，ATMEL 社から PIC の発売後に，同様なコンセプトのワンチップ・マイコン・シリーズ
AVR が発売されています．AVR は命令の数が多く，レジスタの演算などについても PIC より使いやすくなっている部分もあります．今後の発展が期待できます．

● PIC は小規模なシステムに特化したワンチップ・マイコン
PIC を使えば，わずか数百円で CPU，I/O，通信モジュール，EEPROM，A-D 変換モジュールが搭載されたコンピュータ・ボードと同等な機能が，ワンチップで入手できるのです．簡単な制御であってもこれを使わない手はありません（図 1-4）．
国内では広くアマチュアに支持され，雑誌にも取り上げられ，インターネットの電子工作を取り上げているサイトにも製作例が多く見られます．海外では，家電製品などへの組み込み事例も多いようです．
1995 年頃から「トランジスタ技術」誌で取り上げられ，広く知られるようになりました．このとき取り上げられたのは PIC16F84 というデバイスで，18 ピン DIP の小型でありながら，8 ビットおよび 5 ビット

図 1-4 ボード，コンピュータがワンチップに必要な機能がワンチップ化され小型化されることで，様々な場所で制御用として容易に利用できるようになる．

16

第1章

ワンチップ・マイコン PIC シリーズの概要

BIOS Basic Input/Output Systemの汎用入出力ポートとタイマ/カウンタを一つもった，汎用性に富んだワンチップ・マイコンでした．と
くに，プログラム・メモリにフラッシュ・メモリ

−−−−−−−−−−−−−−−

を採用していることにより，何度でもプログラムの書

き換えが可能なので安心してテストができます．

かつての紫外線消去タイプは，プログラムの再書き込みをするためには，チップを基板から取り外し，
紫外線ランプで 20 分くらい消去のために強い紫外線を照射しなければなりませんでした．型番に F がつ
くフラッシュ・メモリを搭載した PIC では，最終的に動かす基板に，オンボード・プログラミングの準備をしておけば，実装したままでプログラムの変更が容易に行える品種も多くあります．
PC/AT 互換機の BIOS

，その他，いろいろな機器のバージョン・アップが，特別な機器なしでできるようになっているのは，このフラッシュ・メモリによるところが大です．
本書では，PIC のミッドレンジの中で豊富な機能を盛り込んだ 16F87XA シリーズの 16F877A を取り上げます．執筆の当初は 16F87X シリーズが一般的でしたが，改良版の A タイプの入手も容易になったので
16F877A を対象としています．コンパレータ，基準電圧以外（つまり，ほとんどの部分）は 16F877 も同様に利用できます．

● PIC のシステムとパソコンを比べると具体的な説明の前に，皆さんの目の前にあるコンピュータ，つまりパソコンとどこが同じで，どこが違うのかを少し確認してみます．
内蔵プログラムを解読，実行するサイクルを自動で行うコンピュータとしての基本は同じ
それぞれ性能向上のための多くの技術が盛り込まれ，まったく異なった様相を呈していますが，乱暴な言い方をすれば，共に次のようなことが言えます．
① プログラムを内蔵し，そのプログラムを読み込み，解読，プログラムの指示通り忠実に実行する．
完了したら次の命令を読み込み，解読，実行のサイクルを自動的に進行する．
② 期待通りの活動を行わせるためには，要求を実現するための詳細なプログラムを作る必要がある．
当然，このような基本的な動作は，共に同じように動きます．したがって，図 1-5 に示すように，パソ
コンも PIC もシステム開発の要件は同じような項目になります．
しかし，その内容には大きな差があります．パソコンの命令サイズは 32 〜 64 ビット，今回取り扱う
PIC は 14 ビットの命令コードで，扱えるプログラム・メモリ・サイズが最大でも 8K ワードです．ご存知のように，パソコンに搭載されているメモリは数百 M バイトです．そのため，パソコンのように何でもできるわけではありません．対応できる処理も小規模なものが中心となります．

● 今回扱うPIC の命令は35 種
PIC の中でも，今回対象とするミッドレンジのシリーズはわずか 35 の命令しかありません．メーカの用意している命令セットのリファレンス・マニュアルも 48 ページ程度です．しかし，小規模なシステムを組むには必要にして十分な命令セットになっています．
一方，パソコンで使用されている CPU（ペンティアム）
は，新しいシリーズの発表のたびに機能の追加が行われ，命令も追加されています．最近のリリースには，ブロードバンド環境での映像のストリーム処理に対応して 80 命令が追加されたとありました．現在では，命令セットのリファレンス・マニュアルがアル
1-3

一般に入手できる主なワンチップ・マイコン

17

OS Operating System
PIC

パソコン
複数チップで構成
マザーボードCPU

マザーボードがワンチップ化されているプログラムを内蔵し下図のようなサ
イクルで自動実行
するのは共通

ワンチップ

命令フェッチ

RAM

プログラム・メモリ

データ・メモリ

CPU

I /O

解読
T I MER
A-D

実行

プログラム・メモリ
14ビット幅

32ビット〜
64ビット・システム

CPU

370〜410ピンの巨大なCPUCPU

8〜40ピンの1チップの中に，必要な機能がほとんど網羅されている

実行環境

ハードウェアB I OS
OS

提供された
機能を利用
し，既存の
システムの
上で追加開
発する

ドライバ
アプリケーション

必要な部分
を作って追
加する

全部を自作できる

ハードウェアアプリケーション

開発環境
通常はOS経由でしかハードウェアにアクセスできない．
多くの知識と開発ツールを必要とする

35の命令を覚え，MPLAB（開発環境）を用意するだけで実用的なシステムを作ることができる

図 1-5 コンピュータ・システムの開発環境
パソコンなどでシステムを開発する場合は，多くの関連技術の知識とツールが必要となる．一方 PIC の場合，直接 PIC に密着したシステムの開発に集中できる．また，容易にシステム開発の体制が整えられる．その違いはあるが，問題解決の考え方は同じとなる．

ファベット順の二冊に分かれていて，A-M で 580 ページ，N-Z で 416 ページと膨大なものになっています．
PIC の場合は，命令は 35 種類しかなく，バイト処理，ビット操作，ジャンプ，制御の命令を確認するだけで全体を把握できます．命令の説明を 30 分も読めば，後は命令の一覧表を片手にプログラムのコー
ディングができるようになります．Appendix 6 に示す命令表は，その目的も兼ねて用意しました．

● PIC は直接ハードウェアを制御できる
PIC のシステムには，皆さんがパソコンで使用している Windows のような OS

18

第1章

ワンチップ・マイコン PIC シリーズの概要

は用意されていませRAM Random Access Memory
ん．PIC を動かすためのプログラムは，すべての手順をプログラムしなければなりません．
けれども，パソコンでパソコンの外側にある機器を制御しようとすると，Windows のシステム（OS）を経由してしかハードウェアをコントロールすることができません．PIC を利用することで，温度の計測，モータの制御など容易にハードウェアの制御が行えます．本書を読むことで，なんだこんなにも簡単なのかと，実際に体験することができます．

● PIC の開発環境として必要最小限なものはメーカから無償で提供されている
開発環境は，PIC の製造会社の Microchip Technology から MPLAB IDE と呼ばれる，プログラム作成を支援するソフトや，作成したプログラムの動作をパソコン上で確認することができるシミュレータなどが用意されています．一人で開発できる規模のシステムには，ちょうどよい開発支援システムです．
パソコンの場合は，PIC ほど簡単に制御システムを作成することができません．

● CPU もメモリも周辺回路も皆，ワンチップに集積されるパソコンで使用されているコンピュータのシステムは，CPU チップ，周辺装置との仲立ちなどを行う
チップセット，メモリなどで構成されたマザーボードと周辺インターフェースで本体が構成されています．
パソコンのふたを開けると必ず目に付くマザーボード，この機能が，PIC ではほとんどすべてワンチップの中に盛り込まれています（図 1-5）．

1-4 PIC16F877A の概要
これ以後，PIC の内容について，今回取り上げる PIC16F877A を中心に確認していきます．
図 1-6 に PIC16F877A のチップ内の概要を示しました．ここでは，PIC の特徴をまず確認します．
① 8K ワードのフラッシュ・メモリを内蔵
PIC16F877A では 8K ワードのプログラム・メモリがフラッシュ・メモリに割り当てられています．フラッシュ・メモリであるため，プログラムの書き換えが何度でも行えますし，電源を切っても内容は消えません．また，最終製品に組み込んだ後でもプログラムを改良し，バグを取り，上書きすることで容易にバージョン・アップを図れます．
② RAMを内蔵，特殊機能レジスタと汎用レジスタとして利用

368 バイトの RAM−−−−−には，PIC のシステムを管理するための SFR（Special Function Register：特殊機

能レジスタ）と呼ばれるレジスタと，ユーザが自由に利用できる読み書き可能な汎用レジスタが割り当てられています．
命令の中で，これらのレジスタを指定するためのアドレスが 7 ビットしか割り当てられていません．そのため，7 ビットで指定できるアドレスは 128 までですから，そのままでは 368 バイトの RAM の全体を指定することができません．このため，RAM を 7 ビットのアドレスで指定できる 128 ごとに区切って全体を四つに分け，バンク 0，バンク 1，バンク 2，バンク 3 としています．
話は細かくなりますが，このバンクの指定を，この RAM の 03 番地のレジスタ中のビット 6，ビット 5の値の組み合わせで選択しています（00，01，10，11 の四つ）．これらのレジスタ・ファイルには，後述の図 1-8 のように，それぞれの機能に合わせた名称が付けられています．この 03 番地のレジスタは

STATUS レジスタと呼びます．レジスタの各ビットにも名称が用意されていて，STATUS レジスタのビッ
1-4

PIC16F877A の概要

19

1 電源を落としてもデータが消えない
フラッシュ・メモリで構成される．
プログラムが保存されるメモリ

2 プログラムなどで書き換え可能なRAMで構成される．
レジスタ・ファイル
CPUの中核部
データ・バスフラッシュ・
プログラム・
メモリ
1

プログラム・カウンタ

813

1命令の大きさと同じビット数

インストラクション・
レジスタ

RA0/AN0RA1/AN1
RA2/AN2/VREF − /CVREF
RA3/AN3/VREF ＋
RA4/T0CKI /C1OUT
RA5/AN4/SS/C2OUT

RAM 2
レジスタ・
ファイル

8レベル・スタック（13ビット）プログラム・ 14
バス

ポートA 49

ポートB 4

アドレスMUX
ダイレクト・アドレス

イン・
ダイレクト・
アドレス

8

7

FSRレジスタSTATUS
レジスタ

8

オシレータ・
スタートアップ・
タイマ

ポートD 48
Wレジスタ

ウォッチ・ドッグ・
タイマ
ブラウン・アウト・リセット

3 プログラム実行のタイミング
を同期させるためのクロックを発生させる回路．
CR ，クリスタル，セラミックなど発振のための外付け部品を付加して構成する
16F877にはない
11
コンパレータ

基準電圧

ALU

パワー・オン・リセット

3
タイミング・
ジェネレータOSC2/CLK
OUT

MUX

パワー・アップ・
タイマ

インストラクション・
デコード＆コントロールOSC1/CLK I N

3

ポートC 4

イン・サーキット・
デバッガ
低電圧
プログラミング

パラレル・
スレーブ・ポート

16F877にはない
RB0/I NT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T1OSO/T1CKI
RC1/T1OS I /CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SD I /SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7

ポートE 4
RE0/AN5/RD
RE1/AN6/WR
RE2/AN7/CS

MCLR/Vpp VDD ，
VSS

タイマ0

6
タイマ1

6

6
タイマ2

10ビット 7
A-D

データ 5
EEPROM

CCP1, 28

同期シリアル・ポート 10USART
95 電源を落としてもデータが消えない
保存用データを格納するメモリ

4 これらのピンは，複数の機能が割り当てられる．どの機能を使うかという設定はレジスタで行われる

これら以外のピン．
OSC1, OSC2, MCLR,
VDD , VSSは単独の機能をもつ

図 1-6（2） PIC16F877A のブロック・ダイヤグラム
CPU の中核部と外側の周辺デバイスが機能としてワンチップに入っている．周辺デバイスをコントロールすることに重きが置かれていることがわかる．信号の上に￣￣が記入してあるのは負論理を示す．

20

第1章

ワンチップ・マイコン PIC シリーズの概要

RP1 Register Bank select bits
ト 6（b6 ）は RP1，ビット 5（b5 ）は RP0 と表記しています．この STATUS レジスタは SFR のひとつです．

統合開発環境の MPLAB で使用する MPASM というアセンブラ−−−−−−−−−

でプログラムを作成（本書ではこの方法を採用）するときは，レジスタやビットのアドレスの代わりに名称をそのまま使用することができます．
この表記はマイクロチップ・テクノロジー社のマニュアルの表記と一致しています．本書でもプログラムの表記，説明はマニュアルに合わせることで，混乱のないように努めています．
バンクについては第 4 章のテスト・ボードを動かすときに必要になるので，この後で詳しく説明します．
③ 発振回路を内蔵
タイミング・ジェネレータとして発振回路を内蔵しているので，CR（コンデンサと抵抗をそれぞれ 1 本），
水晶振動子，セラミックのレゾネータなどのいずれかを PIC の外に付けることで，用途に合わせた最適なクロックが得られます．このタイミング・ジェネレータで作成されたクロックに同期して PIC の命令が実行されます．最大は 20 MHz です．
PIC の命令は，発振クロック四つ分（Q1 ，Q2 ，Q3 ，Q4 ）で 1 命令が実行されます．タイミング・ジェネ
レータで作成された発振クロックは内部で 4 分周され，1 命令の実行タイミング以外に，タイマ，その他の周辺機能のタイミング源にもなっています．
④ 入出力ポートが多い
OSC1 ，OSC2 ，￣
MCLR，VDD ，VSS 以外の端子はすべて汎用のディジタル入出力ポートとして利用できます．その他の機能についても，対応するレジスタの設定によってアナログ入力，クロック入力，シリア
ル・データ−−−−−−−−−−−−−−−の入出力など，一つのピンに複数の機能が割り当てられていて，使う人の都合で，自由にとはいきませんが，機能を決めることができます．
そして，ディジタル I/O ポートは，ポート単位の入出力のほかにビット単位の入出力も 1 命令で行える
ので，スイッチの ON/OFF，開閉の検出などコントローラとしての制御が簡単に行えるのが特徴です．
⑤ データ保存用 EEPROM をもつ
データ用の EEPROM（書き込みして保存，消去と読み出しができる ROM）が用意されていて，この領域に電源を切断し再開後必要になるような「データ」を保存しておくことができます．データの読み書きには少し手順が必要です．第 13 章で説明します．
⑥ タイマを複数内蔵
タイマ 0（8 ビット），タイマ 1（16 ビット），タイマ 2（8 ビット）の三つのタイマ/カウンタを内蔵しています．
第 6 章で実際に動かし確認してみます．
⑦ アナログを扱うための A-D コンバータ
10 ビット A-D コンバータを内蔵していて，RA，RE のポートで最大 8 チャネルのアナログ入力を処理できます．温度の計測など，第 12 章で実際に使って確認してみます．
⑧ カウンタや PWM を実現する CCP1，2
タイマ 1，タイマ 2 と連携したカウント・データなどのキャプチャ，コンペア，PWM （Pulse Width−−−−−

Modulation）処理を実現するレジスタが 2 セット用意されています．PWM は，モータの速度コントロー
ルなどに利用されています．第 8 章で実際にふれます．
⑨ 同期/非同期通信ポートを 2 チャネル内蔵
非同期通信−−−−−−−−−

を利用すると，パソコンのシリアル通信インターフェースとの間で簡単に通信ができます．これらは第 10 章で体験します．
1-4

PIC16F877A の概要

21

SSP Synchronous Serial Port
⑩ SSP （同期シリアル・ポート）
SPI，I 2 C など，ボード内のデバイス間の通信手段として広く利用されているプロトコル−−−−−−−−−にも対応しています．外部につないだ EEPROM，ほかの A-D コンバータのデバイスなどとも容易に連携したシステ
ムが作れます．外部のシリアル EEPROM とのデータの読み書きを第 11 章で行い，詳しく説明します．
⑪ コンパレータ・基準電圧
二つのアナログ・コンパレータが内蔵され，アナログ入力の比較ができます．内蔵された基準電圧との比較なども行えます．基準電圧は電源電圧から 16 段階の基準電圧を作成します．第 13 章で説明します．

1-5 PIC の中ではプログラムがどのように進行するのか
少し細かいかもしれませんが，PIC の中でプログラムがどのように実行されるか，その概要を見てみます．

● プログラム・メモリとデータ・メモリは別電源が入ったりリセットがかかった直後に最初の命令は，いつ，どこかから読み取られるのでしょうか．
図 1-7 に示すように，プログラム・カウンタによって，実行するプログラムの命令の格納されているアドレスが指定されます．命令が読み込まれるたびにこのプログラム・カウンタはカウント・アップされ，次最大8Kワードのプログラム・
メモリをアクセスできるプログラム・
メモリ

13ビット

PC
プログラムの実行順序を制御するカウンタ．原則，
次に実行する命令が格納されているプログラム・
メモリのアドレスがセットされる．13 ビット長
電源投入後のパワー・オン・リセット
後にはこの値が 0 となる．したがって，
リセット後プログラムは 0000 番地
から開始される

PC（プログラム・カウンタ）

1 命令は 14 ビットで構成される．
そのため，プログラム・メモリは 8K
ワードとなる．1 ワード＝14 ビット
14ビット
命令レジスタ命令デコーダ＆
制御部

データ・バスは8ビット

ALU
368バイトRAMエリア

SFRおよび汎用レジ
スタとして読み書きができる

図 1-7 PIC のプログラム・メモリとデータ・メモリは別
プログラム・メモリとデータ・メモリ（RAM）は，別のメモリ空間に割り当てられている．これは，ハーバード・アーキテクチャと呼ばれている．

22

第1章

ワンチップ・マイコン PIC シリーズの概要

のアドレスがセットされます．
電源投入後などのパワー・オン・リセットでは，このプログラム・カウンタの値もリセットされて 0となり，つまり，プログラム・メモリの 0 番地の命令を読み出して実行します．

● プログラム・メモリはROM
プログラムが格納されるメモリはフラッシュ・メモリで構成されているので，開発をしている人は PICにプログラムを書き込むための専用のプログラマ装置を使います．このプログラム・メモリは，命令のビット構成に対応して 1 ワード＝ 14 ビットの構成となっています．容量は 13 ビット・アドレスで示される
最大 8K ワード分のアドレス空間となります．
プログラムから直接読み書きするデータ・メモリは，別の RAM エリアに 8 ビットのデータ・バスで接続されています．前述のように，この RAM はあらかじめ役割が決められた特殊機能レジスタ（SFR）と呼ばれるものと，ユーザが自由に役割を決めて利用できる汎用レジスタがあります．
このように，PIC の場合はプログラムとデータ領域を別のシステムとしてそれぞれ最適な構成で実現しています．パソコン用 CPU のように命令やデータが 8 ビット＝ 1 バイトの倍数になっているのではなく，プログラム・メモリは 14 ビット幅，データは 8 ビットのバイト単位です．このようなプログラムとデータを分離して扱う仕組みを，PIC のデータ・シートではハーバード・アーキテクチャといっています．
PIC 以外の多くのマイコンおよびパソコンでは，プログラムとデータは同じデータ・バスに接続し同じメモリ空間に配置されます．

● レジスタ・ファイルの構成
レジスタ・ファイル（＝RAM エリア）は図 1-8 に示すような，128 バイト（00h 〜 7Fh）単位の四つのバンクと呼ばれる単位に区分されています．バンク 0 のみ 128 バイト実装されていますが，ほかのバンクは実装されていない部分があります．各バンクの下位アドレス側（図では上のほう）には特殊機能レジスタ（SFR）が配置されています．特殊機能レジスタ以外のアドレス，すなわち各バンクの特殊機能レジスタに割り当てられている以後のアドレスは，ユーザが汎用レジスタとして自由にプログラムで利用できます．
RAM エリアは，16F877A では総計 368（96＋80＋80＋80）バイト割り当てられています．
また，汎用レジスタ 70h 〜 7Fh の 16 バイト分は，バンク 1 以降のメモリ・バンクが選択されていても，常にバンク 0 の 70h 〜 7Fh の汎用レジスタを選択するようになっています．このエリアは各バンクと無関係に共通で保存したり，受け渡ししたりするデータの保存場所として有用です．
このレジスタ・ファイルは，PIC の種類によって大きく異なる部分と共通なレジスタがあります．

● 演算処理の中心はW レジスタ
図 1-9 に示すように，演算の中心になる W レジスタ（Working Register）が用意されています．このレジスタは演算を行う中心であるユニット ALU と一体となって組み込まれていて，W レジスタはレジス
タ・ファイル外にあるのでアドレスがありません．そのため，ほかのレジスタようにアドレスで指定する必要はありません．オペランドのリテラル（後述）と演算できるのは W レジスタのみです．また，加減・論理演算の一方は，必ず W レジスタとなります．
どの命令でも，格納先を示す第 2 オペランド（d）が 0 の場合に，演算結果を W レジスタに保存することができます．したがって，演算結果の一時的な保存，データの受け渡しの仲立ちなど多様な使い方がで
1-5

PIC の中ではプログラムがどのように進行するのか23

INDFメモリは実装されていな
いが，間接アドレス指定に使われる．このアドレスを指定すると FSR レジス
タの内容の値をアドレスとするレジスタをアクセスすることができる

レジスタのアドレス 00 〜 7FH
は 7 ビットで表せる．
命令コードの中でレジスタのアドレスが 7 ビット長なので，この 00 〜 7FH までのアドレスしかアクセスで きない．そのため，
四つのバンクに分け，STATUS
レジスタの RP1，
RP0 でバンクを決めることで，すべてがアクセスできるようになっている

このアドレスの汎用レジスタのアクセスは，どのバンクにいてもバンク 0 のア
ドレスになる．
割り込み処理ルーチン内でレジスタの保存など
で便利に使えるこのバンクの切り替えをSTATUSレジスタのRP1，RP0ビットで行う

INDF 00h
TMR0 01h
02h
PCL
STATUS 03h
04h
FSR
PORTA 05h
PORTB 06h
PORTC 07h
PORTD(1) 08h
PORTE(1) 09h
PCLATH 0Ah
INTCON 0Bh
PIR1 0Ch
PIR2 0Dh
TMR1L 0Eh
TMR1H 0Fh
T1CON 10h
TMR2 11h
T2CON 12h
SSPBUF 13h
SSPCON 14h
CCPR1L 15h
CCPR1H 16h
CCP1CON 17h
RCSTA 18h
TXREG 19h
RCREG 1Ah
CCPR2L 1Bh
CCPR2H 1Ch
CCP2CON 1Dh
ADRESH 1Eh
ADCON0 1Fh
20h

100h
180h
INDF 80h
INDF
INDF
101h OPSION_REG 181h
OPTION_REG 81h
TMR0
82h
102h
182h
PCL
PCL
PCL
STATUS 103h STATUS 183h
STATUS 83h
84h
104h
184h
FSR
FSR
FSR
105h
185h
TRISA 85h
PORTB 106h
TRISB 86h
TRISB 186h
107h
187h
TRISC 87h
108h
188h
TRISD(1) 88h
109h
189h
TRISE(1) 89h
PCLATH 10Ah PCLATH 18Ah
PCLATH 8Ah
INTCON 10Bh INTCON 18Bh
INTCON 8Bh
EEDATA 10Ch EECON1 18Ch
PIE1 8Ch
EEADR 10Dh EECON2 18Dh
PIE2 8Dh
EEDATH 10Eh Reserved(2) 18Eh
PCON 8Eh
8Fh
EEADRH 10Fh Reserved(2) 18Fh
110h
110h
190h
111h
191h
SSPCON2 111h
92h
112h
192h
PR2
113h
193h
SSPADD 93h
114h
194h
SSPSTAT 94h
95h
115h
195h
96h
116h
196h
97h 汎用レジスタ 117h 汎用レジスタ 197h
118h
198h
TXSTA 98h
16バイト 119h
16バイト 199h
SPBRG 99h
9Ah
11Ah
19Ah
9Bh
11Bh
19Bh
11Ch
19Ch
CMCON 9Ch
11Dh
19Dh
CVRCON 9Dh
11Eh
19Eh
ADRESL 9Eh
11Fh
19Fh
ADCON1 9Fh
A0h
120h
1A0h

汎用レジスタ

汎用レジスタ

96バイト

80バイト

70h〜
7Fh

70h〜7Fh

バンク0

RP1 RP0
0
0
0
1
1
0
1
1

バンク0
バンク1
バンク2
バンク3

ファイル・
アドレス

アクセスは

7Fh

バンク1

汎用レジスタ

EFh
F0h
FFh

80バイト
アクセスは

70h〜7Fh

アドレスに名前がついている．
この名前は「型名.inc」ファイルに定義されているので，インク
ルードしておけば，利用できる

利用者が自由に使える．
プログラムのループを制御するカウンタとか，
一時的に利用するテンポラリに

汎用レジスタ

16Fh
170h
17Fh

バンク2

80バイト
アクセスは

70h〜7Fh

1EFh
1F0h
1FFh

バンク3

データ・メモリなし．0とリードされる．
注1：このレジスタは28ピン・デバイスにはない．
注2：このレジスタは将来使用する場合がある．0にしておく

図 1-8（2） レジスタ・ファイル
SFR（Special Function Register）と汎用レジスタで構成されていて，汎用レジスタはユーザの定義によりデータ・メモリとして利
用できる．

24

第1章

ワンチップ・マイコン PIC シリーズの概要

演算処理は，Wレジスタ
を中心に行われる

8ビット・リテラル

命令ワードの下位8ビッ
トで指定された値．Wレ
ジスタとのみ処理される

8ビット
8ビット
Wレジスタ
8ビット

8ビット

指定されたレジスタに格納されている8ビットの値が取り込まれる

ALU
8ビット

演算，移動はWレジスタとレジスタ・ファイル中のデータまたはリテラルとの間で行われる．
Wレジスタ以外のレジス
タ間の演算，移動はでき
ない

SFR
および
汎用
レジスタ

d＝ 1

d＝ 0
ALU
（Arithmatic and Logic Unit）
算術・論理演算ユニット．Wレジスタとリテラルあるいはレジスタ・ファイ
ルの各レジスタに格納されている値と，算術演算，論理演算を行う部分

レジスタ・
ファイル

演算結果は，命令の指示に従い，レジスタ・
ファイルのレジスタまたはWレジスタに保存する．命令にdが含まれている場合，
d＝ 0 …W レジスタd＝ 1 …レジスタ・ファイルのレジスタ

図 1-9 演算処理の中心はW レジスタ

きます．

● PIC のミッドレンジの命令は14 ビットで1 ワード
PIC の命令は 1 ワード 12 ビットで 33 命令のものや，今回取り上げるミッドレンジの 1 ワード 14 ビット
で 35 命令のものと，ハイエンドの 18F シリーズのようには 1 ワード 16 ビットで 75 命令のものもあります．
命令の 1 ワードの中には，オペコードとオペランドがあります．オペコードには上位ビットの 3 〜 6 ビ
ット，残りのビットがオペランドといろいろな長さの組み合わせになっています．
オペコードは命令を示し，35 種類の命令ごとにコードが決まっていて，オペランドは，命令の処理の対象となるレジスタやレジスタ中のビット，ジャンプ先のプログラム・メモリのアドレスなどを示します．

1-6 命令の記述方法
PIC の命令の書き方を簡単に説明します．基本的には命令と命令の対象となるオペランドとを記述します．命令によって，オペランドがないもの，一つのもの，二つのものがあります．
命令

オペランド

命令

第 1 オペランド，第 2 オペランド

命令（オペランドなし）

この命令が，ミッドレンジの PIC の場合 35 種あります．オペランドとしては，レジスタまたは，リテラル（バイト・データ，ジャンプ先 11 ビットのアドレス）が第 1 オペランドになります．リテラルがオペランドの場合，第 2 オペランドがありません．レジスタが第 1 オペランドの場合，命令がビット操作命令の場合，第 2 オペランドは該当するビットのアドレスとなります．命令がバイト対象の場合，第 2 オペラ
ンドは処理の結果の格納場所を示し， 0 の場合は W レジスタに， 1 の場合は第 1 オペランドで示した
1-6

命令の記述方法

25