図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic...

39

Transcript of 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic...

Page 1: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.
Page 2: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

「図解 PIC マイコン実習(第 2 版)」

サンプルページ

この本の定価・判型などは,以下の URL からご覧いただけます.

http://www.morikita.co.jp/books/mid/078332

※このサンプルページの内容は,第2版 1刷発行時のものです.

Page 3: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

前付(念).indd 1 2014/09/12 14:36:40

Page 4: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

  i

本書の初版発行から 10年が過ぎましたが,幸いにして多くの読者からご好評を賜りました.その間,増刷の機会に,統合開発ソフトウェアMPLABのバージョンアップに対応するなどの改訂を加えてきました.しかしながら,近年では,PICをとりまく開発環境が大きく変わってきました.たとえば,パソコンのインタフェースの主流は USBとなり,統合開発ソフトウェアは,MPLAB Xへと大きなバージョンアップを遂げました.これらの変化に対応するため,本書の第 2版を発行する運びとなりました.本書で扱っている PIC16F84Aは,現在も工業高校や,高専,大学など多くの教育機関において,PICを学ぶ教材に採用されています.それは,扱いやすい PICであるのと同時に,より高性能な PICを扱うための基礎を学ぶのにたいへん適したアーキテクチャをしているからです.一方で,現在では,より多くの機能を搭載した高性能な PICが,たいへん安価に入手できるようになっています.このため,本書では,PIC16F84Aと互換性の高い PIC16F648Aについての解説を加筆しました.PIC-

16F648Aは,PIC16F84Aよりも高性能な PICですが,より安価に入手できることが多い好都合な PICです.本書の実習環境は,OSにWindows 8.1,統合開発ソフトウェアにMPLAB X,

PICライタ装置に PICkit3を採用しました.また,入手しにくくなった電子部品などを更新し,内蔵タイマを使用するプログラミング実習などについて加筆しました.さらに,第 7章を新設して,マイクロチップテクノロジー社が提供する Cコンパイラ(XC8)を用いた開発についても解説しました.一方で,初版が多くの読者に受け入れられた事実を考慮して,扱うレベルや範囲については初版と同程度としました.本書が,初版と同様に PICをマスターする最初の一歩を踏み出すための入門書としてお役に立つことを心より願っています.最後になりましたが,第 2版発行の機会を与えてくださった森北出版の森北博巳氏,並びに編集でお世話になった加藤義之氏にこの場を借りて厚く御礼申し上げます.

2014年 8月

著  者 

第 2 版  ま え が き

前付(念).indd 1 2014/09/12 14:36:40

Page 5: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

iiii

PIC(ピック)は,1個の小さなパッケージにマイコン制御に必要なすべての機能を収めてあるコンピュータ(マイコン)です.私たちは,その姿を直接見ることはほとんどありませんが,家電製品や自動車など,身の回りの多くの製品の内部にはPICが使われています.

PICは,以前から工業製品には多く使用されていたものの,一般にはあまり馴染みのないマイコンでした.筆者も,マイコン制御では 6809や Z80,H8といったCPUを使用してきました.これらの CPUは,高機能なのですが,初心者が使いこなすのはそう簡単ではありません.また,マイコン制御が必要な分野では,それほど高機能な CPUを要求しない処理もたくさんあるのです.たとえば,ロボットを動かす場合,単にいくつかのモータとセンサを制御するだけでよいなら,Z80やH8といった CPUでなくても,PICで十分に対応できます.

PICは,安価,小型,扱いが簡単なわりに高性能な制御用マイコンです.したがって,用途によっては PICが簡単にその目的を達成してくれます.初心者でも簡単に使い方をマスターできるので,ホビーで電子工作をする方々の中にも,PICに関心を寄せる人が増えています.本書では,初めて PICを学習しようとする方々を対象に,PICの中でも特に扱い

やすい 16F84Aを選び,その原理と使い方をやさしく解説しました.実際に,はんだごてを握って回路を製作しながら,本書を読み進めば,次第にPICのことがわかってくることでしょう.読者の方々が本書によって PIC技術をマスターし,目的の制御を実現されることをお祈りしています.最後になりましたが,本書執筆の機会を与えてくださった森北出版の森北博巳氏,

並びに編集にご尽力をいただいた石田昇司氏,貴重な資料をご提供頂いたマイクロチップ・テクノロジー・ジャパンの中尾真治氏にこの場を借りて厚く御礼申し上げます.

2003年 1月

本書は,2003年 2月に初版を発行して以来,ご好評をいただいておりますが,3

刷を機に,開発ソフトMPLABのバージョン 6.50に対応させました.2004年 5月

著  者 

ま え が き

前付(念).indd 2 2014/09/12 14:36:40

Page 6: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

  iii

第 1 章 マイコン制御の基礎 ……………………………………………………… 1

1.1 マイコンとは ……………………………………………………………………… 2

1.1.1 コンピュータによる情報処理の流れ  2

1.1.2 コンピュータの基本構成  3

1.1.3 CPUの発達  4

1.1.4 各種のコンピュータ  6

1.2 マイコン制御とは ………………………………………………………………… 7

1.2.1 コンピュータを使った制御  7

1.2.2 制御に使うコンピュータ  8

1.3 マイコン制御の例 ………………………………………………………………… 9

1.3.1 あやつり人形どらきゅら  9

1.3.2 マジックピエロ  10

1.3.3 相撲ロボット  12

演習問題 ………………………………………………………………………………… 14

第 2 章 PIC マイコンの基礎 …………………………………………………… 15

2.1 PICとは ………………………………………………………………………… 16

2.1.1 PICの生い立ち  16

2.1.2 PICの特徴  17

2.1.3 PICの種類  18

2.2 PICの構成 ……………………………………………………………………… 20

2.2.1 16F84Aの概要  20

2.2.2 アーキテクチャ  21

2.2.3 16F648Aの概要  22

2.2.4 命令の形式  23

2.2.5 プログラムメモリ  24

2.2.6 Wレジスタ  25

2.2.7 16F84Aのファイルレジスタ  25

2.2.8 特殊レジスタ(SFR)  27

2.2.9 16F648Aのファイルレジスタ  28

2.2.10 間接アドレッシング方式  29

2.2.11 データメモリ(EEPROM)  31

目   次

前付(念).indd 3 2014/09/12 14:36:41

Page 7: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

iv  目   次

2.2.12 スタック  33

2.2.13 タイマ 0  34

2.2.14 ウオッチドッグタイマ(WDT)  36

2.2.15 割込み  37

2.2.16 スリープ  38

2.3 命令の実行 ……………………………………………………………………… 40

2.3.1 命令実行サイクル  40

2.3.2 命令実行の流れ  41

2.3.3 プログラムカウンタ(PC)  42

2.4 PICのプログラム開発 ………………………………………………………… 44

2.4.1 プログラム開発の流れ  44

2.4.2 開発ツール  45

演習問題 ………………………………………………………………………………… 48

第 3 章 マイコンでのデータ表現 ……………………………………………… 51

3.1 2進数 …………………………………………………………………………… 52

3.1.1 2進数と 10進数  52

3.1.2 補 数  54

3.1.3 負数の表現  54

3.2 16進数 …………………………………………………………………………… 56

3.2.1 10進数と 16進数  56

3.2.2 2進数と 16進数  57

3.3 ディジタル回路 ………………………………………………………………… 59

