「図解 PIC マイコン実習(第 2 版)」 サンプルページ この本の定価・判型などは,以下の URL からご覧いただけます. http://www.morikita.co.jp/books/mid/078332 ※このサンプルページの内容は,第2版 1 刷発行時のものです. 前付(念).indd 1 2014/09/12 14:36:40 i 第 2 版 ま え が き 本書の初版発行から 10 年が過ぎましたが,幸いにして多くの読者からご好評を賜 りました.その間,増刷の機会に,統合開発ソフトウェア MPLAB のバージョンアッ プに対応するなどの改訂を加えてきました.しかしながら,近年では,PIC をとり まく開発環境が大きく変わってきました.たとえば,パソコンのインタフェースの主 流は USB となり,統合開発ソフトウェアは,MPLAB X へと大きなバージョンアッ プを遂げました.これらの変化に対応するため,本書の第 2 版を発行する運びとなり ました. 本書で扱っている PIC16F84A は,現在も工業高校や,高専,大学など多くの教育 機関において,PIC を学ぶ教材に採用されています.それは,扱いやすい PIC であ るのと同時に,より高性能な PIC を扱うための基礎を学ぶのにたいへん適したアー キテクチャをしているからです.一方で,現在では,より多くの機能を搭載した高性 能な PIC が,たいへん安価に入手できるようになっています.このため,本書では, PIC16F84A と互換性の高い PIC16F648A についての解説を加筆しました.PIC16F648A は,PIC16F84A よりも高性能な PIC ですが,より安価に入手できること が多い好都合な PIC です. 本書の実習環境は,OS に Windows 8.1,統合開発ソフトウェアに MPLAB X, PIC ライタ装置に PICkit3 を採用しました.また,入手しにくくなった電子部品な どを更新し,内蔵タイマを使用するプログラミング実習などについて加筆しました. さらに,第 7 章を新設して,マイクロチップテクノロジー社が提供する C コンパイ ラ(XC8)を用いた開発についても解説しました.一方で,初版が多くの読者に受 け入れられた事実を考慮して,扱うレベルや範囲については初版と同程度としました. 本書が,初版と同様に PIC をマスターする最初の一歩を踏み出すための入門書とし てお役に立つことを心より願っています. 最後になりましたが,第 2 版発行の機会を与えてくださった森北出版の森北博巳氏, 並びに編集でお世話になった加藤義之氏にこの場を借りて厚く御礼申し上げます. 2014 年 8 月 著 者 前付(念).indd 1 2014/09/12 14:36:40 ii ま え が き 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 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 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 目 次 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 vi 目 次 演習問題解答 …………………………………………………………………………… 199 付 録 ………………………………………………………………………………… 200 発展問題 200 PIC 情報の収集 200 LED 実習回路の製作 201 プログラミングの際によく使う一覧表 204 参考文献 ………………………………………………………………………………… 206 索 引 ………………………………………………………………………………… 207 前付(念).indd 6 2014/09/12 14:36:41 20 2.2 PIC の構成 ここでは,PIC の基本形である 16F84A を取り上げて,その構成を学習しましょう. 2.2.1 16F84A の概要 図 2.5( a ) に 16F84A の外観,図( b )にピン配置,表 2.2 にピンの説明を示します. PDIP,SOIC SOIC 型 ( a )外観 PIC16F84A PDIP 型 ・1 2 3 4 5 6 7 8 9 RA2 RA3 RA4/T0CKI MCLR VSS RB0/INT RB1 RB2 RB3 18 17 16 15 14 13 12 11 10 RA1 RA0 OSC1/CLKIN OSC2/CLKOUT VDD RB7 RB6 RB5 RB4 ( b )ピン配置 図 2.5 16F84A 表 2.2 16F84A のピンの説明 ピン番号 第二章(念).indd 20 名 称 説 明 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 ビット目) 2014/09/10 16:49:21 2.2 PIC の構成 21 図 2.6 に示すように,16F84A は,入出力を行う 2 個のポート A,B をもつマイコ ンです.ポートのピン数は,ポート A が 5 本,ポート B が 8 本の計 13 本で,ピン ごとに入力モードまたは出力モードの設定が可能です.ポートのピンには,およそ 20 mA の電流を流すことができますので,LED の点灯程度ならば,特別なドライブ 回路は必要ありません. ひとつのピンで 最大 20 mA の直 接ドライブ可能! 入出力 電源5V ポート A VDD,VSS RA0∼4 PIC 16F84A クロック OSC1,OSC2 リセット ポート B MCLR RB0∼7 図 2.6 16F84A の概要 2.2.2 アーキテクチャ 図 2.7 に,16F84A のアーキテクチャを示します. 14 ビット プログラム カウンタ 13 プログラムメモリ 1K (フラッシュ ROM) プログラム バス 8 データバス 8 データメモリ (EEPROM) 13 14 スタック 8 レベル ファイルレジスタ (RAM) 命令レジスタ 64 68 7 アドレス選択 5 直接アドレス 7 FSR 8 デコード, 制御 パワーオン リセット ウオッチドッグ タイマ 選択 ALU W OSC1,OSC2 タイマ STATUS パワーアップ タイマ クロックスタート アップタイマ タイミング 発生 間接 アドレス MCLR RA4/T0CKI I/O ポート RA0∼4 RB0∼7 VDD,VSS 図 2.7 16F84A のアーキテクチャ 第二章(念).indd 21 2014/09/10 16:49:22 22 第 2 章 PIC マイコンの基礎 第 1 章で学んだノイマン型コンピュータでは,プログラム(命令)とデータが同じ メモリ(主記憶装置)上に共存していました.したがって,CPU とメモリをつなぐ 転送路(バス)においてプログラムとデータの転送が競合(混雑)してしまいます. これは,フォン・ノイマンのボトルネックとよばれ,コンピュータ全体の性能を左右 してしまうほどの欠点なのです(図 2.8( a )). プログラム メモリ データ 混雑 バス プログラム メモリ フォン・ノイ マンのボトル ネック CPU プログラム バス ( a )ノイマン型 データ メモリ データバス CPU ( b )ハーバード型 図 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 2.2 PIC の構成 23 4 KB,SRAM が 256 バイトと 16F84A に比べて大容量であり,3 系統のタイマを備 えるなど,機能も充実しています.さらに,動作電圧も 2.0∼5.5 V の範囲で動作し ます.RA5∼RA7 も用意されています.価格は,16F84A と同程度ですが,より安く 購入できることもめずらしくありません.ピン配置は基本的に 16F84A と同じですが, 汎用レジスタのアドレスなどが異なるため,完全な互換性はありませんので注意が必 要です.しかし,若干の変更を行えば 16F84A と同じように使用できます.図 2.9 に 16F648A の外観とピン配置を示します. PDIP,SOIC ( a )外観 ・1 18 2 17 3 16 4 5 6 7 PIC16F648A RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 RA5/MCLR/VPP VSS RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 15 14 13 12 8 11 9 10 RA1/AN1 RA0/AN0 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT VDD RB7/T1OSI/PGD RB6/T1OSO/T1CKI/PGC RB5 RB4/PGM ( b )ピン配置 図 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 24 第 2 章 PIC マイコンの基礎 2.2.5 プログラムメモリ プログラムメモリは,プログラムを格納しておく 14 ビット幅のメモリです. 16F84A では,プログラムメモリの大きさは,1 K ワードですから,最大 1 K ワード =1024 個までの命令を使ってプログラムを作成することができます.その際のアド レスは,16 進数で 0 番地∼3FFH 番地となります(図 2.11).16F648A のプログラ ムメモリは 4 K ワード,アドレスは 0 番地∼FFFH 番地です. 14 ビット アドレス リセットベクタ 0004 割込みベクタ ∼ 0000 割込み発生時 ∼ 1K ワード 電源投入,リセット時 03FF 図 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 2.2 PIC の構成 25 アドレス 0000 PC:13 ビット 213=8K 8K 07FF 0800 0FFF 1000 17FF 1800 ページ 0 2K ページ 1 2K ページ 2 2K ページ 3 2K ジャンプ命令 オペランド部 11 ビット 211=2K 他のレジスタ (2 ビット)を使って 切り替える 1FFF 図 2.12 ページの概念 2.2.6 W レジスタ W レジスタ(Working Register)は,ALU(算術論理演算装置)の近くにある 8 ビッ トのレジスタです.レジスタとは,データを格納しておく小規模ながら高速なメモリ のことで,置数器ともよばれます.W レジスタは,演算や転送命令を実行する際に,デー タを一時的に保管しておくなど,ALU と連携しながら,重要な働きをします.図 2.13 に,例として,2 と 6 の加算を行う命令を実行した場合の動作を示します.W レジス タは,Z80CPU の A レジスタ(アキュムレータ)に相当します. 2 ① 2 +6 の計算例 6 ALU ② ③ W レジスタ 6 8 図 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 26 第 2 章 PIC マイコンの基礎 8 ビット 00 特殊機能レジスタ群 SFR 0B 0C 汎用レジスタ 4F 50 (68) 10 個 実装なし 7F 図 2.14 ファイルレジスタ また,上位 0 番地∼0BH 番地までの 12 個の領域は,SFR(Special Function Register)とよばれる特殊機能をもつレジスタに割り当てられています.したがって,ユー ザが汎用レジスタとして使用できるのは,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 SFR 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 4F バンク 1 アドレス INDF TMR0 PCL STATUS FSR PORTA PORTB INDF OPTION_REG PCL STATUS FSR TRISA TRISB EEDATA EEADR PCLATH INTCON EECON1 EECON2 PCLATH INTCON 汎用レジスタ 68 個 ( ) 汎用レジスタ 未使用 未使用 80 81 82 83 84 85 86 87 88 89 8A 8B 8C バンク 0 と同じ CF 図 2.15 16F84A のファイルレジスタ 第二章(念).indd 26 2014/09/10 16:49:24 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). バンク 1 0:出力ピン 1:入力ピン となる ビット 7 ビット 6 ビット 5 ビット 4 ビット 3 ビット 2 ビット 1 ビット 0 RB7 RB6 RB5 RB4 10 11 12 13 RB3 16F84A SFR 86H TRISB RB2 RB1 RB0 9 8 7 6 図 2.16 TRISB レジスタによるポート B の設定 第二章(念).indd 27 2014/09/10 16:49:25 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 04H FSR 05H PORTA 06H PORTB IRP RP1 RP0 TO PD Z DC C RA3 RA2 RA1 RA0 RB3 RB2 RB1 RB0/INT TOIF INTF RBIF 間接データメモリアドレスポインタ − − − RB7 RB6 RB5 RA4/ TOCKI RB4 使用しない,「0」としてリードされる 07H 08H EEDATA EEPROM データレジスタ 09H EEADR EEPROM アドレスレジスタ 0AH PCLATH − − − 0BH INTCON GIE EEIE TOIE PC の上位 5 ビット INTE RBIE バンク 1 80H INDF 81H OPTION_ REG 82H PCL 83H STATUS 84H FSR 85H TRISA 86H TRISB RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 RP0 TO PD Z DC C PC の下位 8 ビット IRP RP1 間接データメモリアドレスポインタ − − − PORTA データ入出力設定レジスタ PORTB データ入出力設定レジスタ 使用しない,「0」としてリードされる 87H 88H FSR の内容のアドレスのデータメモリ(物理的には存在しない) EECON1 − − − EEIF WRERR WREN WR RD EEPROM 制御レジスタ 2(物理的には存在しない) 89H EECON2 8AH PCLATH − − − 8BH INTCON GIE EEIE TOIE PC の上位 5 ビットへの書き込みバッファ 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 2.2 PIC の構成 29 バンク 0 バンク 1 INDF TMR0 PCL STATUS FSR PORTA PORTB アドレス 00 01 02 03 04 05 06 07 08 09 PCLATH 0A INTCON 0B 0C PIR1 0D TMR1L 0E 0F TMR1H T1CON 10 TMR2 11 12 T2CON 13 14 CCPR1L 15 16 CCPR1H 17 CCP1CON 18 RCSTA 19 TXREG 1A RCREG 1B 1C 1D 1E 1F CMCON 20 INDF OPTION PCL STATUS FSR TRISA TRISB 汎用レジスタ 80 個 PCLATH INTCON PIE1 PCON PR2 TXSTA SPBRG EEDATA EEADR EECON1 EECON2 VRCON アドレス 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 汎用レジスタ 80 個 6F 70 16 個 7F バンク 0 と 同じ バンク 2 INDF TMR0 PCL STATUS FSR PORTB PCLATH INTCON アドレス 100 101 102 103 104 105 106 107 108 109 10A 10B 10C 10D 10E 10F バンク 3 INDF OPTION PCL STATUS FSR TRISB PCLATH INTCON アドレス 180 181 182 183 184 185 186 187 188 189 18A 18B 18C 18D 18E 18F 11F 120 汎用レジスタ 80 個 EF F0 FF バンク 0 と 同じ 16F 170 17F バンク 0 と 同じ 1EF 1F0 1FF 図 2.17 16F648A のファイルレジスタ(空欄は未使用) 2.2.10 間接アドレッシング方式 メモリのアドレスを指定して直接的に内容をアクセスするのは,直接アドレッシン グ方式とよばれています.これに対して,ある操作によって間接的にメモリをアクセ スするのが間接アドレッシング方式です(図 2.18). 第二章(念).indd 29 2014/09/10 16:49:25 112 番号!!!! 5.1 LED の制御 0 1 2 ここで学ぶことは,マイコン制御の基本となります.スイッチから入力データを取 り込んで,LED を自在に点滅できるように実習してください. 5.1.1 LED 実習回路の製作 図 5.1 ∼ 5.3 に,LED 実習回路のブロック図,回路図,外観を示します.実際の 製作にあたっては,付録(201 ページ)を参考にしてください. スイッチ ×2 入力 5V 電源 RB0 ∼ 7 RA0 ∼ 1 MCLR PIC VDD 出力 LED×8 リセット OSC1 ∼ 2 セラロック 発振 (10 MHZ) 16F84A 図 5.1 LED 実習用回路のブロック図 390 Ω×8 10 RB4 11 RB5 RB6 13 RB7 14 VDD 12 セラロック (10 MHz) 15 OSC2 OSC1 17 RA0 18 RA1 16 10 kΩ ×2 電源 SW 9V 3 RB3 RB2 RB1 RB0 GND MCLR RA4 RA3 RA2 LED7 LED6 9 8 LED5 LED4 7 LED3 6 LED2 5 LED1 4 LED0 3 2 1 PIC16F84A SW0 78L05 + 2 47µF SW1 +5 V 1 + 47µF 78L05 0.1µF 123 1:出力 2:GND 3:入力 セラロック 1:出力 2:GND 1 2 3 3:出力 図 5.2 LED 実習回路図 第五章(念).indd 112 2014/09/11 11:31:25 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). ( a )78L05(Max 100mA) ( b )7805(Max 1A) 図 5.4 3 端子レギュレータ IC ( 2 )発振回路 PIC は,内部に RC 発振回路を内蔵しており,簡単にクロック信号を作ることが できます.しかしここでは,安定度を向上させるために,セラロックとよばれる村田 製作所の外付け型のセラミック振動子(10 MHz)を使いました(図 5.5( a )).この 振動子は,コンデンサを内蔵しており,3 本ピンの真ん中をグランドに接続します. さらに発振の安定度を上げたい場合には,水晶振動子を用います(図 5.5( b )).水 晶振動子を使用する場合には,セラロックと同様の回路構成で,2 個のコンデンサの 値を 20 pF 程度にするとよいでしょう. 第五章(念).indd 113 2014/09/11 11:31:26 114 第 5 章 プログラミング実習 ( a )セラロック ( b )水晶振動子 図 5.5 外付け振動子 (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)に接続しま した. 5V 4.5 V +5V 1S1588 0V 10 kΩ t 1 kΩ スイッチ ON 規定電圧 リセットしておく リセット SW ( a )電源電圧の立上り + 10µF MCLR ( b )リセット回路 図 5.6 リセット ( 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 5.1 LED の制御 115 +5V +5V ピン X ピン X 10 kΩ プルダウン抵抗 ( a )よくない回路例 ( b )正しい回路例 図 5.7 スイッチ入力回路 ( 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 V(VDD) 3V 2V I(A) 3 R =_(Ω) I R(Ω) 図 5.8 電流制御用抵抗 PIC では,1 本の入出力ピンにおよそ 20 mA までの電流を流すことができます. したがって,LED 程度なら,ドライブ回路なしで直接接続することが可能です. この実習回路では,プログラムを書き込んだ PIC を何度も装着・脱着しますので, IC ソケットが必要となります.ここでは,レバー操作で簡単に PIC を取り外しでき る TEXTOOL とよばれるソケットを使用しました.このソケットは,たいへん便利 ですが,高価なので予算に応じて採用してください(図 5.9). ( a )TEXTOOL(ゼロプレッシャ)型 ( b )通常型 図 5.9 PIC の 18 ピンソケット 第五章(念).indd 115 2014/09/11 11:31:29 116 第 5 章 プログラミング実習 5.1.2 LED 点灯プログラム 初めは,8 個の LED を点灯する信号出力用のプロ グラムを作成しましょう.図 5.10 にフローチャート, リスト 5.1 にプログラムを示します.点灯データは, 疑似命令 EQU で LEDD=55H と設定しています. ポートを入力,出力のどちらにするのかは,SFR(特 殊レジスタ)の 85H(ポート A 用 TRISA レジスタ), 86H(ポート B 用 TRISB レジスタ)で設定します. スタート インクルード ファイルの設定 点灯データ 55H→LEDD LIST INCLUDE EQU これらのレジスタのピン番号に対応するビットに “0”を書き込めば出力用, “1”を書き込めば入力用 ピンに設定できます.このプログラムでは,TRISB レジスタのすべてのビットをクリア(CLRF 命令)し て出力ピンとしています. バンク 1 BSF ポート B 出力モード CLRF バンク 0 00H→ポート B BCF CLRF TRISB レジスタは,ファイルレジスタのバンク 1 側にありますので,SFR の STATUS レジスタ RP0(イ ンクルードファイルで,5 ビット目と記述してある) に“1”を設定(BSF 命令)することでバンク 1 を選 択しています. LEDD→W W→ポート B MOVLW MOVWF 待機 図 5.10 フローチャート リスト 5.1 LED 点灯プログラム 1 ; ******************************************************* ; リスト 5.1 ; LED 点灯プログラム 1 ; ******************************************************* LIST P=PIC16F84A ; 使用する PIC を指定 INCLUDE "P16F84A.INC" ; 読み込む設定ファイルを指定 ; ******************************************************* LEDD EQU 55H ; LED 点灯データの設定 ; ******************************************************* ORG 0 ; プログラムを格納する先頭アドレス WAIT BSF CLRF BCF CLRF MOVLW MOVWF GOTO STATUS,RP0 TRISB STATUS,RP0 PORTB LEDD PORTB WAIT END ; バンク 1 を選択 ; ポート B をすべて出力モードに設定 ; バンク 0 を選択 ; ポート B を 0 にクリア(LED 消灯) ; 点灯データを W レジスタにセット ; 点灯データをポート B に出力 ; 待機 ; プログラムの終わり データを出力する POPTB レジスタは,ファイルレジスタのバンク 0 側にあります ので,再びバンクの切替えを行ってから,点灯データ LEDD を W レジスタ経由でポー ト B から出力します(図 5.11). 第五章(念).indd 116 2014/09/11 11:31:29 5.1 LED の制御 117 プログラムメモリ バンク 1 ∼ 80 入力か出力かを指定 STATUS ∼ SFR バンク 0 ∼ 00 03 05 06 ∼ TRISA TRISB ∼ PORTA PORTB 85 86 (7F) 4F CF 入力 / 出力 データ RB0 ∼ W ∼ ∼ 汎用レジスタ ポートB 8B(9F) 8C(A0) (1F) 0B (20) 0C * RB7 *( )は,16F648A 切替 STATUS レジスタ 0:バンク 0 RP0 1:バンク 1 図 5.11 16F84A のポート B のモード設定とデータ転送 終わりに GOTO 命令を使って,PIC を待機状態にしています. プログラムを記述したら,アセンブルを行い,PIC ライタ装置を用いて PIC に書 き込みます.書込み時には,コンフィグレーションビットを,FOSC(OSC)を「HS」, WDTE(WDT)を「OFF」 ,PWRTE を「ON」,CP を「OFF」と指定してください(67 ペー ジ参照) . プログラムの書込みが終われば,PIC を実習回路に装着して動作を確認します. 点灯データが 55H なので,LED が図 5.12 のように点灯すれば成功です. 0 1 0 1 0 1 0 1 B = 55H 消灯 点灯 図 5.12 LEDD = 55H のときの点灯 たとえば,すべての LED を点灯させるデータは 0FFH です.このように,アルファ ベットで始まる 16 進数の先頭には 0 を記述することに注意してください. 練習問題 5.1 リスト 1 で,点灯データ LEDD の値を変えて動作を確認しなさい. 第五章(念).indd 117 2014/09/11 11:31:29 149 5.3 割込み制御 PIC16F84A には,4 種類の割込みモードがあります.どのモードも基本的な制御 の流れは同じです.ここでは,INT(RB0)ピンによる割込みについて実習しましょう. 5.3.1 割込みプログラム 割込みとは,実行中の処理 A を中断して,他の処理 B を行った後,もとの処理 A の実行に戻る手法です(37 ページ参照).PIC では,プログラムメモリの 04H 番地 が割込みベクタです.割込み信号が入力されると PC(プログラムカウンタ)は 04H 番地を示し,そこに格納されている命令を実行します.割込み処理からの回復には, RETFIE 命令を用います. 図 5.55 に,割込みを使用する場合のプログラム実行の流れを示します.PIC に電 源を投入すると,プログラムメモリ 00H 番地(リセットベクタ)から命令の実行を 開始します.割込み信号がないときは,そのまま 04H 番地(割込みベクタ)まで実 行が進まないように,GOTO 命令を用いて,割込み処理プログラムをジャンプします. 図 5.56 に,割込み制御を行う場合のプログラム記述の手順を示します. アドレス プログラムメモリ リセット 00 ベクタ 04 割込み発生! ∼ 割込み ベクタ GOTO 命令で 割込み処理を ジャンプ 割込みから戻る RETFIE ∼ ∼ ∼ ∼ ∼ 3FF 図 5.55 割込みを使用するプログラムの流れ 第五章(念).indd 149 2014/09/11 11:31:34 150 第 5 章 プログラミング実習 (1) 割込みが発生 すると,自動的 に実行される 割込みモードの設定 割込みフラグの変化 INTCON (T0IF,INTF,RBIF) (2) 割込みベクタヘジャンプ (04H番地) (3) W レジスタ,STATUS (Z,DC,C) などの待避 (4) 割込み禁止 (5) 割込み処理 割込みフラグの回復 (6) INTCON (T0IF,INTF,RBIF) (7) 割込み許可 (8) W レジスタ,STATUS (Z,DC,C)などの回復 (9) RETFIE 割込みから戻る 図 5.56 割込みプログラム記述の手順 プログラム記述の手順 ① 割込みモードの設定 プログラムに,許可する割込みの種類と割込み信号のエッジ設定を記述します. 許可する割込みの種類は INTCON レジスタで設定します.たとえば,INT(RB0)ピ ンによる割込みを許可する場合には,INTCON レジスタに 90 H を書き込みます (図 5.57). すべての割込み RB0/INT ピンによる割込み 0BH INTCON ビット 7 ビット 6 ビット 5 ビット 4 ビット 3 ビット 2 ビット 1 ビット 0 GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 0:禁止 1:許可 1 0 0 1 0 0 0 0 90H:許可 0 0 0 1 0 0 0 0 10H:禁止 図 5.57 許可する割込みの種類の設定 割込み信号のエッジ設定は,OPTION_REG レジスタを用いて行います.エッジ 設定とは,割込み信号を有効にするタイミングを,信号の立上り時か立下り時か 第五章(念).indd 150 2014/09/11 11:31:34 5.3 割込み制御 151 に指定することです.たとえば,立上りエッジを指定する場合には,OPTION_ REG レジスタの 6 ビット目に“1”を書き込みます(図 5.58). 割込み信号のエッジ 81H OPTION_REG 0:立下り 1:立上り ビット 7 ビット 6 ビット 5 ビット 4 ビット 3 ビット 2 ビット 1 ビット 0 RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 “1” t “0” 立上り 立下り 図 5.58 割込み信号のエッジ設定 ② 割込みフラグの変化,割込みベクタへジャンプ 有効な割込み信号が入力された場合,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 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 に接続してあります. 390 Ω×7 10 11 12 13 14 15 16 セラロック (10 MHz) 17 18 電源 SW 9V 3 1 78L05 + 2 47µF RB4 RB3 RB5 RB2 RB6 RB1 RB7 RB0/INT VDD GND OSC2 MCLR OSC1 RA4 RA0 RA3 RA1 RA2 PIC16F84A + 47µF 9 8 7 6 10 kΩ 5 4 3 SW0 2 1 +5V 0.1µF 図 5.59 割込み制御実習回路 第五章(念).indd 152 2014/09/11 11:31:34 5.3 割込み制御 153 図 5.60 外 観 RB 3 2 目 5 4 1 6 7 RB 16 進 1 7 6 5 4 0 0 0 1 3 2 1 0 0 0 0 0 2 0 0 1 0 0 0 1 0 3 0 0 1 1 0 0 1 0 32 4 1 0 1 0 1 0 1 0 AA 5 1 0 1 1 1 0 1 0 6 1 1 1 0 1 1 1 0 BA EE 10 22 図 5.61 LED の配置と発光データの関係 MAIN : メインルーチン 割込みルーチン スタート INT 初期設定 W の待避 割込み許可 (INT ピン) 割込み禁止 割込み信号 設定(立上り) W の復帰 ポート B 設定 RB0:入力 RB1∼7:出力 00H→ポート B AGAIN : NUM1∼6→W W→ポート B タイマ 00H→ポート B 割込み許可 戻る 図 5.62 フローチャート 第五章(念).indd 153 2014/09/11 11:31:34 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 0EEH NUM6 EQU 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 消灯) ; *************************************************************** ; 第五章(念).indd 154 MOVLW MOVWF RETFIE INT_OK INTCON ; 割込み許可データ ; 割込み許可 ; 割込みから戻る MAIN BSF MOVLW MOVWF BSF MOVLW MOVWF BCF CLRF STATUS,RP0 INT_OK INTCON OPTION_REG,INTEDG PB_D TRISB STATUS,RP0 PORTB ; バンク 1 を選択 ; 割込み許可データ ; 割込み許可 ; 割込み信号の立上りで動作 ; ポート B 設定データ ; RB0 を入力,RB1 ∼ 7 を出力モードに設定 ; バンク 0 を選択 ; ポート B をクリア(LED 消灯) AGAIN MOVLW NOP NOP MOVLW NOP NOP MOVLW NOP NUM1 ; 目データの格納 NUM2 NUM3 2014/09/11 11:31:34 5.3 割込み制御 155 NOP MOVLW NOP NOP MOVLW NOP NOP MOVLW GOTO TIMER1 LOOP1 TIMER2 LOOP2 TIMER3 LOOP3 NUM4 NUM5 NUM6 AGAIN MOVLW MOVWF NOP DECFSZ GOTO RETURN D ‘62’ CNT1 MOVLW MOVWF NOP CALL DECFSZ GOTO RETURN D ‘100’ CNT2 MOVLW MOVWF NOP CALL DECFSZ GOTO RETURN D ‘100’ CNT3 ; 0.1 ミリ秒タイマサブルーチン CNT1,F LOOP1 ; 10 ミリ秒タイマサブルーチン TIMER1 CNT2,F LOOP2 ; 1 秒タイマサブルーチン TIMER2 CNT3,F LOOP3 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 207 索 引 英 数 10 進数 52 1 2 相励磁方式 145 16F648A 22 16F84A 20,118 16 進数 56,57 1 相励磁方式 141 2SD1828 140 2 進数 52,57 2 相励磁方式 143 7805 140 8 進数 58 ADDLW 98 ADDWF 78 ALU 25 AND 59 ANDLW 100 ANDWF 82 BCF 93 Binary 52 BSF 94 BTFSC 95 BTFSS 96 C 72 CALL 33,103 CCS コンパイラ 184 CISC 22 CLRF 90 CLRW 91 CLRWDT 36,108 COMF 84 _CONFIG 65 CPU 4 C コンパイラ 184 DC 72 DC モータ 134 DECF 81 DECFSZ 89 Decimal 52 _ _delay_ms() 190 dsPIC 19 EEPROM 31 索引(念).indd 207 EEPROM 割込み 37 Encoding 167,187 END 65 EQU 65 59 EX−OR F 69,75 F1 エンハンストミッドレ ンジ 18 FSR 30 GOTO 104 hex 70,173 Hexadecimal 56 INCF 80 INCFSZ 88 INCLUDE 65 INDF 30 INTCON 38,150,156 INT ピン割込み 37 IORLW 101 IORWF 83 LED 115 LED 実習回路 112,201 LIFO 方式 33 LIST 65 MCLR 114 mikroC コンパイラ 184 MOVF 41,75 MOVLW 97 MOVWF 76 MPASM 65 MPLAB ICD3 47 MPLAB X 45,162 MPU 4 NOP 92 NOT 59 Octal 58 OPTION_REG 35,150,156 OR 59 ORG 65 PC 42 PIC 8,16 PIC18 19 PICkit3 46 PIC ライタ 45,46 RETFIE 107,149 RETLW 106 RETURN 33,105 RISC 22 RLF 87 RRF 86 RS フリップフロップ 148 SFR 26,27,28,179,204 SLEEP 38,109 STATUS 72 Step Info 177 Step Over 177 SUBLW 99 SUBWF 79 SWAPF 77 TA7291P 134 TEXTOOL 115 TRISA 128 TRISB 27 W 69,75 WDT 36,66 W レジスタ 25 XC8 162 XC8 C コンパイラ 185 XC コンパイラ 162 XORLW 102 XORWF 85 Z 72 あ 行 秋月電子通商 49 アーキテクチャ 21 アキュムレータ 25 アセンブラ 44,64 アセンブラ言語 64 アセンブラ言語の書式 68 アセンブリ言語 64 アセンブル 44,64,171 アンダーフロー 61,126 2014/09/11 11:20:41 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 索引(念).indd 208 正数 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 2014/09/11 11:20:41 索 引 209 リレー ローテイト 論理演算 論理式 論理積 索引(念).indd 209 131 61,124 60 59 59 論理否定 論理和 59 59 わ 行 ワード 割込み 37,149,156 割込みベクタ 38,149 ワンチップマイコン 8 23 2014/09/11 11:20:41 著 者 略 歴 堀 桂太郎(ほり けいたろう) 日本大学大学院 理工学研究科 博士後期課程 情報科学専攻修了 博士(工学) 現在 国立明石工業高等専門学校 電気情報工学科 教授 <主な著書> 図解 ModelSim 実習 図解 LabVIEW 実習 図解 Verilog HDL 実習 図解 VHDL 実習 第 2 版 図解コンピュータアーキテクチャ入門 第 2 版 (以上,森北出版) 編集担当 加藤義之(森北出版) 編集責任 石田昇司(森北出版) 組 版 dignet 印 刷 丸井工文社 製 本 〃 図解 PIC マイコン実習 第 2 版 -ゼロからわかる電子制御- 2003 年 2 月 7 日 第 1 版第 1 刷発行 2013 年 2 月 5 日 第 1 版第 10 刷発行 2014 年 10 月 20 日 第 2 版第 1 刷発行 © 堀桂太郎 2014 【本書の無断転載を禁ず】 著 者 堀桂太郎 発 行 者 森北博巳 発 行 所 森北出版株式会社 東京都千代田区富士見 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
© Copyright 2024 Paperzz