C言語&MCCによる PICプログラミング大全

[表紙]C言語&MCCによる PICプログラミング大全

紙版発売
電子版発売

B5変形判/520ページ

定価3,740円(本体3,400円+税10%)

ISBN 978-4-297-13364-1

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

名著「C言語によるPICプログラミング大全」がさらに使いやすくなりました。

PICのプログラム開発のためには,統合開発環境である「MPLAB X IDE」が便利です。さらに,ここに組み込めるプラグイン「MCC(MPLAB Code Configurator)」を使えば,GUI操作でレジスタを設定したC言語のソースコードを作成してくれるので,いちいちレジスタの設定を調べる必要はありません。ただ,便利なツールなのに,あまりにも多機能すぎて,初心者はどこになにがあるのか,どう操作すればよいのかがわかりにくいというデメリットもあります。本書では,これらの使い方を詳しく解説します。

なお,初心者にとって,学習用ハードウェアの製作は少しハードルが高かったのですが,本書では既製品を活用することで,お手軽にPICマイコンの各種機能を試せるようにしました。

電子工作をマイコンボードで始めたけれど,そろそろ,PICマイコンが気になってきたなという方,また,これまではデータシートにくびっぴきでレジスタ設定コードを書いていたという方,最新のPICの新しい機能を試してみたい方にも,必ず役に立つ1冊です。

こんな方におすすめ

  • PICマイコンの機能をつかいこなしたい方
  • MPLAB X IDEやMCCの使い方がよくわからない方

この書籍に関連する記事があります!

著者の一言

本書のサンプル

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

サンプル画像5

目次

第1部 PICマイコンと開発環境の概要

第1章 マイコンとプログラミング

  • 1-1 マイコンとは
    • 1-1-1 マイコンの出現と進歩
    • 1-1-2 マイクロプロセッサとマイクロコントローラの差異
  • 1-2 マイコンのプログラムとは
    • 1-2-1 マイコンの構成とプログラム
    • 1-2-2 プログラムと命令
  • 1-3 2進数と16進数
    • コラム なぜ1バイトが8ビットになったか
  • 1-4 マイコンの動かし方
    • 1-4-1 動かすために必要なこと
    • 1-4-2 マイコンでできないこと

第2章 PICマイコンの概要

  • 2-1 F1ファミリの位置付けと種類
    • 2-1-1 PIC16F1ファミリの位置付け
    • 2-1-2 PIC16F1ファミリの種類
  • 2-2 PIC16F1ファミリのアーキテクチャ
    • 2-2-1 全体アーキテクチャ
    • 2-2-2 クロックと命令実行
    • 2-2-3 プログラムメモリのアーキテクチャ
    • 2-2-4 データメモリのアーキテクチャ
  • 2-3 コアインデペンデントペリフェラル
    • 2-3-1 CIPの種類
    • 2-3-2 CIPの適用例

第3章 ハードウェア開発環境の概要

  • 3-1 ハードウェア開発環境概要
    • 3-1-1 ハードウェアツール
    • 3-1-2 評価ボード
  • 3-2 Curiosity HPCボード
    • 3-2-1 Curiosity HPCボードの概要と実装内容
    • 3-2-2 回路構成
  • 3-3 Clickボード
    • 3-3-1 Clickボードとは
    • 3-3-2 mikroBUSとは
  • 3-4 ブレッドボード
    • 3-4-1 ブレッドボードとは
    • 3-4-2 ブレッドボードへの部品実装の仕方