3.3.1 基本ゲート回路  59

3.3.2 算術演算と論理演算  59

3.3.3 マスク操作  60

3.3.4 シフト操作とローテイト操作  61

演習問題 ………………………………………………………………………………… 62

第 4 章 アセンブラ言語 …………………………………………………………… 63

4.1 PICのアセンブラ言語 ………………………………………………………… 64

4.1.1 マシン語とアセンブラ言語  64

4.1.2 命令の種類  65

4.1.3 コンフィグレーションビット  66

4.2 プログラムの書き方 …………………………………………………………… 68

4.2.1 アセンブラ言語の書式  68

4.2.2 プログラムの基本スタイル  69

4.3 PICの命令 ……………………………………………………………………… 71

4.3.1 命令のフォーマット  71

前付(念).indd 4 2014/09/12 14:36:41

Page 8: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

目   次  v

4.3.2 16F84Aの全命令  73

演習問題 ………………………………………………………………………………… 110

第 5 章 プログラミング実習 …………………………………………………… 111

5.1 LEDの制御 ……………………………………………………………………… 112

5.1.1 LED実習回路の製作  112

5.1.2 LED点灯プログラム  116

5.1.3 LED点滅プログラム  119

5.1.4 光が流れるプログラム  124

5.1.5 スイッチ入力による LEDの制御  128

5.2 各種の制御 ……………………………………………………………………… 131

5.2.1 リレーの制御  131

5.2.2 DCモータの制御  134

5.2.3 パルスモータの制御  138

5.3 割込み制御 ……………………………………………………………………… 149

5.3.1 割込みプログラム  149

5.3.2 電子サイコロ  152

5.3.3 タイマ割込みを使用した LEDの点滅制御  156

演習問題 ………………………………………………………………………………… 159

第 6 章 MPLAB X の使い方 …………………………………………………… 161

6.1 MPLAB Xの基本操作 ………………………………………………………… 162

6.1.1 インストールと初期設定  162

6.1.2 プログラム開発  165

6.2 MPLAB Xの応用 ……………………………………………………………… 175

6.2.1 デバッグモード  175

6.2.2 ブレークポイントの設定  176

6.2.3 各種メモリの表示  177

6.2.4 ストップウオッチ  179

演習問題 ………………………………………………………………………………… 182

第 7 章 C によるプログラム実習 ……………………………………………… 183

7.1 PICプログラム用 C言語 ……………………………………………………… 184

7.1.1 Cコンパイラの種類  184

7.1.2 XC8コンパイラの入手  185

7.2 Cによるプログラム開発 ……………………………………………………… 186

7.2.1 Cを用いた開発手順  186

7.2.2 Cプログラミング  190

演習問題 ………………………………………………………………………………… 198

前付(念).indd 5 2014/09/12 14:36:41

Page 9: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

vi  目   次

演習問題解答 …………………………………………………………………………… 199

付  録 ………………………………………………………………………………… 200

発展問題  200

PIC情報の収集  200

LED実習回路の製作  201

プログラミングの際によく使う一覧表  204

参考文献 ………………………………………………………………………………… 206

索  引 ………………………………………………………………………………… 207

前付(念).indd 6 2014/09/12 14:36:41

Page 10: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.
Page 11: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

20

ここでは,PICの基本形である 16F84Aを取り上げて,その構成を学習しましょう.

2.2.1 16F84Aの概要

図 2.5( a)に 16F84Aの外観,図( b)にピン配置,表 2.2にピンの説明を示します.

(b)ピン配置

・1RA2 18 RA117 RA016 OSC1/CLKIN1514 VDD13 RB712 RB611 RB510 RB4

2RA33RA4/T0CKI4MCLR5VSS6RB0/INT7RB18RB29RB3

PDIP,SOIC

PIC16F84A

OSC2/CLKOUT

( a)外観

PDIP 型 SOIC型

図 2.5 16F84A

表 2.2 16F84Aのピンの説明

ピン番号 名 称 説 明1 RA2 双方向 I/Oポート(ポート Aの 2ビット目)2 RA3 双方向 I/Oポート(ポート Aの 3ビット目)3 RA4/T0CKI 双方向 I/Oポート(ポート Aの 4ビット目),タイマクロック入力4 MCLR リセット5 VSS 接地(電源のマイナス端子へ)6 RB0/INT 双方向 I/Oポート(ポート Bの 0ビット目),外部割込み7 RB1 双方向 I/Oポート(ポート Bの 1ビット目)8 RB2 双方向 I/Oポート(ポート Bの 2ビット目)9 RB3 双方向 I/Oポート(ポート Bの 3ビット目)10 RB4 双方向 I/Oポート(ポート Bの 4ビット目)11 RB5 双方向 I/Oポート(ポート Bの 5ビット目)12 RB6 双方向 I/Oポート(ポート Bの 6ビット目)13 RB7 双方向 I/Oポート(ポート Bの 7ビット目)14 VDD 電源のプラス端子へ15 OSC2/CLKOUT クロック端子 2

16 OSC1/CLKIN クロック端子 1

17 RA0 双方向 I/Oポート(ポート Aの 0ビット目)18 RA1 双方向 I/Oポート(ポート Aの 1ビット目)

2.2 PICの構成

第二章(念).indd 20 2014/09/10 16:49:21

Page 12: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

2.2 PIC の構成  21

図 2.6に示すように,16F84Aは,入出力を行う 2個のポート A,Bをもつマイコンです.ポートのピン数は,ポート Aが 5本,ポート Bが 8本の計 13本で,ピンごとに入力モードまたは出力モードの設定が可能です.ポートのピンには,およそ20 mAの電流を流すことができますので,LEDの点灯程度ならば,特別なドライブ回路は必要ありません.

電源5VVDD,VSS

クロックOSC1,OSC2

リセットMCLR

ポートARA0~4

ポートBRB0~7

ひとつのピンで最大 20mAの直接ドライブ可能!

入出力

PIC16F84A

図 2.6 16F84Aの概要

2.2.2 アーキテクチャ

図 2.7に,16F84Aのアーキテクチャを示します.14 ビット

1K

13

14

5

8

OSC1,OSC2 MCLR VDD,VSS

13

8

68

7

7

8

FSR

STATUS

ALU

W

RA4/T0CKI

RA0~4

RB0~7

プログラムメモリ(フラッシュROM)

プログラムバス命令レジスタ

プログラムカウンタ

スタック

直接アドレス

ファイルレジスタ(RAM)

アドレス選択

間接アドレス

デコード,制御

タイミング発生

パワーアップタイマ

クロックスタートアップタイマ

パワーオンリセット

ウオッチドッグタイマ

選択

タイマ

データメモリ(EEPROM)

I/Oポート

8レベル

データバス

64

図 2.7 16F84Aのアーキテクチャ

第二章(念).indd 21 2014/09/10 16:49:22

Page 13: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

22  第 2 章 PIC マイコンの基礎

第 1章で学んだノイマン型コンピュータでは,プログラム(命令)とデータが同じメモリ(主記憶装置)上に共存していました.したがって,CPUとメモリをつなぐ転送路(バス)においてプログラムとデータの転送が競合(混雑)してしまいます.これは,フォン・ノイマンのボトルネックとよばれ,コンピュータ全体の性能を左右してしまうほどの欠点なのです(図 2.8( a)).

( a)ノイマン型 ( b)ハーバード型

プログラム バス

