注意: この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。
DS41628B_JP - p. 2 2015 Microchip Technology Inc. 本書に記載されているデバイス アプリケーション等に関する 情報は、ユーザの便宜のためにのみ提供されているものであ り、更新によって無効とされる事があります。お客様のアプ リケーションが仕様を満たす事を保証する責任は、お客様に あります。Microchip 社は、明示的、暗黙的、書面、口頭、法 定のいずれであるかを問わず、本書に記載されている情報に 関して、状態、品質、性能、商品性、特定目的への適合性を は じ め と す る、い か な る 類 の 表 明 も 保 証 も 行 い ま せ ん。 Microchip 社は、本書の情報およびその使用に起因する一切の 責任を否認します。生命維持装置あるいは生命安全用途に Microchip 社の製品を使用する事は全て購入者のリスクとし、 また購入者はこれによって発生したあらゆる損害、クレーム、 訴訟、費用に関して、Microchip 社は擁護され、免責され、損 害を受けない事に同意するものとします。暗黙的あるいは明 示的を問わず、Microchip 社が知的財産権を保有しているライ センスは一切譲渡されません。 商標
Microchip 社の名称とロゴ、Microchip ロゴ、dsPIC、FlashFlex、 KEELOQ、KEELOQロゴ、MPLAB、PIC、PICmicro、PICSTART、 PIC32ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、米 国およびその他の国におけるMicrochip Technology Incorporated の登録商標です。
FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、 MTP、SEEVAL、Embedded Control Solutions Company は、 米国におけるMicrochip Technology Incorporated の登録商標 です。
Silicon Storage Technology は、他の国における Microchip Technology Inc. の登録商標です。
Analog-for-the-Digital Age、Application Maestro、BodyCom、 chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、 dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、 FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、 Mindi、MiWi、MPASM、MPF、MPLAB Certified ロゴ、MPLIB、 MPLINK、mTouch、Omniscient Code Generation、PICC、 PICC-18、PICDEM、PICDEM.net、PICkit、PICtail、REAL ICE、 rfLAB、Select Mode、SQl、Serial Quad I/O、Total Endurance、 TSHARC、UniWinDriver、WiperLock、ZENA および Z-Scale は、米国およびその他のMicrochip Technology Incorporated の商標です。
SQTP は、米国における Microchip Technology Incorporated のサービスマークです。
GestIC および ULPP は、Microchip Technology Inc. の子会社 であるMicrochip Technology Germany II GmbH & Co. & KG 社 の他の国における登録商標です。
その他本書に記載されている商標は各社に帰属します。 © 2015, Microchip Technology Incorporated, All Rights Reserved. ISBN: 978-1-63277-041-7 Microchip 社製デバイスのコード保護機能に関して以下の点にご注意ください。 • Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。 • Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に 流通している同種製品の中でも最も高度であると考えています。 • しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解では、こうした手法 はMicrochip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知 的所有権の侵害に該当する可能性が非常に高いと言えます。 • Microchip 社は、コードの保全性に懸念を抱いているお客様と連携し、対応策に取り組んでいきます。 • Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保 護機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。 コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社の コード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著作 物に不正なアクセスを受けた場合、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利があります。
Microchip社では、ChandlerおよびTempe (アリゾナ州)、Gresham (オレゴン州)の本部、設計部およびウェハー製造工場そしてカリ フォルニア州とインドのデザインセンターがISO/TS-16949: 2009認証を取得しています。Microchip社の品質システムプロセス および手順は、PIC® MCUおよびdsPIC® DSC、KEELOQ®コード
ホッピングデバイス、シリアルEEPROM、マイクロペリフェラル、 不揮発性メモリ、アナログ製品に採用されています。さらに、開発 システムの設計と製造に関するMicrochip社の品質システムはISO 9001:2000認証を取得しています。
目次
Chapter 1. 概要
1.1 はじめに... 13 1.2 ハイライト... 13 1.3 新機能... 13 1.4 キットの内容... 13 1.5 PICkit 少ピン開発ボード ... 14 1.6 ソフトウェアの概要... 14 1.7 デモの実行... 15Chapter 2. PIC
®MCU のアーキテクチャ
2.1 はじめに... 17 2.2 コアの基礎... 17 2.3 データ/ プログラムバス ... 20 2.4 アキュムレータ... 20 2.5 命令... 20 2.6 バイト指向... 21 2.7 ビット指向... 21 2.8 リテラル... 21 2.9 制御... 22 2.10 スタックレベル ... 25 2.11 メモリ構成 ... 25 2.12 プログラムメモリ ... 25 2.12.1 フラッシュ プログラムメモリ ... 25 2.12.2 コンフィグレーション ワード ... 27 2.12.3 デバイス ID ... 27 2.12.4 リビジョン ID ... 27 2.12.5 ユーザ ID ... 28 2.13 データメモリ... 28 2.13.1 コアレジスタ ... 28 2.13.2 特殊機能レジスタ ... 28 2.13.3 汎用 RAM ... 28 2.13.4 共通 RAM ... 28 2.14 バンク ... 28 2.15 データ EEPROM メモリ ... 34 2.16 プログラミングの基礎 ... 34 2.16.1 MPASM™ アセンブラの動作 ... 34 2.16.2 XC8 の動作 ... 34 2.16.3 アセンブラでの数値表現 ... 36 2.16.4 XC8 コンパイラでの数値表現 ... 36PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.4 2015 Microchip Technology Inc.
2.17 MPASM アセンブラのディレクティブ...36 2.17.1 Banksel ...36 2.17.2 cblock ...36 2.17.3 Org (addr) ...37 2.17.4 End ...37 2.17.5 Errorlevel ...37 2.17.6 #include ...37
Chapter 3. レッスン
3.1 レッスン...403.2 レッスン1: Hello World (LED の点灯 )...41
3.2.1 レッスンの紹介 ...41 3.2.2 ハードウェアの動作 ...41 3.2.3 概要 ...41 3.2.4 新しく学ぶレジスタ ...41 3.2.5 新しく学ぶ命令 ...42 3.2.6 アセンブリ ...43 3.2.7 C 言語 ...45 3.3 レッスン2: LED 点滅 ...47 3.3.1 レッスンの紹介 ...47 3.3.2 ハードウェアの動作 ...47 3.3.3 概要 ...47 3.3.4 新しく学ぶレジスタ ...47 3.3.5 新しく学ぶ命令 ...47 3.3.6 アセンブリ ...48 3.3.7 C 言語 ...50 3.4 レッスン3: ローテート...51 3.4.1 レッスンの紹介 ...51 3.4.2 ハードウェアの動作 ...51 3.4.3 概要 ...51 3.4.4 新しく学ぶレジスタ ...51 3.4.5 新しく学ぶ命令 ...51 3.4.6 アセンブリ ...52 3.4.7 C 言語 ...54 3.5 レッスン4: A/D 変換 ...55 3.5.1 レッスンの紹介 ...55 3.5.2 ハードウェアの動作 ...55 3.5.3 概要 ...55 3.5.4 新しく学ぶレジスタ ...55 3.5.5 新しく学ぶ命令 ...57 3.5.6 アセンブリ ...58 3.5.7 C 言語 ...58 3.6 レッスン5: 可変速ローテート...60 3.6.1 レッスンの紹介 ...60 3.6.2 ハードウェアの動作 ...60 3.6.3 概要 ...60 3.6.4 新しく学ぶレジスタ ...60 3.6.5 新しく学ぶ命令 ...60 3.6.6 アセンブリ ...62 3.6.7 C 言語 ...62
3.7.2 ハードウェアの動作 ... 63 3.7.3 概要 ... 64 3.7.4 新しく学ぶレジスタ ... 64 3.7.5 新しく学ぶ命令 ... 64 3.7.6 アセンブリ ... 64 3.7.7 PIC18 ... 64 3.7.8 C 言語 ... 64 3.8 レッスン7: 方向切り換え付き可変速ローテート ... 65 3.8.1 レッスンの紹介 ... 65 3.8.2 ハードウェアの動作 ... 65 3.8.3 概要 ... 65 3.8.4 新しく学ぶレジスタ ... 66 3.8.5 新しく学ぶ命令 ... 66 3.8.6 アセンブリ ... 66 3.8.7 C 言語 ... 67 3.9 レッスン8: パルス幅変調 (PWM) ... 68 3.9.1 レッスンの紹介 ... 68 3.9.2 ハードウェアの動作 ... 68 3.9.3 概要 ... 68 3.9.4 新しく学ぶレジスタ ... 68 3.9.5 アセンブリ ... 71 3.10 レッスン 9: Timer0... 72 3.10.1 レッスンの紹介 ... 72 3.10.2 ハードウェアの動作 ... 72 3.10.3 概要 ... 72 3.10.4 新しく学ぶレジスタ ... 72 3.10.5 アセンブリ ... 73 3.10.6 C 言語 ... 73 3.11 レッスン 10: 割り込みとプルアップ ... 74 3.11.1 レッスンの紹介 ... 74 3.11.2 ハードウェアの動作 ... 74 3.11.3 概要 ... 74 3.11.4 新しく学ぶレジスタ ... 76 3.11.5 新しく学ぶ命令 ... 77 3.11.6 アセンブリ ... 77 3.11.7 C 言語 ... 78 3.12 レッスン 11: 間接アドレス指定 ... 79 3.12.1 レッスンの紹介 ... 79 3.12.2 ハードウェアの動作 ... 79 3.12.3 概要 ... 79 3.12.4 新しく学ぶレジスタ ... 81 3.12.5 新しく学ぶ命令 ... 81 3.12.6 アセンブリ言語 ... 82 3.12.7 C 言語 ... 83 3.13 レッスン 12: ルックアップ テーブル ... 84 3.13.1 レッスンの紹介 ... 84 3.13.2 ハードウェアの動作 ... 84 3.13.3 概要 ... 84 3.13.4 新しく学ぶレジスタ ... 84 3.13.5 新しく学ぶレジスタ ... 86
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.6 2015 Microchip Technology Inc.
3.13.7 アセンブリ言語 ...88 3.13.8 C 言語 ...91 3.14 レッスン 13:EEPROM...93 3.14.1 レッスンの紹介 ...93 3.14.2 ハードウェアの動作 ...93 3.14.3 概要 ...93 3.14.4 新しく学ぶレジスタ ...94 3.14.5 新しく学ぶ命令 ...94 3.14.6 アセンブリ言語 ...94 3.14.7 C 言語 ...95
補遺
A. ブロック図と MPLAB
®X IDE のショートカット
A.1 MPLAB® X IDE の便利なショートカット...98A.2 レジスタ名の定義...98
まえがき
はじめに
この章には、PICkit™ 3 スタータキットを使い始める前に知っておくと便利な一般情 報を記載しています。主な内容は以下の通りです。 • 本書の構成 • 本書の表記規則 • 保証登録 • 推奨参考資料 • Microchip 社のウェブサイト • 開発システムの顧客変更通知サービス • カスタマサポート • 改訂履歴本書の構成
本書では、PICkit™ 3 スタータキットを開発ツールとして使って、ターゲット基板の ファームウェアのエミュレーションとデバッグを行う方法を説明します。以下に本書 の構成を示します。 • セクション第1 章 「概要」 • セクション第2 章 「PIC® MCU のアーキテクチャ」 • セクション第3 章 「レッスン」• 補遺A.「ブロック図と MPLAB® X IDE のショートカット」
お客様へのご注意
全ての文書の内容は時間と共に古くなります。本書も例外ではありません。Microchip 社の製品は、 お客様のニーズを満たすために常に改良を重ねており、実際のダイアログやツールが本書の説明と は異なる場合があります。最新の文書は弊社ウェブサイト(www.microchip.com)で公開しています。 文書は「DS」番号で識別します。この識別番号は、各ページのフッタのページ番号の前に記載して います。DS 番号「DSXXXXXA」の「XXXXX」は文書番号、「A」は文書のリビジョン レベルを表します。 開発ツールの最新情報はMPLAB® X IDE のオンラインヘルプで提供しています。[Help] メニューか ら[Topics] を選択すると、オンラインヘルプ ファイルのリストが表示されます。PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.8 2015 Microchip Technology Inc.
本書の表記規則
本書では以下の表記規則を適用します。 本書の表記規則 表記 意味 例 Arial/MS ゴシック フォント : 二重かぎカッコ: 『』 参考資料 『MPLAB® IDEユーザガイド』 テキストの強調 ... は唯一のコンパイラです... 角カッコ: [ ] ウィンドウ名 [Output] ウィンドウ ダイアログ名 [Settings] ダイアログ メニューの選択肢 [Enable Programmer] を選択 かぎカッコ: 「 」 ウィンドウまたはダイアロ グのフィールド名「Save project before build」
右山カッコ(>) を使い、角カッコ で囲まれた下線付きテキスト メニューパス File>Save 角カッコで囲んだ太字のテキ スト ダイアログのボタン [OK] をクリックする タブ [Power] タブをクリックする N‘Rnnnn Verilog 形式の数値 : N は総桁 数、R は基数、n は各桁の値 4‘b0010、2‘hF1 山カッコ(< >) で囲んだテキスト キーボードのキー <Enter>、<F1> を押す Courier New フォント :
標準のCourier New サンプル ソースコード #define START
ファイル名 autoexec.bat
ファイルパス c:\mcc18\h
キーワード _asm, _endasm, static
コマンドライン オプション -Opa+, -Opa-ビット値 0, 1 定数 0xFF, ‘A’ 斜体 変数の引数 file.o (file は有効な任意 のファイル名) 角カッコ: [ ] オプションの引数 mcc18 [options] file [options] 中カッコとパイプ文字: { | } どちらかの引数を選択する 場合(OR 選択 ) errorlevel {0|1} 省略記号... 繰り返されるテキスト var_name [, var_name...]
ユーザが定義するコード void main (void)
{ ... }
保証登録
同封の保証登録カードにご記入の上、お早めに郵送してください。折り返し製品の アップデート情報をお届けします。ソフトウェアのマイナーリリースは弊社ウェブサ イトで提供しております。推奨参考資料
本書では、PICkit™ 3 スタータキットの使い方を説明しています。その他の便利な文 書を、以下に一覧でご紹介します。以下のMicrochip 社文書を推奨します。 PICkit™ 3 スタータキットの Readme ファイルPICkit™ 3 スタータキットの使い方についての最新情報は、MPLAB X IDE のインス トール先ディレクトリのReadmes サブディレクトリにある「Readme for PICkit™ 3 Starter Kit Board User’s Guide.txt」ファイル (ASCII テキストファイル ) を参照してください。Readme ファイルには、本書に記載できなかった最新情報と既 知の問題を記載しています。 PIC16(L)F1825/29 データシート (DS41440) このデータシートはPIC16F1829 の機能についてまとめています。 PIC18(L)F1XK22 データシート (DS41365) このデータシートはPIC18F14K22 の機能についてまとめています。 Readme ファイル その他のツールの使い方についての最新情報は、MPLAB X IDE のインストール先ディ レクトリのReadmes サブディレクトリにある各ツールの Readme ファイルを参照し てください。Readme ファイルには、本書に記載できなかった最新情報と既知の問題 を記載しています。
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.10 2015 Microchip Technology Inc.
Microchip 社のウェブサイト
Microchip 社は自社が運営するウェブサイト (www.microchip.com) を通してオンライ ン サポートを提供しています。当ウェブサイトでは、お客様に役立つ情報とファイル を簡単に見つけ出せます。お好みのインターネット ブラウザを使って以下の内容をご 覧になれます。 • 製品サポート – データシートとエラッタ、アプリケーション ノート、サンプルコー ド、設計リソース、ユーザガイドとハードウェア サポート文書、最新ソフトウェア リリース、ソフトウェア アーカイブ • 一般的技術サポート – よく寄せられる質問 (FAQ)、技術サポートのご依頼、オンラ イン ディスカッション グループ、Microchip 社のコンサルタント プログラムおよび メンバーリスト • ご注文とお問い合わせ – 製品セレクタと注文ガイド、最新プレスリリース、セミ ナー/ イベントの一覧、お問い合わせ先 ( 営業所 / 販売代理店 ) の一覧開発システムの顧客変更通知サービス
Microchip 社の顧客変更通知サービスは、お客様に Microchip 社製品の最新情報をお 届けするサービスです。ご興味のある製品ファミリまたは開発ツールに関する変更、 更新、リビジョン、エラッタ情報をいち早くメールにてお知らせします。Microchip 社のウェブサイト www.microchip.com にアクセスし、[Customer Change Notification] からご登録ください。
以下の開発システム製品カテゴリをお選び頂けます。
• コンパイラ - Microchip 社の C コンパイラとその他の言語ツールの最新情報です。 これにはHI-TECH C® C16、MPLAB C18、MPLAB C30 C コンパイラ、MPASM™ およびMPLAB ASM30 アセンブラ、MPLINK™ および MPLAB LINK30 オブジェク ト リンカ、MPLIB™ および MPLAB LIB30 オブジェクト ライブラリアンが含まれ ます。
• インサーキット デバッガ – Microchip 社の MPLAB ICD 2、MPLAB ICD 3、PICkit™ 3 インサーキット デバッガの最新情報です。
• MPLAB® X IDE - Microchip 社の MPLAB IDE( 開発システムツール向け Windows® 統合開発環境) の最新情報です。これには MPLAB X IDE、MPLAB SIM シミュレー タ、MPLAB IDE プロジェクト マネージャ、一般的な編集およびデバッグ機能が含 まれます。
• プログラマ - Microchip 社のプログラマの最新情報です。これには MPLAB PM3 デ バイス プログラマと PICkit™ 3 開発用プログラマが含まれます。
カスタマサポート
Microchip 社製品をお使いのお客様は、以下のチャンネルからサポートをご利用頂け ます。 • 販売代理店 • 弊社営業所 • 技術サポート サポートは販売代理店までお問い合わせください。もしくは弊社までご連絡ください。 本書の末尾には各国営業所の一覧を記載しています。 技術サポートは下記のウェブページからもご利用頂けます。 http://support.microchip.com改訂履歴
リビジョン
A (2012 年 10 月 )
• 本書は初版です。リビジョン
B (2012 年 11 月 )
• セクション 3.5.3、3.5.4.1.1、3.11.3.2、表 3-15 を改訂しました。PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.12 2015 Microchip Technology Inc. NOTES:
第
1 章 概要
1.1
はじめに
本章ではキットに含まれるハードウェアを紹介し、ソフトウェアのダウンロードとイ ンストール方法についても簡単に説明します。1.2
ハイライト
本章の内容は以下の通りです。 - 新機能 - キットの内容 - PICkit 少ピン開発ボード - ソフトウェアの概要 - デモの実行1.3
新機能
このキットは、PICkit™ 2 スタータキットの後継製品です。従来の少ピン開発ボード (DM164120-1) を改良し、デバッグヘッダなしでコードの全機能をデバッグできるよ うにしています。ソフトウェアも新しい技術に対応するため更新しました。以下に新 機能の一覧を示します。 1. アセンブリとC の両言語でソフトウェアを提供 2. レッスンおよびモジュールの数を拡充 3. 従来のMPLAB® 8 に加えて MPLAB® X をサポート 4. 新しいエンハンスト ミッドレンジ PIC16 および PIC18 のルーチンを提供 5. ユニバーサルXC8 コンパイラを使用 以下にPICkit 少ピン開発ボードの変更点を示します。 1. ポテンショメータをRA4 に接続 ( 以前は RA0) 2. スイッチをRA2 に接続 ( 以前は RA3) この少ピン開発ボードは以前のものと互換です。以前のピンを新しいピンに接続する と、以前の機能に戻せます。1.4
キットの内容
1. PICkit 3 プログラマ (x1) 2. マイクロUSB ケーブル (x1) 3. PICkit 少ピン開発ボード ( 製品番号 :DM164130-9) (x1) 4. PIC16F1829-I/P (x1) 5. PIC18F14K22-I/P (x1) 13 のレッスンはウェブからダウンロードできます。 PIC16F1829 は新しいエンハンスト ミッドレンジ デバイスで、従来のミッドレンジ PIC16 MCU より多くの機能をサポートしています。 このキットに付属のソフトウェアはPIC16F1829 と PIC18F14K22 をサポートしてい ます。このソフトウェアはこれら 2 つのデバイスで動作するよう作成してありますPICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.14 2015 Microchip Technology Inc.
1.5
PICkit 少ピン開発ボード
18 ピン PIC MCU を使うにはボードに若干の変更が必要です。14 ピンおよび 20 ピン PIC MCU は全てのインターフェイス デバイスを利用できます。8 ピン PIC MCU を使
う場合はピンと LED を接続し直す必要があります。スイッチとポテンショメータは 8 ピンデバイスがサポートするピンに接続済みです。このボードは LED の横に穴を設 けてあり、ハードウェアの変更が必要な場合は簡単にはんだ付けできます。 この基板は、PICkit™ プログラマ等のインサーキット シリアル プログラマ ™(ICSP™) でプログラムできます。この基板には5 V を供給します。図1-1に、PICkit 少ピン開 発ボードを示します。 図1-1: PICkit 少ピン開発ボードのレイアウト 表1-1に、このボードに付属する2 つの PIC MCU に接続されている部品を示します。
1.6
ソフトウェアの概要
本書は、読者に電子工学の基礎知識がある事を前提としています。PIC MCU のプロ グラミング経験がなくてもかまいませんが、プログラミングに関する基礎知識やビッ トとバイトの違いといった基礎知識は必要です。 表1-1: ピン割り当て デバイス LED <DS4:DS1> スイッチ – SW1 ポテンショメータ – RP1PIC16F1829 <RC3:RC0> RA2 RA4
PIC18F14K22 <RC3:RC0> RA2 RA4
20-pin DIP Socket External Power
Push Button
ICSP™ Programming Header
14-pin Expansion Header
Generous Prototyping Area
Potentiometer
このソフトウェアはアセンブリとC で記述してあり、MPLAB X 統合開発環境 (IDE) とMPLAB 8 IDE の両方のプロジェクトを含んでいます。アセンブリで記述したコー ドは行数が多く複雑ですが、PIC MCU のハードウェアと密接に関係しているため、C と一緒にアセンブリも学習すると理解が深まります。C 言語は高級言語であるため、 プログラムの流れを容易に理解できます。各レッスンにはアセンブリと C の両方の コードがあり、どちらも機能は同じです。 ほとんどのレッスンは前のレッスンで学んだ内容を基にしているため、レッスンは 順番通りに進める事を推奨します。各レッスンでは、それぞれ新しい周辺モジュー ルまたは概念を学びます。本書をお読みになる際は、必ずソースコードを参照して ください。 エンハンスト ミッドレンジと PIC18 のコードを順に紹介し、その相違点について説 明します。
1.7
デモの実行
このボードのデバイスには、本書のレッスンが1 つプログラム済みです。このプログ ラムを実行するには、電源ヘッダ(P2) に 5 V を印加するか、プログラマ ヘッダ (P1) にプログラマを接続してIDE を使ってプログラマから 5 V を供給します。デモプログ ラムを実行すると、4 つの LED が 1 つずつ順番に点灯します ( ローテート )。プッシュ ボタン (SW1) を押すと、ローテートの方向が反転します。ポテンショメータ (RP1) を回すとローテートの速度が変わります。このデモプログラムは、本書のレッスン 1 ~ 7 の内容に基づいて作成しています。PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.16 2015 Microchip Technology Inc. NOTES:
第
2 章 PIC
®
MCU のアーキテクチャ
2.1
はじめに
本章では、エンハンスト ミッドレンジ PIC16F1829 (DS41440) と PIC18F14K22 (DS41365) のアーキテクチャを説明します。
2.2
コアの基礎
エンハンスト ミッドレンジ PIC16 MCU と PIC18 MCU は改良型ハーバード アーキテ クチャを採用しており、プログラムメモリとデータメモリが独立しています。この アーキテクチャではコード命令とデータに同時にアクセスできるため、より高速な実 行が可能です。現在の命令をデコードおよび実行中に、次の命令をフェッチします。 図2-1と図2-3から分かるようにデータバスとプログラムバスが分離しています。本 書では、これらの図に記載されたレジスタとモジュールのほとんどを取り上げます。 各ブロックの連携を理解するため、以下のブロック図を参照しながら各レッスンを進 めてください。 図2-1: エンハンスト ミッドレンジ PIC® MCU の概略ブロック図 Data Bus 8 14 Program Bus Instruction reg Program Counter 8 Level Stack (13-bit) Direct Addr 7 12 Addr MUX FSR reg STATUS reg MUX ALU Power-up Timer Oscillator Start-up Timer Power-on Reset Watchdog Timer Instruction Decode & Control Timing Generation OSC1/CLKIN OSC2/CLKOUT 8 8 Brown-out Reset 12 3 Internal Oscillator Block Configuration Data Bus 8 14 Program Bus Instruction reg Program Counter 8 Level Stack (13-bit) 7 Addr MUX FSR reg STATUS reg MUX ALU W Reg Instruction Decode & Control Timing Generation 8 8 3 Internal Oscillator Block Configuration 15 Data Bus 8 14 Program Bus Instruction Reg Program Counter 16-Level Stack (15-bit) 7 RAM Addr Addr MUX Indirect Addr FSR0 Reg STATUS Reg MUX ALU Instruction Decode and Control Timing Generation 8 8 3 Internal Oscillator Block Configuration Flash Program Memory RAM FSR reg FSR reg FSR1 Reg 15 15 MU X 15 Program Memory Read (PMR) 12 FSR reg FSR reg BSR Reg 5
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.18 2015 Microchip Technology Inc. 図2-2: エンハンスト ミッドレンジ PIC® MCU の概略データブロック図 PORTA EUSART Comparators MSSP Timer2 Timer1 Timer4 Timer0 ECCP1 ADC 10-Bit ECCP2 ECCP3 CCP4 CCP5 Timer6 PORTB PORTC PORTD PORTE LCD SR Latch
Note 1: See applicable chapters for more information on peripherals.
CPU Program Flash Memory EEPROM RAM Timing Generation INTRC Oscillator MCLR OSC1/CLKIN OSC2/CLKOUT 図2-1 Note: 周辺モジュールの詳細は、各モジュールに対応する章を参照してください。
図2-3: PIC18 の概略ブロック図 Instruction Decode and Control PORTA PORTB PORTC RA1 RA0 Data Latch Data Memory Address Latch Data Address<12> 12 Access BSR FSR0 FSR1 FSR2 inc/dec logic Address 4 12 4 PCH PCL PCLATH 8 31-Level Stack Program Counter PRODL PRODH 8 x 8 Multiply 8 BITOP 8 8 ALU<8> 20 8 8 Table Pointer<21> inc/dec logic 21 8 Data Bus<8> Table Latch 8 IR 12 3 ROM Latch PCLATU PCU EUSART
Comparator MSSP 10-bit ADC
Timer2
Timer1 Timer3
Timer0
ECCP1 BOR EEPROMData
W Instruction Bus <16> STKPTR Bank 8 State machine control signals Decode 8 8 Power-up Timer Oscillator Start-up Timer Power-on Reset Watchdog Timer OSC1(2) OSC2(2) VDD, Internal Oscillator Fail-Safe Clock Monitor Precision ReferenceBand Gap VSS MCLR(1) Block LFINTOSC Oscillator 16 MHz Oscillator Single-Supply Programming FVR FVR FVR CVREF Address Latch Program Memory Data Latch CVREF RA3 RA4 RA5 RB4 RB5 RB6 RB7 RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 (512/768 bytes) RA1 Note 1: RA3 を使うには MCLR 機能を無効にする必要があります。
2: OSC1/CLKIN と OSC2/CLKOUT は、特定のオシレータモードにおいてこれらのピンをデジタル I/O として 使っていない場合のみ使えます。
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.20 2015 Microchip Technology Inc.
2.3
データ
/ プログラムバス
データバスはポートピンを介してデバイス外部および全ての周辺レジスタ( 例 : タイ マ、ADC、PWM) に接続しています。プログラムバスは、プログラムが格納される フラッシュメモリに接続しています。アセンブル済みのコードはここに書き込まれ ます。2.4
アキュムレータ
アキュムレータはワーキング レジスタ (WREG) の 1 つだけです。アキュムレータは 算術演算等データバスに関連する全タスクを処理します。ALU が扱うデータサイズは 8 ビットで、8 ビット MCU の名称はここに由来します。2.5
命令
命令は、PIC MCU が実行すべき処理の内容 ( ビットシフト、ジャンプ等 ) を指示し ます。プログラムメモリに格納されるプログラムで中心的な役割を果たすのが命令 です。エンハンスト ミッドレンジ PIC MCU 全てで命令数は 49 個のみです。PIC18 には 75 個の命令があります。PIC MCU はごくわずかの命令を覚えるだけで良く、 RISC( 縮小命令セット コンピューティング ) プロセッサと呼ばれます。 各命令の詳細は、この後のレッスン時に説明します。ここでは各命令の基本構成につ いて説明します。 1 命令サイクルは、4 クロックサイクルで構成されます。つまり PIC MCU の動作周 波数が4 MHz の場合、1 命令の実行には 1 µs かかります (式2-1参照)。 式2-1: 命令実行時間 基本的に命令は全て 1 命令サイクルで実行されます。例外は条件テストが真の場合、 またはプログラム カウンタ (PC) が変わる場合です。これらの場合には、NOP (No Operation) 命令サイクルが追加される、実行に 2 命令サイクルを要します。例2-1 例2-1: この命令はピンRA0 が High (= 1) の場合のみ 2 命令サイクルかかります。これはス キップ動作によってプログラム カウンタの値が変化するためです。 PIC18 は、エンハンスト ミッドレンジ PIC16 アーキテクチャに比べワードサイズが 拡張されています。PIC18 のワードサイズは 16 ビット幅で、この中にオペコードと 必要な全てのオペランドを含みます。エンハンスト ミッドレンジ PIC16 のワードサ イズは14 ビット幅です。オペコードは各命令に固有で、プロセッサによって解釈さ れます。 オペコードのフォーマットには以下の4 つがあります。 1. バイト指向 2. ビット指向 3. リテラル 4. 制御 T clock cycle 1 FOSC ---= 4 * T 4 FOSC --- 4 4 MHz --- 1 µs = = = BTFSS PORTA, RA02.6
バイト指向
エンハンスト ミッドレンジ PIC16 のバイト指向命令は全て 6 ビットのオペコード、7 ビットのファイルアドレス、1 ビットの結果格納先ビットで構成されます。PIC18 の バイト指向命令は全て6 ビットのオペコード、8 ビットのファイルアドレス、1 ビッ トの結果格納先ビット、1 ビットの RAM アクセスビットで構成されます。これら全 てのビットフィールドのサイズを合計すると、エンハンスト ミッドレンジ PIC16 コ アの場合は命令ワードサイズの14 ビット幅に一致します。同様に、PIC18 の場合も 全てのビットフィールドのサイズを合計すると 16 ビット幅のワードサイズに一致し ます。 バンクセレクト レジスタ (BSR) を使ってユーザがバンクを選択する場合、PIC18 の RAM アクセスビット (a) をセットします。PIC16 の場合、ディレクティブの banksel を使って常に正しいバンクに切り換える必要があります。これは、最初のいくつかの レッスンで説明します。 結果格納先ビット (d) は、結果を WREG に格納するか元のファイルレジスタに書き 戻すかを指定します。「d」= 0 の場合は結果を WREG レジスタに格納します。「d」= 1 の場合は結果をファイルレジスタに書き込みます。 ファイルレジスタ (f) は、どのレジスタを使うかを指定します。特殊機能レジスタ (SFR) または汎用レジスタ (GPR) を指定できます。 例2-2:この命令はWREG の内容と data を加算し、結果をファイルレジスタ data に書き戻 します。 PIC18 では、あるファイルレジスタのデータを WREG を使わずに別のファイルレジ スタへ直接移動できます。エンハンスト ミッドレンジ PIC16 アーキテクチャでは、 データ移動は必ずWREG 経由で行います。
2.7
ビット指向
ビット指向命令はファイルレジスタの特定の1 ビットに対して演算を実行します。こ れらの命令はファイルレジスタの特定の 1 ビットをセットまたはクリアします。ま た、ファイルレジスタの特定のビットを検査する事もできます。エンハンスト ミッド レンジPIC16 のビット指向命令は全て 4 ビットのオペコード、7 ビットのファイルア ドレス、3 ビットのビットアドレスで構成されます。PIC18 のビット指向命令は全て 4 ビットのオペコード、8 ビットのファイルアドレス、3 ビットのビットアドレス、1 ビットのRAM アクセスビットで構成されます。 例2-3: この命令は、PORTA レジスタのピン RA0 をセットします。2.8
リテラル
リテラル命令は、命令内にデータオペランドを含みます。どちらのアーキテクチャも 8 ビットの即値を使います。残りのビットはオペコードに使います。 例2-4:この命令は「A」の ASCII 値 (0x41) を WREG に格納します。 ADDWF data,f
BSF PORTA,RA0
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.22 2015 Microchip Technology Inc.
2.9
制御
プログラム カウンタに格納するプログラムメモリのアドレスを指定する命令を制御 命令と呼びます。これには call、goto、branch が含まれます。これらの命令はそ
れぞれワード長が異なります。詳細は、各PIC MCU のデータシートで「命令セット
図2-4: エンハンスト ミッドレンジ PIC16 命令の一般的な形式
Byte-oriented file register operations
13 8 7 6 0 d = 0 for destination W
OPCODE d f (FILE #) d = 1 for destination f
f = 7-bit file register address
Bit-oriented file register operations
13 10 9 7 6 0 OPCODE b (BIT #) f (FILE #) b = 3-bit bit address
f = 7-bit file register address
Literal and control operations
13 8 7 0 OPCODE k (literal) k = 8-bit immediate value
13 11 10 0 OPCODE k (literal)
k = 11-bit immediate value General
CALL and GOTO instructions only
MOVLP instruction only
13 5 4 0 OPCODE k (literal) k = 5-bit immediate value
MOVLB instruction only
13 9 8 0 OPCODE k (literal) k = 9-bit immediate value
BRA instruction only
FSR Offset instructions 13 7 6 5 0 OPCODE n k (literal) n = appropriate FSR FSR Increment instructions 13 7 6 0 OPCODE k (literal) k = 7-bit immediate value
13 3 2 1 0 OPCODE n m (mode) n = appropriate FSR
m = 2-bit mode value k = 6-bit immediate value
13 0 OPCODE OPCODE only ADDWF MYREG, W BSF MYREG, BIT MOVLW 0x45 CALL LABEL MOVLP 15 MOVLB 3 BRA LABEL ADDFSR FSR1, 3 MOVIW ++FSR0 Example Instruction
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.24 2015 Microchip Technology Inc. 図2-5: PIC18 の命令の一般的な形式
図2-1と図2-3のブロック図にはいくつかの小さな違いがあります。本書では、いく つかの重要な相違点について説明します。
Byte-oriented file register operations
15 10 9 8 7 0 d = 0 for result destination to be WREG register
OPCODE d a f (FILE #) d = 1 for result destination to be file register (f) a = 0 to force Access Bank
Bit-oriented file register operations
15 12 11 9 8 7 0 OPCODE b (BIT #) a f (FILE #)
b = 3-bit position of bit in file register (f)
Literal operations
15 8 7 0 OPCODE k (literal) k = 8-bit immediate value
Byte to Byte move operations (2-word)
15 12 11 0 OPCODE f (Source FILE #)
CALL, GOTO and Branch operations
15 8 7 0 OPCODE n<7:0> (literal)
n = 20-bit immediate value a = 1 for BSR to select bank f = 8-bit file register address
a = 0 to force Access Bank a = 1 for BSR to select bank f = 8-bit file register address
15 12 11 0 1111 n<19:8> (literal) 15 12 11 0
1111 f (Destination FILE #) f = 12-bit file register address
Control operations
Example Instruction
ADDWF MYREG, W, B
MOVFF MYREG1, MYREG2
BSF MYREG, bit, B MOVLW 7Fh GOTO Label 15 8 7 0 OPCODE n<7:0> (literal) 15 12 11 0 1111 n<19:8> (literal) CALL MYFUNC 15 11 10 0 OPCODE n<10:0> (literal) S = Fast bit BRA MYFUNC 15 8 7 0
OPCODE n<7:0> (literal) BC MYFUNC S
2.10 スタックレベル
スタックレベルはエンハンスト ミッドレンジ コアが 16 段、PIC18 が 31 段です。ス タックの段数が多いほど、ソフトウェアでサブルーチンを呼び出して元のアドレスに 戻る前に別のサブルーチンを呼び出す階層を多くできます。 call または goto 命令を実行するとプログラム カウンタはコードの別の場所を指し 示すように書き換えられます。これらの命令がなければ、コードは最初から最後まで 順番通りに実行されるだけです。その意義については、後述します。 プログラムメモリの別の位置へジャンプする前に、コールスタックに戻りアドレスを 保存しておきます。 参考までに挙げると、ベースラインMCU (PIC10/12) にはコールスタックの深さが 2 段しかないものもあります。スタックレベルが浅いと、モジュール方式のコードを作 成するのは非常に困難です。2.11 メモリ構成
エンハンスト ミッドレンジ PIC16 および PIC18 MCU のメモリは、以下の 3 つで構 成されます。 1. プログラムメモリ 2. データ RAM 3. データ EEPROM
2.12 プログラムメモリ
プログラムメモリは以下の5 つで構成されます。 1. フラッシュ プログラムメモリ 2. コンフィグレーション ワード 3. デバイス ID 4. リビジョン ID 5. ユーザ ID2.12.1
フラッシュ
プログラムメモリ
エンハンスト ミッドレンジおよび PIC18 MCU は全てプログラムメモリにフラッシュ を使っています。フラッシュの採用により、PIC MCU は数十万回の消去と書き込み を可能にしています。 PIC18 のプログラムバスは 21 ビット幅で、エンハンスト ミッドレンジ コアは 15 ビッ ト幅です。プログラムバスの幅が広いほど大きなアドレスを指定できるため、プログ ラムメモリの容量を大きくできます。図2-6に示すように、エンハンスト ミッドレン ジ コアのプログラム カウンタは 32K x 14 のプログラムメモリ空間をアドレス指定で きます。PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.26 2015 Microchip Technology Inc.
図2-6: エンハンスト ミッドレンジのプログラムメモリ マップとコール スタック 図2-7に示す通り、PIC18 MCU は 2 MB のプログラムメモリ空間をアドレス指定で きます。また、割り込みベクタの数がエンハンスト ミッドレンジは 1 つですが、PIC18 MCU は 2 です。大きな違いとして、エンハンスト ミッドレンジ コアのプログラムメ モリは複数ページありますが、PIC18 にはページの概念はありません。エンハンスト ミッドレンジ コアでは、現在のページから別のページへ実行が移る場合はページ切り 換えが必要です。この後のレッスンで紹介するエンハンスト ミッドレンジ PIC16 の コードはどれも1 ページを超えないため、ページの切り換えは不要です。コードが別 のページにオーバーフローする場合、pagesel が必要である事を示す警告がアセン ブラから出力されます。 PC<14:0> 15 0000h 0004h Stack Level 0 Stack Level 15 Reset Vector Interrupt Vector Stack Level 1 0005h On-chip Program Memory Page 0 07FFh Rollover to Page 0 0800h 0FFFh 1000h 7FFFh Page 1 Rollover to Page 3 Page 2 Page 3 17FFh 1800h 1FFFh 2000h CALL, CALLW RETURN, RETLW Interrupt, RETFIE
図2-7: PIC18 のプログラムメモリ マップとコールスタック
2.12.2
コンフィグレーション
ワード
これらのPIC MCU には複数のコンフィグレーション ワード ( メモリ ) があり、これ によって動作時の設定を書き換えられるようにしています。オシレータの選択、メモ リ保護、低電圧検出等を設定できます。設定項目の内容はデバイスによって異なり ます。エンハンスト ミッドレンジのコンフィグレーション ビットは、コード実行中 は読み出し専用です。PIC18 はコード実行中に全てのコンフィグレーション ビット が読み出し可能で、ほとんどのコンフィグレーション ビットに書き込みできます。コ ンフィグレーション ビットは特別な方法で書き込みます。これについては、レッスン のソースファイルで見ていきます。2.12.3
デバイス
ID
デバイス ID は読み出し専用で、PIC MCU のデバイス固有 ID を格納しています。 PIC16F1829 の ID は DEVICEID に格納され、PIC18F14K22 の ID は DEVID1 と DEVID2 に格納されます。2.12.4
リビジョン
ID
各PIC MCU にはシリコン リビジョンを示す 5 ビットの ID があります。これらのビッ トは読み出し専用で、DEVID レジスタに格納されています。通常、1 つの PIC MCU に対して複数のシリコン リビジョンがあります。各リビジョンのエラーとその回避策 はエラッタで説明しています。データシートと併せて参照してください。 PC<20:0> Stack Level 1 Stack Level 31 Reset Vector
Low Priority Interrupt Vector
CALL,RCALL,RETURN RETFIE,RETLW 21 0000h 0018h High Priority Interrupt Vector 0008h
User Memory S pace 1FFFFFh 4000h 3FFFh 200000h On-Chip Program Memory Read ‘0’ 1FFFh 2000h On-Chip Program Memory Read ‘0’ PIC18(L)F14K22 PIC18(L)F13K22
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.28 2015 Microchip Technology Inc.
2.12.5
ユーザ
ID
これら4 つのメモリアドレスは、ユーザがチェックサムまたはその他のコード識別番 号を格納できるID 位置として指定されています。これらは通常実行中に読み書き可 能です。2.13 データメモリ
これら2 つのデバイスファミリはデータメモリのレイアウトが大きく異なっています。 どちらのファミリもデータメモリは以下の4 つで構成されます。 1. コアレジスタ 2. 特殊機能レジスタ 3. 汎用 RAM 4. 共通 RAM2.13.1
コアレジスタ
コアレジスタにはPIC MCU の基本動作に直接影響するレジスタが含まれ、データメ モリの全てのバンクに同じレジスタが割り当てられています。12 個のコアレジスタ のうち、以下に3 つの例を示します。 1. STATUS 2. WREG 3. INTCONSTATUS レジスタは ALU による算術演算の状態を格納します。WREG レジスタはレ ジスタとの間でデータの受け渡しに使います。INTCON レジスタは PIC MCU を割り 込みベクタへジャンプさせる各種割り込みのイネーブルビットとフラグビットを格 納しています。
2.13.2
特殊機能レジスタ
特殊機能レジスタはデバイス内蔵の周辺モジュールにアクセスする際に使います。エ ンハンスト ミッドレンジ コアでは、特殊機能レジスタは各データメモリ バンクのコ アレジスタ直後の20 バイト ( アドレス x0Ch/x8Ch ~ x1Fh/x9Fh) を占めます。PIC18 コアの特殊機能レジスタは全てアクセスRAM にあります (セクション2.14「バンク」 参照)。2.13.3
汎用
RAM
汎用RAM は、ユーザ アプリケーションでのデータ格納および一時的なデータと状態 を保存するために使います。この領域はプログラムでRAM として使えますが、アク セス前にバンクを正しく選択しておく必要があります。エンハンスト ミッドレンジ コアでは、各データメモリ バンクのSFR直後に最大80バイトの汎用RAMがあります。2.13.4
共通
RAM
エンハンスト ミッドレンジ コアには全てのバンクからアクセス可能な 16 バイトの共 通RAM があります。PIC18 アーキテクチャにはアクセス RAM と呼ばれる同様の RAM が最大96 バイトあります。2.14 バンク
PIC18F14K22 のデータメモリは 16 個のバンク (1 バンク 256 バイト ) に分割されま す。PIC16F1829 のデータメモリは 32 個のメモリバンク (1 バンク 128 バイト ) に分 割されます。エンハンスト ミッドレンジ PIC16 では、バンクは以下の内容で構成さ れます。 1. 12 個のコアレジスタ2. 20 個の特殊機能レジスタ (SFR) 3. 最大 80 バイトの汎用 RAM (GPR) 4. 16 バイトの共通 RAM ( 全バンクからアクセス可能 ) 図2-8に、エンハンスト ミッドレンジ PIC16 のバンク構成を示します。 図2-8: エンハンスト ミッドレンジのメモリバンク構成 アドレス70h ~ 7Fh は全てのバンクで共有します。この 16 バイトの RAM 領域に格 納したデータは、バンク切り換えなしでアクセスできるため便利です。図 2-9 に、 PIC16F1829 の最初の 8 バンクを示します。16 バイトの共通 RAM 同様、先頭の 12 個のコアレジスタも全バンクからアクセスできます。 0Bh 0Ch 1Fh 20h 6Fh 70h 7Fh 00h Common RAM (16 bytes) General Purpose RAM
(80 bytes maximum) Core Registers
(12 bytes)
Special Function Registers (20 bytes maximum)
Memory Region 7-bit Bank Offset
PICkit™ 3
スタータキット
ユーザガイド
DS41628B_JP - p. 30 2015 Microchip T echnolo gy Inc. 図2-9: PIC16F1829 のメモリマップ ( レジスタ読み書きの前にバンク選択が必要 )BANK 0 BANK 1 BANK 2 BANK 3 BANK 4 BANK 5 BANK 6 BANK 7
000h INDF0 080h INDF0 100h INDF0 180h INDF0 200h INDF0 280h INDF0 300h INDF0 380h INDF0 001h INDF1 081h INDF1 101h INDF1 181h INDF1 201h INDF1 281h INDF1 301h INDF1 381h INDF1 002h PCL 082h PCL 102h PCL 182h PCL 202h PCL 282h PCL 302h PCL 382h PCL 003h STATUS 083h STATUS 103h STATUS 183h STATUS 203h STATUS 283h STATUS 303h STATUS 383h STATUS 004h FSR0L 084h FSR0L 104h FSR0L 184h FSR0L 204h FSR0L 284h FSR0L 304h FSR0L 384h FSR0L 005h FSR0H 085h FSR0H 105h FSR0H 185h FSR0H 205h FSR0H 285h FSR0H 305h FSR0H 385h FSR0H 006h FSR1L 086h FSR1L 106h FSR1L 186h FSR1L 206h FSR1L 286h FSR1L 306h FSR1L 386h FSR1L 007h FSR1H 087h FSR1H 107h FSR1H 187h FSR1H 207h FSR1H 287h FSR1H 307h FSR1H 387h FSR1H 008h BSR 088h BSR 108h BSR 188h BSR 208h BSR 288h BSR 308h BSR 388h BSR 009h WREG 089h WREG 109h WREG 189h WREG 209h WREG 289h WREG 309h WREG 389h WREG 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah PCLATH 20Ah PCLATH 28Ah PCLATH 30Ah PCLATH 38Ah PCLATH 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh INTCON 20Bh INTCON 28Bh INTCON 30Bh INTCON 38Bh INTCON 00Ch PORTA 08Ch TRISA 10Ch LATA 18Ch ANSELA 20Ch WPUA 28Ch — 30Ch — 38Ch INLVLA 00Dh PORTB(1) 08Dh TRISB(1) 10Dh LATB(1) 18Dh ANSELB(1) 20Dh WPUB(1) 28Dh — 30Dh — 38Dh INLVLB(1)
00Eh PORTC 08Eh TRISC 10Eh LATC 18Eh ANSELC 20Eh WPUC 28Eh — 30Eh — 38Eh INLVLC 00Fh — 08Fh — 10Fh — 18Fh — 20Fh — 28Fh — 30Fh — 38Fh — 010h — 090h — 110h — 190h — 210h — 290h — 310h — 390h — 011h PIR1 091h PIE1 111h CM1CON0 191h EEADRL 211h SSP1BUF 291h CCPR1L 311h CCPR3L 391h IOCAP 012h PIR2 092h PIE2 112h CM1CON1 192h EEADRH 212h SSP1ADD 292h CCPR1H 312h CCPR3H 392h IOCAN 013h — 093h — 113h CM2CON0 193h EEDATL 213h SSP1MSK 293h CCP1CON 313h CCP3CON 393h IOCAF 014h — 094h — 114h CM2CON1 194h EEDATH 214h SSP1STAT 294h PWM1CON 314h — 394h IOCBP(1)
015h TMR0 095h OPTION_REG 115h CMOUT 195h EECON1 215h SSP1CON 295h CCP1AS 315h — 395h IOCBN(1)
016h TMR1L 096h PCON 116h BORCON 196h EECON2 216h SSP1CON2 296h PSTR1CON 316h — 396h IOCBF(1) 017h TMR1H 097h WDTCON 117h FVRCON 197h — 217h SSP1CON3 297h — 317h — 397h — 018h T1CON 098h OSCTUNE 118h DACCON0 198h — 218h — 298h CCPR2L 318h CCPR4L 398h — 019h T1GCON 099h OSCCON 119h DACCON1 199h RCREG 219h SSP2BUF(1) 299h CCPR2H 319h CCPR4H 399h — 01Ah TMR2 09Ah OSCSTAT 11Ah SRCON0 19Ah TXREG 21Ah SSP2ADD(1) 29Ah CCP2CON 31Ah CCP4CON 39Ah CLKRCON 01Bh PR2 09Bh ADRESL 11Bh SRCON1 19Bh SPBRGL 21Bh SSP2MSK(1) 29Bh PWM2CON 31Bh — 39Bh — 01Ch T2CON 09Ch ADRESH 11Ch — 19Ch SPBRGH 21Ch SSP2STAT(1) 29Ch CCP2AS 31Ch — 39Ch MDCON 01Dh — 09Dh ADCON0 11Dh APFCON0 19Dh RCSTA 21Dh SSP2CON(1) 29Dh PSTR2CON 31Dh — 39Dh MDSRC 01Eh CPSCON0 09Eh ADCON1 11Eh APFCON1 19Eh TXSTA 21Eh SSP2CON2(1) 29Eh CCPTMRS 31Eh — 39Eh MDCARL 01Fh CPSCON1 09Fh — 11Fh — 19Fh BAUDCON 21Fh SSP2CON3(1) 29Fh — 31Fh — 39Fh MDCARH 020h 汎用 レジスタ 96 バイト 0A0h 汎用 レジスタ 80 バイト 120h 汎用 レジスタ 80 バイト 1A0h 汎用 レジスタ 80 バイト 220h 汎用 レジスタ 80 バイト 2A0h 汎用 レジスタ 80 バイト 320h 汎用 レジスタ 80 バイト 3A0h 汎用 レジスタ 80 バイト
06Fh 0EFh 16Fh 1EFh 26Fh 2EFh 36Fh 3EFh 070h 0F0h アクセス 70h ~ 7Fh 170h アクセス 70h ~ 7Fh 1F0h アクセス 70h ~ 7Fh 270h アクセス 70h ~ 7Fh 2F0h アクセス 70h ~ 7Fh 370h アクセス 70h ~ 7Fh 3F0h アクセス 70h ~ 7Fh 07Fh 0FFh 17Fh 1FFh 27Fh 2FFh 37Fh 3FFh 凡例: 未実装のデータメモリ領域、「0」として読み出し Note 1: PIC16(L)F1829 でのみ使えます。
アセンブリでPIC16F1829 を使う際は図2-9を常に参照し、SFR への書き込み前に 正しいバンクを選択している事を確認します。 PIC18 MCU ではバンク選択が効率化されており、SFR へのアクセスにはバンク切り 換えが不要です。これは、データメモリの一部をマッピングしたアクセスバンクが用 意されており、この領域にはユーザがバンク セレクト レジスタを指定しなくてもア クセスできるためです。アクセスバンクは、バンク0 のメモリの先頭 96 バイトとバ ンク15 の末尾 160 バイトで構成されます。下位のブロックは「アクセス RAM」と呼 ばれ、GPR で構成されます。上位のブロックにはデバイスの SFR ( バンク 15) がマッ ピングされます。この後のレッスンで見ていくように、PIC18 のアセンブリコードに はバンク切り換えがありません。図2-10と図2-11に、この改良されたマッピング方 式を示します。
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.32 2015 Microchip Technology Inc. 図2-10: PIC18F14K22 のデータメモリ マップ
Bank 0
Bank 1
Bank 14
Bank 15
Data Memory Map
BSR<3:0> = 0000 = 0001 = 1111 060h 05Fh F60h FFFh 00h 5Fh 60h FFh Access Bank 「a」= 0 の場合 : BSR を無視してアクセスバンク を使います。 先頭の96 バイトはバンク 0 の汎 用RAM です。 残りの160 バイトはバンク 15 の 特殊機能レジスタ(SFR) です。 「a」= 1 の場合 : BSR で指定したバンクを命令で 使います。 F5Fh F00h EFFh 1FFh 100h 0FFh 000h Access RAM FFh 00h FFh 00h FFh 00h GPR SFR
Access RAM High Access RAM Low Bank 2 = 0110 = 0010 (SFRs) 2FFh 200h 3FFh 300h 4FFh 400h 5FFh 500h 6FFh 600h 7FFh 700h 8FFh 800h 9FFh 900h AFFh A00h BFFh B00h CFFh C00h DFFh D00h E00h Bank 3 Bank 4 Bank 5 Bank 6 Bank 7 Bank 8 Bank 9 Bank 10 Bank 11 Bank 12 Bank 13 FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h FFh 00h = 0011 = 0100 = 0101 = 0111 = 1000 = 1001 = 1010 = 1011 = 1100 = 1101 = 1110 UNUSED Read 00h Unused F53h SFR(1) Note 1: F53h ~ F5Fh のアドレスにある SFR はアクセスバンクには含まれません。
図2-11: PIC18F14K22 のバンク 15 に含まれる特殊機能レジスタ (F60h ~ FFFh はアクセス RAM に含まれる )
図2-11に示したバンク15 の SFR のうち、F60h ~ FFFh のレジスタは全てアクセス
Address Name Address Name Address Name Address Name Address Name
FFFh TOSU FD7h TMR0H FAFh SPBRG F87h —(2) F5Fh —(2) FFEh TOSH FD6h TMR0L FAEh RCREG F86h —(2) F5Eh —(2) FFDh TOSL FD5h T0CON FADh TXREG F85h —(2) F5Dh —(2) FFCh STKPTR FD4h —(2) FACh TXSTA F84h —(2) F5Ch —(2) FFBh PCLATU FD3h OSCCON FABh RCSTA F83h —(2) F5Bh —(2)
FFAh PCLATH FD2h OSCCON2 FAAh —(2) F82h PORTC F5Ah —(2)
FF9h PCL FD1h WDTCON FA9h EEADR F81h PORTB F59h —(2)
FF8h TBLPTRU FD0h RCON FA8h EEDATA F80h PORTA F58h —(2) FF7h TBLPTRH FCFh TMR1H FA7h EECON2(1) F7Fh ANSELH F57h —(2) FF6h TBLPTRL FCEh TMR1L FA6h EECON1 F7Eh ANSEL F56h —(2) FF5h TABLAT FCDh T1CON FA5h —(2) F7Dh —(2) F55h —(2) FF4h PRODH FCCh TMR2 FA4h —(2) F7Ch —(2) F54h —(2)
FF3h PRODL FCBh PR2 FA3h —(2) F7Bh —(2) F53h —(2)
FF2h INTCON FCAh T2CON FA2h IPR2 F7Ah IOCB FF1h INTCON2 FC9h SSPBUF FA1h PIR2 F79h IOCA FF0h INTCON3 FC8h SSPADD FA0h PIE2 F78h WPUB FEFh INDF0(1) FC7h SSPSTAT F9Fh IPR1 F77h WPUA FEEh POSTINC0(1) FC6h SSPCON1 F9Eh PIR1 F76h SLRCON FEDh POSTDEC0(1) FC5h SSPCON2 F9Dh PIE1 F75h —(2)
FECh PREINC0(1) FC4h ADRESH F9Ch —(2) F74h —(2)
FEBh PLUSW0(1) FC3h ADRESL F9Bh OSCTUNE F73h —(2)
FEAh FSR0H FC2h ADCON0 F9Ah —(2) F72h —(2) FE9h FSR0L FC1h ADCON1 F99h —(2) F71h —(2) FE8h WREG FC0h ADCON2 F98h —(2) F70h —(2) FE7h INDF1(1) FBFh CCPR1H F97h —(2) F6Fh SSPMASK FE6h POSTINC1(1) FBEh CCPR1L F96h —(2) F6Eh —(2)
FE5h POSTDEC1(1) FBDh CCP1CON F95h —(2) F6Dh CM1CON0
FE4h PREINC1(1) FBCh VREFCON2 F94h TRISC F6Ch CM2CON1
FE3h PLUSW1(1) FBBh VREFCON1 F93h TRISB F6Bh CM2CON0 FE2h FSR1H FBAh VREFCON0 F92h TRISA F6Ah —(2) FE1h FSR1L FB9h PSTRCON F91h —(2) F69h SRCON1 FE0h BSR FB8h BAUDCON F90h —(2) F68h SRCON0 FDFh INDF2(1) FB7h PWM1CON F8Fh —(2) F67h —(2)
FDEh POSTINC2(1) FB6h ECCP1AS F8Eh —(2) F66h —(2)
FDDh POSTDEC2(1) FB5h —(2) F8Dh —(2) F65h —(2) FDCh PREINC2(1) FB4h —(2) F8Ch —(2) F64h —(2) FDBh PLUSW2(1) FB3h TMR3H F8Bh LATC F63h —(2) FDAh FSR2H FB2h TMR3L F8Ah LATB F62h —(2) FD9h FSR2L FB1h T3CON F89h LATA F61h —(2)
FD8h STATUS FB0h SPBRGH F88h —(2) F60h —(2)
凡例: = 未実装のデータメモリ領域、「0」として読み出し
Note 1: これは物理レジスタではありません。
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.34 2015 Microchip Technology Inc.
2.15 データ EEPROM メモリ
データEEPROM はデータ RAM とプログラムメモリの両方から独立した不揮発性メ モリアレイで、プログラムデータの長期格納に使います。EEPROM はレジスタファ イルにもプログラムメモリ空間にも直接マッピングされておらず、特殊機能レジスタ を介して間接的にアドレス指定します。EEPROM は通常動作中に読み書き可能です。 PIC16F1829 と PIC18F14K22 はどちらも 256 バイトの EEPROM を内蔵しています。 このEEPROM には高い消去 / 書き込み耐性があります。バイト書き込みを実行する と、書き込み位置を自動的に消去してから新しいデータが書き込まれます。詳細はセ クション3.14「レッスン 13:EEPROM」を参照してください。
2.16 プログラミングの基礎
このセクションでは、アセンブリとC の基礎について簡単に説明します。C プログラ ミングについては、さらに詳しいチュートリアルをウェブで見つける事ができます。 本書では、PIC16F1829 と PIC18F14K22 の両方に XC8 コンパイラ v.1.00 を使います。 これ以降のバージョンであれば問題なく動作します。まず XC8 コンパイラのユーザ ガイドからお読みになる事を推奨します。C 言語は移植性が非常に高く、ほとんどの コンパイラで問題なくビルドできるのが大きな利点の1 つです。 アセンブリはコンパイルされるのではなく、MPASM と呼ばれるユーティリティでア センブルされます。本書では、全てのPIC1X MCU に対応したユニバーサル アセンブ ラのMPASM アセンブラ v5.43 を使います。 C 等の高級言語は、扱うマイクロプロセッサのアーキテクチャを理解していなくても プログラミングできるのが大きな利点の1 つです。アーキテクチャに関する知識はコ ンパイラが持っているため、コンパイラに任せておけばC コードをアセンブリにコン パイルしてくれます。アセンブリを使う場合、PIC MCU の命令セットを使う必要が あり、さらにメモリマップを理解する必要があります。アセンブリを使うと、PIC MCU のアーキテクチャに関する知識が身につくだけでなく、コードサイズも大幅に 縮小できるという利点があります。2.16.1
MPASM™ アセンブラの動作
本書のレッスンは全て絶対コードで記述しています。つまり、アセンブラが必要とす るものは全てソースファイルに含まれています。このプロセスを以下に示します。 図2-12: MPASM アセンブラの動作 この方法でソースファイルをアセンブルする場合、ソースファイルで使っている全て の変数とルーチンをそのソースファイル内か、そのソースファイルに明示的にインク ルードされているファイル内で定義する必要があります。アセンブルがエラーなく完 了すると、ターゲットのPIC MCU で実行可能なマシンコードを含む HEX ファイルが 生成されます。このファイルをデバッガで使ってコード実行をテストする事も、デバイス プログラマで使ってマイクロコントローラをプログラミングする事もできます。
2.16.2
XC8 の動作
コンパイラは、高級言語で記述したコードをPIC MCU が理解できるレベルに変換す るのに必要な処理を全て実行します。図2-13に、この処理の流れを示します。
図2-13: XC8 の動作 コンパイラとアセンブラから出力されるのはどちらもHEX ファイルです。コンパイラ が生成するアセンブリは、MPLAB® IDE の逆アセンブリ ウィンドウで表示できます。 図2-14: 逆アセンブリ ウィンドウに表示したコード 図2-14は、レッスン5 の逆アセンブリの一部を表示したものです。C は直感的に理 解および記述できるよう設計された言語です。C の各コード行の下には 2 行のコード が表示されています。これは、C と同じ結果が得られるように PIC MCU 固有の命令 を使って記述したものです。
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.36 2015 Microchip Technology Inc.
2.16.3
アセンブラでの数値表現
特に明記しない限り、アセンブラはプログラム内の数値定数を16 進数 ( 基数 16) と 見なします。2 進数 ( 基数 2)、8 進数 ( 基数 8)、10 進数 ( 基数 10)、ASCII 符号もサ ポートされます。2.16.4
XC8 コンパイラでの数値表現
特に明記しない限り、コンパイラはプログラム内の数値定数を10 進数 ( 基数 10) と 見なします。2.17 MPASM アセンブラのディレクティブ
ディレクティブはソースコードに記述されるアセンブラのコマンドですが、通常はオ ペコードには直接変換されません。これらは入力、出力、データ割り当て等、アセン ブラの制御に使います。 アセンブラのディレクティブの多くには、複数の名前とフォーマットがあります。こ れらはMicrochip 社の従来のアセンブラとの下位互換性、および各種プログラミング 手法との互換性を維持するために存在します。MPASM アセンブラのディレクティブの詳細は、MPLAB X IDE のメニューバーで
[Help]>[Help Contents] と選択してヘルプを参照してください。
2.17.1
Banksel banksel label このディレクティブは、label を含むバンクに切り換えるためのバンク選択コードを 生成するようアセンブラとリンカに指示します。人為的ミスを防ぐため、BSR を直 接設定するのではなく必ずこのディレクティブを使います。2.17.2
cblock 例2-5: address で指定したアドレスを先頭に連続する複数の変数を定義します。 表2-1: アセンブラでの数値表現 基数 フォーマット 例 16 進数 #、0x#、H’#’ 12、0x12、H’12’ 10,8 進数 .#、D’#’Octal、O’#’ .12、D’12’Octal、O’12’ 2 進数 B’#’ B’00010010’ASCII A’#’、‘#’ A’c’、‘c’
表2-2: コンパイラでの数値表現 基数 フォーマット 例 16 進数 0x# 0x12 10 進数 # 12 2 進数 0b# 0b00010010 ASCII ‘#’ ‘c’ cblock [address] Variable endc
2.17.3
Org (addr) Org は、addr で指定したアドレスからコード生成を開始するようアセンブラに指示 します。基本的に、本書で紹介するレッスンのコードはアドレス 0x0000 から開始 します。2.17.4
End End は、アセンブラに対してアセンブルを中止するように命令します。プログラムの 最後に1 つ必要です。必ずしもファイルの最後に置く必要はありませんが、End 文の 後の行はアセンブルされません。2.17.5
Errorlevel アセンブラからの警告を抑止します。メッセージを出力ウィンドウに表示しないよう にするのは、そのメッセージの意味を十分に理解している場合のみとします。 例2-6:2.17.6
#include 例2-7: 指定したファイルをソースコードとして読み込みます。これは、インクルード ファイ ルの内容全体をinclude 文の場所に挿入したのと同じ効果があります。 山カッコ(< >) で囲んだ場合、そのファイルがアセンブラのライブラリ フォルダに ある事を示します。二重引用符(“ “) で囲んだ場合、インクルード ファイルが現在 の作業ディレクトリにある事を示します。これらディレクトリの場所はIDE で変更 できます。“MESSAGE 302 – Operand Not in Bank 0, check to ensure bank bits are correct”
include “include_file” #include <include_file>
PICkit™ 3 スタータキット ユーザガイド
DS41628B_JP - p.38 2015 Microchip Technology Inc. NOTES:
第
3 章 レッスン
以下の13 レッスンでは、特に重要なコード行を示しながらそのレッスンで初めて学 ぶPIC MCU のレジスタと命令について説明します。各レッスンでは、それぞれ新し い周辺モジュールまたは機能を紹介していきます。PIC16 と PIC18 ではコードが若 干異なる事があります。各レッスンでは、これらの違いを取り上げて説明します。最 初にエンハンスト ミッドレンジの PIC16 について説明し、その後で PIC18 について 説明します。両デバイスでほとんど違いがない事もあります。違いが全くない場合、 PIC18 のセクションに「なし」と記載しています。 一度説明した違いについては以降改めて説明しません。このため、順番通りにレッス ンを進める必要があります。コードが異なるのは主にアセンブリで、C のプログラム はほとんど違いがありません。各レッスンでは、C コードだけでなくアセンブリコー ドも学習する事を強く推奨します。 レッスンのフォルダ構造は以下の通りです。 以下に例を示します。 どちらのプロジェクトもソースファイルは共通です。このため、MPLAB® X を使って ソースファイルに変更を加えると、MPLAB® 8プロジェクトにも変更が反映されます。 MPLABX IDE を使う事を推奨します。変更を加えるのはソースファイルのみとし、プ ロジェクト フォルダのファイルは変更しません。 MPLAB X IDE のスタートページからリンクしてある入門ビデオを参照してください。 MPLAB 8.XX の場合、『MPLAB® IDE Quick Start Guide』(DS51281)(http://ww1.microchip.com/downloads/en/DeviceDoc/51281d.pdf) を入門ガイドとし て参照してください。 1. < アーキテクチャ > a. < 言語 > i. < レッスン > 1. < レッスン >.X (MPLABX プロジェクト ) 2. Mplab8 (MPLAB 8.x プロジェクト ) 3. < レッスン >.< 拡張子 > ( ソースファイル ) 2.PIC16 a. Assy i. 01 Hello World 1. Hello_world.X (MPLABX プロジェクト ) 2. Mplab8 (MPLAB 8.x プロジェクト ) 3. Hello_world.asm b. C i. 01 Hello World 1. Hello_world.X (MPLABX プロジェクト ) 2. Mplab8 (MPLAB 8.x プロジェクト ) 3. Hello_world.c