第4章 ソフトウェア開発環境と使い方

  • 4-1 ソフトウェア開発環境概要
    • 4-1-1 2種類の開発環境スタイル
    • 4-1-2 ソフトウェアツール
  • 4-2 ソフトウェアの入手とインストール
    • 4-2-1 ファイルのダウンロード
    • 4-2-2 MPLAB X IDEのインストール
    • 4-2-3 MPLAB XC8コンパイラのインストール
    • 4-2-4 MPLAB X IDEの外観
  • 4-3 プロジェクトの作成
    • 4-3-1 MPLAB X IDEの起動
    • 4-3-2 プロジェクトの作成
    • 4-3-3 ソースファイルの作成
    • 4-3-4 既存プロジェクトの取り扱い
    • 4-3-5 プロジェクトのプロパティ
    • 4-3-6 DFPの役割と選択
  • 4-4 エディタの使い方
    • 4-4-1 エディタの画面構成と基本機能
    • 4-4-2 エディタの基本機能とツールバーの使い方
    • 4-4-3 エディタの各種設定
  • 4-5 コンパイルと書き込み実行
    • 4-5-1 コンパイル
    • 4-5-2 書き込み
    • 4-5-3 SNAP/PICkit4の詳細
    • 4-5-4 ICSPの詳細
    • 4-5-5 書き込み時の注意とツールのエラー対策
    • 4-5-6 ファームウェア不具合の修理方法
  • 4-6 実機デバッグの仕方
    • 4-6-1 デバッグに使う例題プログラム
    • 4-6-2 実機デバッグの開始とデバッグ用アイコン
    • 4-6-3 デバッグオプション機能
    • 4-6-4 メモリ内容表示
    • コラム コンパイルエラーの原因発見のコツ

第5章 MPLAB X IDEの便利機能

  • 5-1 MPLAB X IDEの便利機能
    • 5-1-1 ファイルの登録と削除
    • 5-1-2 複数プロジェクトの扱い
    • 5-1-3 複数構成のプロジェクト
    • 5-1-4 プロジェクトのコピーとRename
    • 5-1-5 Dashboard
    • 5-1-6 プロジェクト内検索
    • 5-1-7 コンパイラの追加と削除
  • 5-2 エディタの便利機能
    • 5-2-1 ショートカットキー
    • 5-2-2 構造体やレジスタの要素選択
    • 5-2-3 検索と置換
  • 5-3 デバッグ時の便利機能
    • 5-3-1 Hyper Navigation
    • 5-3-2 Navigationメニュー
    • 5-3-3 Call Graph

第2部 MPLAB XCコンパイラの詳細

第1章 XCコンパイラの動作

  • 1-1 コンパイル処理の流れ
    • 1-1-1 MPLAB XC8コンパイルの処理の流れ
    • 1-1-2 セクションとMAPファイル
  • 1-2 プログラム実行時の環境
    • 1-2-1 実行時のメモリレイアウト
    • 1-2-2 main関数とスタートアップコード
  • 1-3 プリプロセッサの使い方
    • 1-3-1 プリプロセッサ指示命令の種類
    • 1-3-2 #defineとマクロ機能の使い方
    • 1-3-3 #includeの使い方
    • 1-3-4 #ifによる条件付きコンパイル
  • 1-4 デバイスヘッダファイルの役割
    • 1-4-1 ヘッダファイルの呼び出し
    • 1-4-2 デバイスヘッダファイルの内容
    • 1-4-3 マクロ機能と組み込み関数の使い方
  • 1-5 pragma指示命令の使い方
  • 1-6 コンパイラの最適化
    • 1-6-1 最適化のレベルと最適化の内容
    • 1-6-2 最適化の設定方法
    • 1-6-3 最適化のサイズ見積もり

第2章 XCコンパイラの仕様

  • 2-1 準拠するC標準
    • 2-1-1 C90標準とC99標準
    • 2-1-2 C90とC99の切り替え
  • 2-2 変数のデータ型
    • 2-2-1 変数の宣言書式
    • 2-2-2 データ型の種類
    • 2-2-3 データ型の修飾子
  • 2-3 定数の書式と文字定数
    • 2-3-1 定数の記述書式
    • 2-3-2 定数の修飾 接尾語
    • 2-3-3 文字の扱い
  • 2-4 変数の宣言位置とスコープ
    • 2-4-1 宣言位置とスコープ
    • 2-4-2 変数の格納方法
    • 2-4-3 自動配置の変数(autoタイプ)
    • 2-4-4 指定配置の変数(Non-autoタイプ)
    • 2-4-5 実際の使用例
  • 2-5 変数の型変換
    • 2-5-1 自動型変換(暗黙の型変換)
    • 2-5-2 明示的型変換(キャスト)
  • 2-6 標準入出力関数
    • 2-6-1 コンソールデバイスと低レベル入出力関数
    • 2-6-2 C90とC99の標準入出力関数の差異
    • 2-6-3 標準入出力関数一覧
    • 2-6-4 入出力関数の使い方