プログラムメモリ

データメモリ

CPU

データバス

プログラム

データフォン・ノイマンのボトルネック

メモリ

バス

CPU

混雑

図 2.8 フォンノイマンのボトルネック

しかし,PICでは,プログラムを格納するメモリ(プログラムメモリ)とデータを格納するメモリ(データメモリ)が独立しています.このような構造を,ハーバードアーキテクチャとよびます.これにより,プログラムバスとデータバスを個別に用意できるので,命令長(ビット数)とデータ長を別々に設定できる利点があります.16F84Aでは,命令長は 14ビット,データ長は 8ビットで設計されています.コンピュータのアーキテクチャを設計する際には,次の二つの考え方があります.

( 1 )RISC (Reduced Instruction Set Computer)命令を基本的なものだけに限定して,ハードウェアを簡単化します.高速化が可能

になりますが,高度な処理を行う場合には,少ない命令を組み合わせてプログラムを作成することが困難になってきます.

( 2 )CISC(Complex Instruction Set Computer)高度な処理にも柔軟に対応できるように,多くの命令を用意します.ハードウェア

が複雑になってしまい,高速化しにくいのが欠点です.PICは,RISCの考え方によって設計されたコンピュータです.高速化のために,後で学ぶパイプライン処理方式を採用しています.

2.2.3 16F648Aの概要

前に概要を説明した 16F84Aと同じ 18ピンのミッドレンジ PICは,新製品が次々と発売されています.本書では,16F84Aの使用を基本としますが,ここでは一例として,より高性能な 16F648Aを紹介します.16F648Aは,プログラムメモリが

第二章(念).indd 22 2014/09/10 16:49:22

Page 14: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

2.2 PIC の構成  23

4 KB,SRAMが 256バイトと 16F84Aに比べて大容量であり,3系統のタイマを備えるなど,機能も充実しています.さらに,動作電圧も 2.0~5.5 Vの範囲で動作します.RA5~RA7も用意されています.価格は,16F84Aと同程度ですが,より安く購入できることもめずらしくありません.ピン配置は基本的に 16F84Aと同じですが,汎用レジスタのアドレスなどが異なるため,完全な互換性はありませんので注意が必要です.しかし,若干の変更を行えば 16F84Aと同じように使用できます.図 2.9に16F648Aの外観とピン配置を示します.

(b)ピン配置( a)外観

・1RA2/AN2/VREF 18 RA1/AN1

17 RA0/AN0

16 RA7/OSC1/CLKIN

15 RA6/OSC2/CLKOUT

14 VDD

13 RB7/T1OSI/PGD

12 RB6/T1OSO/T1CKI/PGC

11 RB5

10 RB4/PGM

2RA3/AN3/CMP1

3RA4/T0CKI/CMP2

4RA5/MCLR/VPP

5VSS

6RB0/INT

7RB1/RX/DT

8RB2/TX/CK

9RB3/CCP1

PDIP,SOIC

PIC16F648A

図 2.9 16F648A

2.2.4 命令の形式

プログラムメモリに格納しておく命令は,図 2.10に示すような形式をしています.全長は 14ビットで,命令を記述する上位のオペコード部と,アドレスや値を記述する下位のオペランド部から構成されています.

ビット位置,レジスタ指定

アドレス,値

オペコード

命令

14ビット(1ワード)

オペランド

図 2.10 命令の形式

命令の種類によって,オペコード部は 3~6ビット,オペランド部は 8~11ビットになります.また,命令によってはオペランド部の上位ビットに,ビット位置や転送先レジスタの指定を記述することがあります.命令長 14ビットのことを 1ワード(Word)とよびます.

第二章(念).indd 23 2014/09/10 16:49:23

Page 15: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

24  第 2 章 PIC マイコンの基礎

2.2.5 プログラムメモリ

プログラムメモリは,プログラムを格納しておく 14ビット幅のメモリです.

16F84Aでは,プログラムメモリの大きさは,1 Kワードですから,最大 1 Kワード=1024個までの命令を使ってプログラムを作成することができます.その際のアドレスは,16進数で 0番地~3FFH番地となります(図 2.11).16F648Aのプログラムメモリは 4 Kワード,アドレスは 0番地~FFFH番地です.

14 ビット

リセットベクタ

割込みベクタ〜

0000

0004

03FF

電源投入,リセット時

割込み発生時

アドレス

1Kワード〜

図 2.11 プログラムメモリ

PICに電源を投入すると,プログラムメモリの 0番地に入っている命令を取り出して実行します.これは,PICにリセット信号を入力(MCLRピンをローレベルに)しても同じです.したがって,最初に実行すべき命令は,必ず 0番地に格納しておく必要があります.割込み処理を行う場合には,割込み信号の入力によって,プログラムメモリの 4番

地にある命令が実行されます.しかし,割込み処理を使わない場合には,4番地を特別に意識する必要はありません.プログラムメモリのアドレスは,プログラムカウンタ(PC)によって指定されます.

PCは,13ビットの長さなので,この点からは 213=8192=8 Kワードまでのプログラムメモリサイズが扱えます.しかし,GOTOや CALLなどのジャンプ命令のアドレス指定用のオペランド部は 11ビットなので,この点からは 211=2 Kワードまでのプログラムメモリしか直接アクセスすることはできません.したがって,8 Kワードの領域を 4個のページに分割して,ページを切り替えることで,最大 8 Kワードのプログラムメモリを扱えるようにした PICがあります(図 2.12).ただし,16F84Aについては,実装しているプログラムメモリサイズが 1 Kワードなので,ページの概念は必要ありません.

16F84Aでは,プログラムメモリに,フラッシュメモリとよばれる ROMを採用しています.フラッシュメモリは,ブロック単位(たとえば,512 B,1 KB,4 KBなど)でデータの書込みを行うメモリで,書込みには ROMライタ装置を使用します.プログラムを書き込んだ後は,電源を切っても記憶内容を保持します.記憶内容の消去も電気的に行えます.

第二章(念).indd 24 2014/09/10 16:49:23

Page 16: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

2.2 PIC の構成  25

ページ 0

ページ 1

ページ 2

ページ 3

アドレス

8K

2K

2K

2K

2K

07FF0800

0FFF1000

17FF1800

1FFF

0000

図 2.12 ページの概念

ジャンプ命令オペランド部 11ビット211=2KPC:13ビット

213=8K

他のレジスタ(2ビット)を使って

切り替える

2.2.6 Wレジスタ

Wレジスタ(Working Register)は,ALU(算術論理演算装置)の近くにある 8ビットのレジスタです.レジスタとは,データを格納しておく小規模ながら高速なメモリのことで,置数器ともよばれます.Wレジスタは,演算や転送命令を実行する際に,データを一時的に保管しておくなど,ALUと連携しながら,重要な働きをします.図 2.13

に,例として,2と 6の加算を行う命令を実行した場合の動作を示します.Wレジスタは,Z80CPUの Aレジスタ(アキュムレータ)に相当します.

6 8

6

2①

2+6の計算例ALU

Wレジスタ

図 2.13 ALUと Wレジスタ

2.2.7 16F84Aのファイルレジスタ

ファイルレジスタは,データを格納する 8ビットの高速なメモリです.このメモリのアドレスは,アドレス選択装置から出ている 7ビットのアドレスバスで指定されますので,最大 27=128領域,16進数では,0番地~7FH番地までになります.しかし,16F84Aでは,4FH番地までしか実装されていません(図 2.14).