第3章 割り込み処理関数

  • 3-1 割り込み処理の流れとメリット
    • 3-1-1 割り込み処理の流れ
    • 3-1-2 割り込みのメリット
  • 3-2 割り込み要因と許可禁止
    • 3-2-1 割り込み回路ブロックの動作と割り込み許可
    • 3-2-2 割り込み関連レジスタの詳細
    • 3-2-3 割り込み動作の詳細
  • 3-3 割り込み処理の記述方法

第3部 MCCと内蔵モジュールの使い方

第1章 MCCの概要

  • 1-1 MCCとは
    • 1-1-1 MCCの役割と自動生成される内容
    • 1-1-2 MCCの対応デバイス
  • 1-2 MCCのインストール
    • 1-2-1 最新バージョンのインストールの場合
    • 1-2-2 旧バージョンのインストールの場合
  • 1-3 MCCの起動方法
    • 1-3-1 MelodyとClassic
    • 1-3-2 Classicのライブラリの追加方法
  • 1-4 MCCを使ったプログラミング手順
  • 1-5 自動生成されるコードとその関係
  • 1-6 MCCによる割り込み処理の記述
    • 1-6-1 割り込み処理の流れ
    • 1-6-2 ユーザ割り込み処理の記述方法

第2章 システム関連の設定

  • 2-1 コンフィギュレーションビットとその設定方法
    • 2-1-1 コンフィギュレーションビットの役割
    • 2-1-2 コンフィギュレーションビットの種類と内容
    • 2-1-3 MCCによるコンフィギュレーションビットの設定方法
    • 2-1-4 コンフィギュレーションビット設定専用ダイアログの使い方
  • 2-2 マイコンの実行速度を決める
    • 2-2-1 クロック生成ブロックの構成
    • 2-2-2 発振モードの種類
    • 2-2-3 MCCによるクロック指定方法
    • 2-2-4 内蔵クロックの周波数微調整
  • 2-3 時間を高精度にしたい
    • 2-3-1 クリスタル/セラミック発振子モードの使い方
    • 2-3-2 外部発振器モードの使い方
  • 2-4 クロック発振の監視をしたい
    • 2-4-1 リファレンスクロックモジュールの使い方
    • 2-4-2 クロック発振モニタ
  • 2-5 電源変動しても安定に動作させたい
    • 2-5-1 リセットとは
    • 2-5-2 PORとBOR

第3章 LEDやスイッチを使いたい

  • 3-1 入出力ピンとは
    • 3-1-1 入出力ピンとSFRレジスタの関係
    • 3-1-2 実際の使い方と電気的特性
  • 3-2 接続する入出力ピンを自由に選びたい
    • 3-2-1 ピン割り付け機能とは
    • 3-2-2 MCCのPin Manager Gridによるピン割り付け設定
  • 3-3 入出力ピンのオプション機能
    • 3-3-1 MCCのPin Moduleの役割
    • 3-3-2 アナログ入力かデジタル入出力か
    • 3-3-3 スイッチのプルアップ抵抗を省略したい
    • 3-3-4 電圧の異なる相手と接続したい
    • 3-3-5 ピンに名前を付けるとその名前で関数が生成される
    • 3-3-6 その他のオプション機能
    • 3-3-7 突然の短時間の入力変化を知りたい
  • 3-4 入出力ピンの使い方の実際例