第二章(念).indd 25 2014/09/10 16:49:24

Page 17: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

26  第 2 章 PIC マイコンの基礎

汎用レジスタ

SFR

8ビット

特殊機能レジスタ群

(68)10 個

実装なし7F

504F

0C0B00

図 2.14 ファイルレジスタ

また,上位 0番地~0BH番地までの 12個の領域は,SFR(Special Function Reg-

ister)とよばれる特殊機能をもつレジスタに割り当てられています.したがって,ユーザが汎用レジスタとして使用できるのは,0CH番地~4FH番地までの 68個の領域です.ファイルレジスタは,バンクという概念を使って切り替えることで,より大きなサ

イズのメモリとして扱うことができます.ページと同様に,他のレジスタ 2ビットを使用して最大 4個のバンク,つまり,128×4=512個の領域を扱うことができます.ただし,16F84Aについては,2個のバンクを切り替えるようになっています(図 2.15).バンクの切替えは,SFRの中にある STATUS(ステータス)レジスタの RP0(5ビッ

ト目)を 0か 1に設定することで行います.これにより,バンク 0では 0番地~4FH番地,バンク 1では 80H番地~CFH番

アドレス アドレスバンク 0 バンク 100

0B0C

0A090807060504030201

80

8C8B8A898887868584838281

INDFINDF

TMR0

PCL PCL

STATUS

FSR FSR

PORTA

PORTB

EEDATA

EEADR

PCLATH PCLATH

INTCON INTCON

OPTION_REG

STATUS

TRISA

TRISB

EECON1

EECON2

未使用 未使用

汎用レジスタ68個

CF4F

(        )バンク 0と同じ汎用レジスタ

SFR

図 2.15 16F84Aのファイルレジスタ

第二章(念).indd 26 2014/09/10 16:49:24

Page 18: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

2.2 PIC の構成  27

地までが有効なアドレスになります.ただし,バンク 0とバンク 1で同じ名前の SFR

については,同一のレジスタ(バンク 0)を参照することになります.同様に,汎用レジスタについてもバンク 1専用のレジスタはありません.バンク 0の汎用レジスタが,バンク 1にも割り当てられています.ファイルレジスタには,RAMが使用されていますので,電源を切ると記憶内容は消失してしまいます.ファイルレジスタのことを,データメモリとよぶことがありますが,後で学ぶ EEPROMを使用したデータメモリと混同してしまう危険がありますので,本書ではファイルレジスタとデータメモリを区別することにします.

2.2.8 特殊レジスタ(SFR)

ファイルレジスタの上位 0~0BH番地と 80H~8BH番地までは,SFRとよばれる特殊機能をもつレジスタが存在します.表 2.3(次ページ)に,16F84Aの SFRの一覧を示します.SFRは,PICの各種設定などを行う重要な働きをもっています.たとえば,ポート

A,Bを入力と出力のどちらにするか,割込み処理を行うか否か,どのバンクを参照するかなどの設定には,SFRを使用します.実際の設定は,SFRの特定ビットを 0か1にすることによって指定するようになっています.たとえば,SFRの 86H番地にある TRISBレジスタの各ビットは,ポートB(16F84A

のピン番号 6~13番)に対応していて,TRISBレジスタに「0」を書き込んだビットに対応するピンは出力用に,「1」を書き込んだピンは入力用に設定されます(図 2.16).

SFR 86H TRISBRB7 RB6 RB1RB2RB4RB5 RB0RB3

ビット7 ビット 3 ビット 0ビット 4 ビット1ビット2ビット5ビット 6

16F84A

13

101112

9876

バンク 1

0:出力ピン1:入力ピンとなる

図 2.16 TRISBレジスタによるポートBの設定

第二章(念).indd 27 2014/09/10 16:49:25

Page 19: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

28  第 2 章 PIC マイコンの基礎

表 2.3 16F84Aの SFR一覧(204 ページにも掲載)

アドレス 名 称 ビット 7 ビット 6 ビット 5 ビット 4 ビット 3 ビット 2 ビット 1 ビット 0

バンク 0

00H INDF FSRの内容のアドレスのデータメモリ(物理的には存在しない)01H TMR0 8ビットリアルタイム・クロック/カウンタ02H PCL PCの下位 8ビット03H STATUS IRP RP1 RP0 TO PD Z DC C

04H FSR 間接データメモリアドレスポインタ

05H PORTA - - -RA4/

TOCKIRA3 RA2 RA1 RA0

06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT

07H 使用しない,「0」としてリードされる08H EEDATA EEPROMデータレジスタ09H EEADR EEPROMアドレスレジスタ0AH PCLATH - - - PCの上位 5ビット0BH INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

バンク 1

80H INDF FSRの内容のアドレスのデータメモリ(物理的には存在しない)

81HOPTION_REG

RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

82H PCL PCの下位 8ビット83H STATUS IRP RP1 RP0 TO PD Z DC C

84H FSR 間接データメモリアドレスポインタ85H TRISA - - - PORTAデータ入出力設定レジスタ86H TRISB PORTBデータ入出力設定レジスタ87H 使用しない,「0」としてリードされる88H EECON1 - - - EEIF WRERR WREN WR RD

89H EECON2 EEPROM制御レジスタ 2(物理的には存在しない)8AH PCLATH - - - PCの上位 5ビットへの書き込みバッファ8BH INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

2.2.9 16F648Aのファイルレジスタ

参考のため,図 2.17に 16F648Aのファイルレジスタの構成を示します.16F648A

は,バンクが 0~3まであります.たとえば,バンク 0の汎用レジスタは,アドレス20H番地からですから,16F84A用のプログラムを動作させる場合には注意が必要です.

第二章(念).indd 28 2014/09/10 16:49:25

Page 20: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

2.2 PIC の構成  29

バンク 0 アドレス000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20

6F70

7F

INDF

TMR0

PCL

STATUS

FSR

PORTA

PORTB

PCLATH

INTCON

TMR1L

TMR1H

T1CON

TMR2

T2CON

CCPR1L

CCPR1H

CCP1CON

RCSTA

TXREG

RCREG

CMCON

PIR1

汎用レジスタ80個

16 個

バンク 1 アドレス808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0

EFF0

FF

INDF

OPTION

PCL

STATUS

FSR

TRISA

TRISB

PCLATH

INTCON

PCON

PR2

TXSTA

SPBRG

EEDATA

EEADR

EECON2

VRCON

PIE1

汎用レジスタ80個

バンク 0と同じ

EECON1

バンク 2 アドレス10010110210310410510610710810910A10B10C10D10E10F

11F120

16F170

17F

INDF

TMR0

PCL

STATUS

FSR

PORTB

PCLATH

INTCON

汎用レジスタ80個

バンク 3 アドレス18018118218318418518618718818918A18B18C18D18E18F

1EF1F0

1FF

INDF

OPTION

PCL

STATUS

FSR

TRISB

PCLATH

INTCON

バンク 0と同じ

バンク 0と同じ

図 2.17 16F648Aのファイルレジスタ(空欄は未使用)

2.2.10 間接アドレッシング方式

メモリのアドレスを指定して直接的に内容をアクセスするのは,直接アドレッシング方式とよばれています.これに対して,ある操作によって間接的にメモリをアクセスするのが間接アドレッシング方式です(図 2.18).