第4章 一定のインターバルで実行したい

  • 4-1 長時間のインターバル動作をしたい̶ タイマ0の使い方
    • 4-1-1 16ビットモードのタイマ0の内部構成と動作
    • 4-1-2 16ビットモードのMCCの設定と生成される関数の使い方
    • 4-1-3 例題による16ビットモードの使い方の説明
    • 4-1-4 8ビットモードのタイマ0の内部構成と動作
    • 4-1-5 8ビットモードのMCCの設定と生成される関数
    • 4-1-6 例題による8ビットモードの使い方の説明
  • 4-2 ゲート制御でパルス幅を測定したい̶ タイマ1/3/5 の使い方
    • 4-2-1 タイマ1/3/5の内部構成と動作
    • 4-2-2 MCCによる設定と生成される関数の使い方
    • 4-2-3 例題によるタイマ1の使い方の説明
  • 4-3 正確なインターバル動作をしたい̶ タイマ2/4/6/8/10の使い方
    • 4-3-1 基本構成のタイマ2/4/6の内部構成と動作
    • 4-3-2 MCCによるタイマ2/4/6の設定と生成される関数の使い 方
    • 4-3-3 外部リセット付きタイマ2/4/6/8/10の内部構成と動作
    • 4-3-4 HLTタイマのMCCによる設定と生成される関数の使い方
    • 4-3-5 例題によるHLTタイマの使い方の説明
  • 4-4 長周期パルスの高精度測定をしたい̶ SMTタイマの使い方
    • 4-4-1 SMTの内部構成と動作
    • 4-4-2 MCCによる設定方法と生成される関数の使い方
    • 4-4-3 例題によるSMTの使い方の説明

第5章 パソコンやセンサと通信したい

  • 5-1 パソコンと通信したい ̶ EUSARTモジュールの使い方
    • 5-1-1 同期式と非同期式とは
    • 5-1-2 EUSARTモジュールの内部構成と動作
    • 5-1-3 マルチドロップ方式と9ビットモードの使い方
    • 5-1-4 MCCによる設定と生成される関数の使い方
    • 5-1-5 パソコンとの通信の例題 ̶ 割り込みを使わないEUSARTの使い方
    • 5-1-6 標準入出力関数による例題
    • 5-1-7 パソコンとの通信の例題 ̶ 割り込みを使ったEUSARTの使い方
  • 5-2 センサやLCDをデジタル通信で接続したい̶ I2Cモジュールの使い方
    • 5-2-1 I2C通信とは
    • 5-2-2 I2C通信データフォーマット
    • 5-2-3 MSSPモジュール(I2Cモード)の内部構成と動作
    • 5-2-4 MCCによるMSSP(I2Cマスタモード)の設定と生成される関数の使い方
    • 5-2-5 MCCによるMSSP(I2Cスレーブモード)の設定と生成される関数の使い方
    • 5-2-6 例題によるMSSPモジュール(I2Cモード)の使い方
    • 5-2-7 接続デバイスの仕様
    • 5-2-8 MCCによる例題のI2Cマスタ側のプログラム製作
    • 5-2-9 MCCによるI2Cスレーブ側のプログラム製作
    • 5-2-10 例題の動作確認
  • 5-3 ICやセンサを高速で接続したい̶ SPIモジュールの使い方
    • 5-3-1 SPI通信とは
    • 5-3-2 SPIの4つの通信モード
    • 5-3-3 MSSPモジュール(SPIモード)の内部構成と動作
    • 5-3-4 MCCによるMSSP2(SPIマスタモード)の設定と生成される関数の使い方
    • 5-3-5 MCCによるMSSP2(SPIスレーブモード)の設定と生成される関数の使い方
    • 5-3-6 例題によるMSSPモジュール(SPIモード)の使い方
    • 5-3-7 接続デバイスの仕様
    • 5-3-8 SPIマスタ側のプログラム製作
    • 5-3-9 MCCによるSPIスレーブ側のプログラム製作
    • 5-3-10 例題の動作確認
  • 5-4 センサを単線シリアル通信で接続したい
    • 5-4-1 1-Wire通信とは
    • 5-4-2 単線シリアル通信の温湿度センサの使い方
    • 5-4-3 例題による単線シリアル通信の使い方
    • 5-4-4 MCCによる例題プログラム製作