第二章(念).indd 29 2014/09/10 16:49:25

Page 21: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

112

5.1 LEDの制御番号!!!!

0 1 2

ここで学ぶことは,マイコン制御の基本となります.スイッチから入力データを取り込んで,LEDを自在に点滅できるように実習してください.

5.1.1 LED実習回路の製作

図 5.1~ 5.3に,LED実習回路のブロック図,回路図,外観を示します.実際の製作にあたっては,付録(201ページ)を参考にしてください.

発振

電源リセット

出力入力スイッチ

  ×2

5 V

セラロック(10 MHZ)

RB0~ 7

MCLRVDD

OSC1~ 2

RA0~ 1

16F84A

PIC

LED×8

図 5.1 LED実習用回路のブロック図

図 5.2 LED実習回路図

390Ω×8

セラロック(10 MHz)

RB4

RB5

RB6

RB7

RA0

RA1

OSC1

OSC2

VDD

RA2

RA3

RA4

MCLR

GND

RB0

RB1

RB2

RB398

7654

321

PIC16F84A

SW0 SW1

18

1716

15

1413121110

10 kΩ×2

LED7LED6LED5LED4LED3LED2LED1LED0

78L05

123

1:出力2:GND3:入力 123

1:出力2:GND3:出力

セラロック電源SW 3 1

278L05

47µF 47µF0.1µF

+5 V

++9 V

第五章(念).indd 112 2014/09/11 11:31:25

Page 22: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

5.1 LED の制御  113

図 5.3 実習回路の外観

各部の説明(1)電源回路PICは 5 Vで動作します.ここでは,3端子レギュレータ IC(78L05)を使用して,

9 Vの乾電池(006P)から 5 Vを得る回路を構成しました.78L05は,7~ 20 Vの入力電圧から 5 V(Max 100 mA)を得ることができます(図 5.4).

図 5.4 3端子レギュレータ IC

( a)78L05(Max 100mA) ( b)7805(Max 1A)

(2)発振回路PICは,内部に RC発振回路を内蔵しており,簡単にクロック信号を作ることができます.しかしここでは,安定度を向上させるために,セラロックとよばれる村田製作所の外付け型のセラミック振動子(10 MHz)を使いました(図 5.5( a)).この振動子は,コンデンサを内蔵しており,3本ピンの真ん中をグランドに接続します.さらに発振の安定度を上げたい場合には,水晶振動子を用います(図 5.5( b)).水晶振動子を使用する場合には,セラロックと同様の回路構成で,2個のコンデンサの値を 20 pF程度にするとよいでしょう.

第五章(念).indd 113 2014/09/11 11:31:26

Page 23: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

114  第 5 章 プログラミング実習

図 5.5 外付け振動子

( a)セラロック ( b)水晶振動子

(3)リセット回路PICは,電源を投入するとプログラムメモリの 0番地から実行を開始します.また,

電源投入後に,リセット信号を入力しても,0番地から実行を始めます.リセット信号は,PICの MCLRピンに入力(グランドに接続)するとイネーブル(有効)となります.ところで,マイコンに電源を投入した瞬間に電圧 VDDが,加えた 5 Vになるわけではありません.0 Vから 5 Vになるまで立上りの時間を必要とします.したがって,誤動作を防ぐために,電源電圧が PIC(16F84A)の最低動作電圧 4.5 Vに達するまでのあいだには,PICをリセットしておくことが必要です(図 5.6( a)).このためのリセット回路には,図 5.6( b)に示す遅延回路がよく使われます.しかし,実習回路では,リセット回路を省略し,MCLRピンを VDDライン(+5 V)に接続しました.

図 5.6 リセット

( a)電源電圧の立上り (b)リセット回路

5 V4.5 V

0 V

t

スイッチON  規定電圧

リセットしておく

+ 5 V

10 kΩ

10µF

1 kΩ

1S1588

MCLR+

リセット SW

(4)入力回路入力回路は,ポートAに 2個のスナップスイッチを用意しました.スイッチONで,

RA0と RA1ピンに信号“1”(+5 V)を入力します.信号入力を行う場合には,入力ピンがハイインピーダンスの状態にならないように注意する必要があります.図 5.7

( a)に示す回路では.スイッチ ONで“1”がピン Xに入力されますが,スイッチOFFでは,どこにも接続していない(ハイインピーダンス)状態となってしまいます.このような状態を避けるために,今回はプルダウン抵抗を接続して,スイッチがOFFのときには,入力ピンへの信号が“0”となるようにしてあります(図 5.7( b)).

第五章(念).indd 114 2014/09/11 11:31:28

Page 24: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

5.1 LED の制御  115

図 5.7 スイッチ入力回路

( a)よくない回路例 (b)正しい回路例

+ 5 V + 5 V

ピン X ピン X

プルダウン抵抗10 kΩ

(5)出力回路出力回路は,ポート Bに 8個の LED(発光ダイオード)を接続しました.LED

と直列につながっている抵抗は,電流制御用です.LEDでの電圧降下は,およそ2 Vですから,この抵抗には,電源電圧(5 V)-LEDでの電圧降下(2 V)=3 Vの電圧がかかります.一方,LEDはおよそ 10 mAの電流を流せば十分な輝度で発光します.ここでは,LEDにおよそ 8 mAの電流を流すことを想定して,抵抗値を 3 V

÷8 mA=375≒390 Ωとしました(図 5.8).

図 5.8 電流制御用抵抗

5 V(VDD)

3 V

R(Ω)

=_(Ω)R 3I(A)I

2 V

PICでは,1本の入出力ピンにおよそ 20 mAまでの電流を流すことができます.したがって,LED程度なら,ドライブ回路なしで直接接続することが可能です.この実習回路では,プログラムを書き込んだ PICを何度も装着・脱着しますので,

ICソケットが必要となります.ここでは,レバー操作で簡単に PICを取り外しできる TEXTOOLとよばれるソケットを使用しました.このソケットは,たいへん便利ですが,高価なので予算に応じて採用してください(図 5.9).

図 5.9 PICの 18ピンソケット

( a)TEXTOOL(ゼロプレッシャ)型 (b)通常型

第五章(念).indd 115 2014/09/11 11:31:29

Page 25: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

116  第 5 章 プログラミング実習

5.1.2 LED点灯プログラム

初めは,8個の LEDを点灯する信号出力用のプログラムを作成しましょう.図 5.10にフローチャート,リスト 5.1にプログラムを示します.点灯データは,疑似命令 EQUで LEDD=55Hと設定しています.ポートを入力,出力のどちらにするのかは,SFR(特殊レジスタ)の 85H(ポート A用 TRISAレジスタ),86H(ポート B用 TRISBレジスタ)で設定します.これらのレジスタのピン番号に対応するビットに“0”を書き込めば出力用,“1”を書き込めば入力用ピンに設定できます.このプログラムでは,TRISB

レジスタのすべてのビットをクリア(CLRF命令)して出力ピンとしています.TRISBレジスタは,ファイルレジスタのバンク 1

側にありますので,SFRの STATUSレジスタ RP0(インクルードファイルで,5ビット目と記述してある)に“1”を設定(BSF命令)することでバンク 1を選択しています.

リスト5.1  LED点灯プログラム1

; *******************************************************

; リスト 5.1

; LED点灯プログラム 1

; *******************************************************

LIST P=PIC16F84A ; 使用する PICを指定 INCLUDE "P16F84A.INC" ; 読み込む設定ファイルを指定; *******************************************************

LEDD EQU 55H ; LED点灯データの設定; *******************************************************

ORG 0 ; プログラムを格納する先頭アドレス

BSF STATUS,RP0 ; バンク 1を選択 CLRF TRISB ; ポート Bをすべて出力モードに設定 BCF STATUS,RP0 ; バンク 0を選択 CLRF PORTB ; ポート Bを 0にクリア(LED消灯) MOVLW LEDD ; 点灯データを Wレジスタにセット MOVWF PORTB ; 点灯データをポート Bに出力WAIT GOTO WAIT ; 待機

END ; プログラムの終わり

データを出力する POPTBレジスタは,ファイルレジスタのバンク 0側にありますので,再びバンクの切替えを行ってから,点灯データ LEDDを Wレジスタ経由でポート Bから出力します(図 5.11).

図 5.10 フローチャート

スタート

インクルードファイルの設定

点灯データ55H→LEDD

バンク 1ポートB出力モード

バンク 000H→ポートB

待機

LISTINCLUDE

EQU

BSFCLRF

MOVLWMOVWF

LEDD→WW→ポートB

BCFCLRF

第五章(念).indd 116 2014/09/11 11:31:29

Page 26: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

5.1 LED の制御  117

図 5.11 16F84AのポートBのモード設定とデータ転送

バンク 0 バンク 1

STATUS

PORTAPORTB

TRISATRISB

0300

0605

0B0C

*(1F)

(7F)

(20)

4F

80

8586

8B(9F)8C(A0)

CF

W

RB0

RB7

STATUS レジスタ

RP00:バンク 0

1:バンク 1

SFR

汎用レジスタ

入力か出力かを指定

ポートB入力 /出力

データ

切替

プログラムメモリ

〜 〜

〜 〜

*( )は,16F648A

終わりに GOTO命令を使って,PICを待機状態にしています.プログラムを記述したら,アセンブルを行い,PICライタ装置を用いて PICに書

き込みます.書込み時には,コンフィグレーションビットを,FOSC(OSC)を「HS」,WDTE(WDT)を「OFF」,PWRTEを「ON」,CPを「OFF」と指定してください(67ページ参照).プログラムの書込みが終われば,PICを実習回路に装着して動作を確認します.

点灯データが 55Hなので,LEDが図 5.12のように点灯すれば成功です.

図 5.12 LEDD= 55Hのときの点灯

B= 55H0 1 0 1 0 1 0 1

消灯点灯

たとえば,すべてのLEDを点灯させるデータは 0FFHです.このように,アルファベットで始まる 16進数の先頭には 0を記述することに注意してください.

練習問題5.1  リスト 1で,点灯データ LEDDの値を変えて動作を確認しなさい.

第五章(念).indd 117 2014/09/11 11:31:29

Page 27: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.
Page 28: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

  149

PIC16F84Aには,4種類の割込みモードがあります.どのモードも基本的な制御の流れは同じです.ここでは,INT(RB0)ピンによる割込みについて実習しましょう.

5.3.1 割込みプログラム

割込みとは,実行中の処理 Aを中断して,他の処理 Bを行った後,もとの処理 A

の実行に戻る手法です(37ページ参照).PICでは,プログラムメモリの 04H番地が割込みベクタです.割込み信号が入力されると PC(プログラムカウンタ)は 04H

番地を示し,そこに格納されている命令を実行します.割込み処理からの回復には,RETFIE命令を用います.図 5.55に,割込みを使用する場合のプログラム実行の流れを示します.PICに電源を投入すると,プログラムメモリ 00H番地(リセットベクタ)から命令の実行を開始します.割込み信号がないときは,そのまま 04H番地(割込みベクタ)まで実行が進まないように,GOTO命令を用いて,割込み処理プログラムをジャンプします.図 5.56に,割込み制御を行う場合のプログラム記述の手順を示します.

割込み発生!

割込みから戻る

図 5.55 割込みを使用するプログラムの流れ

リセットベクタ

割込みベクタ

アドレスプログラムメモリ

~~ ~~

3FF

04

00

RETFIE

GOTO命令で割込み処理をジャンプ

5.3 割込み制御

第五章(念).indd 149 2014/09/11 11:31:34

Page 29: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

150  第 5 章 プログラミング実習

図 5.56 割込みプログラム記述の手順

(9)

(8)

(7)

(6)

(5)

(4)

(3)

(2)

(1) 割込みモードの設定

割込みフラグの回復INTCON (T0IF,INTF,RBIF)

割込み禁止

割込み処理

割込みから戻る

割込み許可

Wレジスタ,STATUS (Z,DC,C)などの待避

Wレジスタ,STATUS(Z,DC,C)などの回復

RETFIE

割込みが発生すると,自動的に実行される

割込みベクタヘジャンプ(04H番地)

割込みフラグの変化INTCON (T0IF,INTF,RBIF)

プログラム記述の手順① 割込みモードの設定プログラムに,許可する割込みの種類と割込み信号のエッジ設定を記述します.

許可する割込みの種類は INTCONレジスタで設定します.たとえば,INT(RB0)ピンによる割込みを許可する場合には,INTCONレジスタに 90 Hを書き込みます(図 5.57).

図 5.57 許可する割込みの種類の設定

INTCON0BH

1

1

10

0:禁止1:許可

0 0 0 000 0

0 0 0 0 0

RB0/INTピンによる割込み

90H:許可

10H:禁止

すべての割込み

ビット 7 ビット 6 ビット 5 ビット 4 ビット 3 ビット 2 ビット 1 ビット 0

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

割込み信号のエッジ設定は,OPTION_REGレジスタを用いて行います.エッジ設定とは,割込み信号を有効にするタイミングを,信号の立上り時か立下り時か

第五章(念).indd 150 2014/09/11 11:31:34

Page 30: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

5.3 割込み制御  151

に指定することです.たとえば,立上りエッジを指定する場合には,OPTION_

REGレジスタの 6ビット目に“1”を書き込みます(図 5.58).

ビット 7 ビット 6 ビット 5 ビット 4 ビット 3 ビット 2 ビット 1 ビット 0

図 5.58 割込み信号のエッジ設定

RBPUOPTION_REG81H

“ 1”

“ 0” t

割込み信号のエッジ

INTEDG T0CS T0SE PSA PS2 PS1 PS0

0:立下り1:立上り

立上り 立下り

② 割込みフラグの変化,割込みベクタへジャンプ有効な割込み信号が入力された場合,PICは割込みフラグを設定して 04H番

地へジャンプします.たとえば,INT(RB0)ピンによる割込み信号が有効になった場合には,INTCONレジスタの 1ビット目 INTFが“1”になります.これは,プログラムで“0”にリセットしないと次の割込みを受け付けることはできません(37ページ図 2.29参照).③ Wレジスタ,STATUS(Z,DC,C)などの待避割込み処理のプログラムで,Wレジスタやフラグを使用すると,それらのデー

タが変化してしまいます.それで,割込みから戻ったときに,もとの内容に回復できるようにデータを待避しておきます.④ 割込み禁止割込み処理の途中で,次の割込みを受け付けないように,割込みを禁止してお

きます.⑤ 割込み処理必要な割込み処理を記述します.⑥ 割込みフラグの回復次の割込みを受け付けられるように,INTCONレジスタの割込みフラグをリセッ