第6章 モータの速度制御やLEDの調光制御をしたい

  • 6-1 パルス幅測定やPWM制御をしたい̶ CCPモジュールの使い方
    • 6-1-1 パルス幅,周期の測定をしたい̶ キャプチャモード
    • 6-1-2 一定の遅延を生成したい̶ コンペアモード
    • 6-1-3 PWM制御をしたい ̶ CCPモジュールのPWMモード
    • 6-1-4 フルブリッジをPWM制御したい̶ ECCPモジュールのPWMモード
    • 6-1-5 MCCによるCCPモジュールの設定と生成される関数の使い方
    • 6-1-6 例題によるCCPモジュールのキャプチャモードの使い方
    • 6-1-7 例題のプログラム作成
    • 6-1-8 LEDの調光制御の例題̶ CCPのPWMモードの使い方
    • 6-1-9 例題のプログラム作成
  • 6-2 Power LEDの調光制御をしたい̶ PWMモジュールの使い方
    • 6-2-1 10ビット PWMモジュールの内部構成と動作
    • 6-2-2 MCCによるPWMモジュールの設定と生成される関数の使い方
    • 6-2-3 Power LEDの調光制御の例題̶ PWMモジュールの使い方
    • 6-2-4 例題のプログラム作成
  • 6-3 モータの速度制御をしたい̶ CWGモジュールの使い方
    • 6-3-1 CWGモジュールの構成と動作
    • 6-3-2 MCCによるCWGモジュールの設定と生成される関数の使い方
    • 6-3-3 フルブリッジによるモータ制御の例題̶ CWGモジュールの使い方
    • 6-3-4 例題のプログラム作成

第7章 いろいろな種類のパルスを生成したい

  • 7-1 広範囲の周波数のパルスを生成したい̶ NCOモジュールの使い方
    • 7-1-1 NCOモジュールの内部構成と動作
    • 7-1-2 MCCによるNCOモジュールの設定方法と生成される関数の使い方
    • 7-1-3 例題によるNCOモジュールの使い方̶ 1Hz単位のパルス出力
    • 7-1-4 MCCによる例題のプログラム作成
    • 7-1-5 書き込みと動作確認
  • 7-2 信号を変調したい̶ DSMモジュールの使い方
    • 7-2-1 DSMモジュールの内部構成と動作
    • 7-2-2 MCCによるDSMモジュールの設定と生成される関数の使い方
    • 7-2-3 例題によるDSMモジュールの使い方
    • 7-2-4 送信側のプログラム製作
    • 7-2-5 受信側のプログラムの製作
    • 7-2-6 書き込みと動作確認
  • 7-3 特殊なパルスを生成したい̶ 16ビットPWMモジュールの使い方
    • 7-3-1 16ビットPWMの内部構成と動作
    • 7-3-2 MCCによる16ビットPWMの設定方法と生成される関数の使い方
    • 7-3-3 例題による16ビットPWMの使い方̶ RCサーボの使い方
    • 7-3-4 例題のプログラム作成

第8章 消えないメモリにデータを保存したい

  • 8-1 内蔵の消えないメモリを使いたい̶ EEPROMの使い方
    • 8-1-1 データEEPROMメモリの内部構成と動作
    • 8-1-2 MCCによるEEPROMの使い方
    • 8-1-3 例題によるEEPROMの使い方̶ EEPROMの読み書き
    • 8-1-4 書き込みと動作確認
  • 8-2 内蔵のフラッシュメモリにデータを保存したい
    • 8-2-1 フラッシュメモリの内部構成と動作
    • 8-2-2 フラッシュメモリのMCCによる設定と関数の使い方
    • 8-2-3 例題によるフラッシュメモリの使い方
    • 8-2-4 書き込みと動作確認
  • 8-3 外付けの大容量フラッシュメモリにデータを保存したい
    • 8-3-1 フラッシュメモリの使い方
    • 8-3-2 例題によるフラッシュメモリの使い方
    • 8-3-3 例題のプログラム作成
    • 8-3-4 書き込みと動作確認

第9章 センサなどの電圧や電流を扱いたい

  • 9-1 センサなどの電圧や電流を計測したい̶ 10/12ビットADコンバータの使い方
    • 9-1-1 10/12ビットADコンバータの内部構成と動作
    • 9-1-2 10ビットADコンバータのMCCの設定と生成される関数の使い方
    • 9-1-3 例題による10ビットADCモジュールの使い方
  • 9-2 ノイズを減らして電圧を計測したい̶ 演算機能付きADCCの使い方
    • 9-2-1 ADCCコンバータモジュールの内部構成と動作
    • 9-2-2 MCCの設定方法と生成される関数の使い方
    • 9-2-3 例題によるBasic_modeの使い方
    • 9-2-4 例題によるADCCのAverage_modeの使い方
    • 9-2-5 例題によるLow_pass_filter_modeの使い方
    • 9-2-6 例題によるAccumulate_modeの使い方
  • 9-3 音やセンサなどの瞬時電圧変化を知りたい̶ アナログコンパレータの使い方
    • 9-3-1 コンパレータの内部構成と動作
    • 9-3-2 MCCの設定方法と生成される関数の使い方
    • 9-3-3 例題によるコンパレータの使い方
  • 9-4 交流信号の位相を制御したい̶ ZCDの使い方
    • 9-4-1 ZCDモジュールの内部構成と動作
    • 9-4-2 ZCDのMCCの設定方法と生成される関数の使い方
    • 9-4-3 例題によるZCDの使い方
  • 9-5 任意の一定電圧を出力したい̶ 5/10ビットDAコンバータの使い方
    • 9-5-1 5/8/10ビットDAコンバータの内部構成と動作
    • 9-5-2 MCCによるDAコンバータの設定方法と生成される関数の使い方
    • 9-5-3 FVRモジュールの内部構成と動作
    • 9-5-4 例題によるDAコンバータの使い方
  • 9-6 センサなどの小さな電圧を増幅したい̶ オペアンプの使い方
    • 9-6-1 オペアンプの内部構成と動作
    • 9-6-2 オペアンプのMCCの設定方法
    • 9-6-3 例題によるオペアンプの使い方

第10章 その他の内蔵モジュールの使い方

  • 10-1 内蔵モジュールの入出力を合成したい̶ CLCモジュールの使い方
    • 10-1-1 CLCモジュールの内部構成と動作
    • 10-1-2 CLCのMCCの設定方法
    • 10-1-3 例題によるCLCの使い方
  • 10-2 極低消費電力にしたい ̶ スリープと間欠動作
    • 10-2-1 省電力モードの種類と動作
    • 10-2-2 スリープと間欠動作
    • 10-2-3 例題 WDTによる間欠動作
  • 10-3 プログラムの異常動作を知りたい̶ WDTの使い方
    • 10-3-1 プログラム異常監視とは
    • 10-3-2 ウォッチドッグタイマ(WDT)の内部構成と動作
    • 10-3-3 窓付きウォッチドッグタイマ(WWDT)の内部構成と動作
  • 10-4 メモリ破壊の監視をしたい̶ CRCとSCANの使い方
    • 10-4-1 CRCモジュールとSCANモジュールの内部構成と動作
    • 10-4-2 CRCモジュールとSCANモジュールのMCCの設定と生成される関数の使い方
    • 10-4-3 例題によるCRCモジュールとSCANモジュールの使い方

第11章 ミドルウェアの使い方

  • 11-1 SDカードにデータを保存したい̶ FATファイルシステムの使い方
    • 11-1-1 FATファイルシステムとは
    • 11-1-2 例題の構成
    • 11-1-3 MCCによる設定方法と生成される関数の使い方
    • 11-1-4 例題のプログラム作成