トします.⑦ 割込み許可次の割込みを許可します.この設定と⑥割込みフラグの回復は,どちらも

INTCONレジスタに対して行いますので,同時に設定することができます.⑧ Wレジスタ,STATUS(Z(DC(C(などの回復③で待避してあったデータを回復します.⑨ 割込みから戻るRETFIE命令を使用して割込みから戻ります.戻った後は,次の割込み信号を

監視しながらもとの処理を再開します.

第五章(念).indd 151 2014/09/11 11:31:34

Page 31: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

152  第 5 章 プログラミング実習

5.3.2 電子サイコロ

INT(RB0)ピンによる割込みモードを使用して電子サイコロプログラムを作成しましょう.サイコロの目と同じように 7個の LEDを配置して 1~ 6までの目を発光させます.プログラムでは,6種類の発光データを順次 Wレジスタに格納する処理を繰り返し

ます.そして,割込み信号が入力された時点で,WレジスタのデータをポートB(LED)に出力します.発光データは高速で変化していますので,人がデータを予想することは困難ですから,ランダムな目が出ると考えてよいでしょう.図 5.59に割込み制御実習回路の回路図を,図 5.60に外観を示します.割込み信号はポート Bの RB0/INTに接続した押しボタンスイッチから取り込みます.サイコロの目 LEDはポート Bの RB1~ 7に接続してあります.

図 5.59 割込み制御実習回路

390Ω×7

9

8

7

6

5

4

3

2

1

10

11

12

13

14

15

16

17

18

RB4

RB5

RB6

RB7

RB3

RB2

RB1

OSC2

OSC1

RB0/INT

GND

MCLR

RA4

RA3

RA2RA1

RA0

VDD

PIC16F84A

10 kΩ

SW0セラロック(10 MHz)

+ 5 V電源 SW 3 1

278L05

47µF 47µF0.1µF

++9 V

第五章(念).indd 152 2014/09/11 11:31:34

Page 32: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

5.3 割込み制御  153

図 5.60 外 観

図 5.61 LEDの配置と発光データの関係

RB

3

2

1

4

5

6

7

目 RB 16 進

123456

00000000

0 0 00

0000 00

0000 00 000

111 1

1 11 1 11 1 1

1

11

1 11 11 1 1

234567102232AABAEE

0

図 5.62 フローチャート

メインルーチン

スタート

初期設定

割込み許可(INTピン)

ポートB設定RB0:入力

RB1~7:出力

割込み信号設定(立上り)

割込みルーチン

割込み禁止

タイマ

割込み許可

戻る

MAIN:

00H→ポートB

00H→ポートBAGAIN:

INT

Wの復帰

Wの待避

W→ポートB

NUM1~6→W

第五章(念).indd 153 2014/09/11 11:31:34

Page 33: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

154  第 5 章 プログラミング実習

図 5.61に,LEDの配置(サイコロの目)と発光データの関係を示します.図 5.62にフローチャート,リスト 5.13にプログラムを示します.

リスト5.13  電子サイコロのプログラム

; ***************************************************************

; リスト 5.13

; 割込み制御プログラム; 電子サイコロ; ***************************************************************

LIST P=PIC16F84A ; 使用する PICを指定 INCLUDE "P16F84A.INC" ; 読み込む設定ファイルを指定; ***************************************************************

PB_D EQU 01H ; ポート B入出力設定データNUM1 EQU 10H ; 目データNUM2 EQU 22H

NUM3 EQU 32H

NUM4 EQU 0AAH

NUM5 EQU 0BAH

NUM6 EQU 0EEH

INT_OK EQU 90H ; INT(RB0)ピン割込み許可データINT_NG EQU 10H ; 割込み禁止データTMP EQU 0CH ; Wレジスタ待避用CNT1 EQU 0DH ; タイマ 1用カウント変数CNT2 EQU 0EH ; タイマ 2用カウント変数CNT3 EQU 0FH ; タイマ 3用カウント変数; ***************************************************************

ORG 0 ; プログラムを格納する先頭アドレス  GOTO MAIN

ORG 4 ; 割込みベクタ MOVWF TMP ; Wレジスタの待避 MOVLW INT_NG ; 割込み禁止データ MOVWF INTCON ; 割込み禁止

; 割込み処理 **************************************************

MOVF TMP,W ; Wレジスタの回復 MOVWF PORTB ; ポート Bへ出力 CALL TIMER3 ; 1秒タイマ呼出し CLRF PORTB ; ポート Bをクリア(LED消灯); ***************************************************************

MOVLW INT_OK ; 割込み許可データ MOVWF INTCON ; 割込み許可 RETFIE ; 割込みから戻る

MAIN BSF STATUS,RP0 ; バンク 1を選択 MOVLW INT_OK ; 割込み許可データ MOVWF INTCON ; 割込み許可 BSF OPTION_REG,INTEDG ; 割込み信号の立上りで動作 MOVLW PB_D ; ポート B設定データ MOVWF TRISB ; RB0を入力,RB1~ 7を出力モードに設定 BCF STATUS,RP0 ; バンク 0を選択 CLRF PORTB ; ポート Bをクリア(LED消灯)

AGAIN MOVLW NUM1 ; 目データの格納 NOP

NOP

MOVLW NUM2

NOP

NOP

MOVLW NUM3

NOP

第五章(念).indd 154 2014/09/11 11:31:34

Page 34: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

5.3 割込み制御  155

NOP

MOVLW NUM4

NOP

NOP

MOVLW NUM5

NOP

NOP

MOVLW NUM6

GOTO AGAIN

TIMER1 MOVLW D‘62’ ; 0.1ミリ秒タイマサブルーチン MOVWF CNT1

LOOP1 NOP

DECFSZ CNT1,F

GOTO LOOP1

RETURN

TIMER2 MOVLW D‘100’ ; 10ミリ秒タイマサブルーチン MOVWF CNT2

LOOP2 NOP

CALL TIMER1

DECFSZ CNT2,F

GOTO LOOP2

RETURN

TIMER3 MOVLW D‘100’ ; 1秒タイマサブルーチン MOVWF CNT3

LOOP3 NOP

CALL TIMER2

DECFSZ CNT3,F

GOTO LOOP3

RETURN

END ; プログラムの終わり

RB0/INTに割込み信号が入力されると,そのときの Wレジスタのデータで LEDを点灯します.そして,タイマを用いておよそ 1秒間点灯させた後,もとの処理(点灯データを繰り返し Wレジスタに格納する)に戻ります.図 5.61に示した点灯データは,NUM1~ 6に割り付けて使用しています.タイマルーチンは,これまでに使用したのと同じプログラムです.点灯データ NUM1~ 6を Wレジスタに格納する場合,最後の NUM6の格納が終了す

ると GOTO命令で NUM1の格納にジャンプします.このとき,GOTO命令の実行に 2サイクル必要ですから,Wレジスタには NUM6が格納されている時間が,NUM1~ 5よりも長くなってしまいます.この問題を解決して,少しでもランダム性を高めるために,NOP命令を使用して,各データの格納時間を同一にしています.練習問題5.24   INTCONレジスタに,90Hと10Hを書き込む設定について説明しなさい.

練習問題5.25   リスト 5.13の,ラベル NUM1と CNT1に割り当てられたデータは,プログラム中で異なった意味合いをもつ.このことについて説明しなさい.

練習問題5.26   リスト 5.13のプログラムを変更して,割込み信号を入力すると,

第五章(念).indd 155 2014/09/11 11:31:35

Page 35: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.
Page 36: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

  207

英 数

10進数 521 ‒ 2相励磁方式 14516F648A 2216F84A 20,11816進数 56,571相励磁方式 1412SD1828 1402進数 52,572相励磁方式 1437805 1408進数 58ADDLW 98ADDWF 78ALU 25AND 59ANDLW 100ANDWF 82BCF 93Binary 52BSF 94BTFSC 95BTFSS 96C 72CALL 33,103CCSコンパイラ 184CISC 22CLRF 90CLRW 91CLRWDT 36,108COMF 84_CONFIG 65CPU 4Cコンパイラ 184DC 72DCモータ 134DECF 81DECFSZ 89Decimal 52__delay_ms() 190dsPIC 19EEPROM 31

索   引

EEPROM割込み 37Encoding 167,187END 65EQU 65EX-OR 59F 69,75F1エンハンストミッドレンジ 18FSR 30GOTO 104hex 70,173Hexadecimal 56INCF 80INCFSZ 88INCLUDE 65INDF 30INTCON 38,150,156INTピン割込み 37IORLW 101IORWF 83LED 115LED実習回路 112,201LIFO方式 33LIST 65MCLR 114mikroCコンパイラ 184MOVF 41,75MOVLW 97MOVWF 76MPASM 65MPLAB ICD3 47MPLAB X 45,162MPU 4NOP 92NOT 59Octal 58OPTION_REG 35,150,156OR 59ORG 65PC 42PIC 8,16PIC18 19

PICkit3 46PICライタ 45,46RETFIE 107,149RETLW 106RETURN 33,105RISC 22RLF 87RRF 86RSフリップフロップ 148SFR 26,27,28,179,204SLEEP 38,109STATUS 72Step Info 177Step Over 177SUBLW 99SUBWF 79SWAPF 77TA7291P 134TEXTOOL 115TRISA 128TRISB 27W 69,75WDT 36,66Wレジスタ 25XC8 162XC8 Cコンパイラ 185XCコンパイラ 162XORLW 102XORWF 85Z 72

あ 行

秋月電子通商 49アーキテクチャ 21アキュムレータ 25アセンブラ 44,64アセンブラ言語 64アセンブラ言語の書式 68アセンブリ言語 64アセンブル 44,64,171アンダーフロー 61,126

索引(念).indd 207 2014/09/11 11:20:41

Page 37: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

208  索   引

インクルードファイル 69,118インサーキットデバッガ 47インタフェース 2ウオッチドッグタイマ 36,66エッジ設定 150オシレータモード 66オーバーフロー 61,126オープンドレイン 130オペコード 68オペコード部 23オペランド 68オペランド部 23

か 行

間接アドレッシング 145間接アドレッシング方式 29疑似命令 65基数変換 52逆起電力 133キャリービット 61繰返し制御 123クロック 5ゲート 59コードプロテクト 66コメント 68コンパイル 189コ ンフィグレーションビット 66,118,169,189

さ 行

サイクル 40,120サブルーチン 33,120算術演算 59時間かせぎ 120シフト 61シミュレーション 44,176シミュレータ 44出力回路 115シュミットトリガゲート 148真理値表 59水晶振動子 113スタック 33ステップ角 140ストップウオッチ 179相撲ロボット 12スリープ 38制御文 123

正数 54赤外線センサ 160セラミック振動子 113セラロック 113選択制御 123全命令 73,205ソケット 115ソースファイル 168,187ソ ースブースト Cコンパイラ 184

ソースプログラム 188ソフトウェア 2

た 行

タイマ 119タイマ 0 34,156タイマ 0割込み 37タイマ関数 190ダ ーリントンパワートランジスタ 140

逐次処理 3置数器 25チャタリング 147中央処理装置 4超音波センサ 12直接アドレッシング方式 29ディジタル I/O 118ディジタル回路 59デコーダ 4データメモリ 27,31,118デバッグモード 175電源回路 113電源供給 172電子サイコロ 152トランジスタスイッチ 132

な 行

ニーモニックコード 64入力回路 114ネスト 33,120ノイズ 138ノイマン型 3

は 行

排他的論理和 59パイプライン方式 41パソコン 8発振回路 113ハードウェア 2ハーバードアーキテクチャ 22

パルスモータ 138パワーアップタイマ 66バンク 26,28汎用レジスタ 118ヒートシンク 143ビルド 171,189ファイルレジスタ 25,28,178フォン・ノイマン 3フ ォン・ノイマンのボトルネック 22負数 54フラグ 72フラッシュメモリ 17,24プリスケーラ 34プルアップ抵抗 130プルダウン抵抗 114ブレークポイント 176プログラム開発 44プログラムカウンタ 4,42プログラム転送 173プログラムメモリ 24,178プログラムモード 175プロジェクト 165,186ページ 24ベースライン 18ヘッダファイル 190補数 54ポート 21ポート B割込み 37

ま 行

マイクロコントローラ 16マ イクロチップテクノロジー社 16,200マイコン 6マイコン制御 8マシン語 64マスク 60ミッドレンジ 18無限ループ 69命令実行サイクル 3,40命令の形式 23命令のフォーマット 71命令レジスタ 4メモリ 34メモリの内容 177

ら 行

ラベル 68リセット回路 114リセットベクタ 38,149

索引(念).indd 208 2014/09/11 11:20:41

Page 38: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

索   引  209

リレー 131ローテイト 61,124論理演算 60論理式 59論理積 59

論理否定 59論理和 59

わ 行

ワード 23

割込み 37,149,156割込みベクタ 38,149ワンチップマイコン 8

索引(念).indd 209 2014/09/11 11:20:41

Page 39: 図解PICマイコン実習(第2版) サンプルページ · 2016-02-29 · ここでは,pic の基本形である16f84a を取り上げて,その構成を学習しましょう.

   著 者 略 歴堀 桂太郎(ほり けいたろう)日本大学大学院 理工学研究科博士後期課程 情報科学専攻修了博士(工学)

現在 国立明石工業高等専門学校電気情報工学科 教授

<主な著書>図解ModelSim実習図解 LabVIEW実習図解 Verilog HDL実習図解 VHDL実習 第 2版図解コンピュータアーキテクチャ入門 第 2版(以上,森北出版)

編集担当 加藤義之(森北出版)編集責任 石田昇司(森北出版)組  版 dignet印  刷 丸井工文社製  本   〃  

図解 PICマイコン実習 第 2版-ゼロからわかる電子制御- © 堀桂太郎 2014

2003年 2 月 7 日 第 1版第 1 刷発行 【本書の無断転載を禁ず】2013年 2 月 5 日 第 1版第 10刷発行2014年 10月 20日 第 2版第 1 刷発行

著  者 堀桂太郎発 行 者 森北博巳発 行 所 森北出版株式会社 東京都千代田区富士見 1⊖4⊖11(〒 102⊖0071) 電話 03⊖3265⊖8341/ FAX 03⊖3264⊖8709

http://www.morikita.co.jp/

日本書籍出版協会・自然科学書協会 会員     <(社)出版者著作権管理機構 委託出版物>

落丁・乱丁本はお取替えいたします.

Printed in Japan/ ISBN978‒4‒627‒78332‒4

奥付(念).indd 1 2014/09/10 10:14:02