PIC®マイコン アセンブラ入門

概 要

アセンブリ言語(アセンブラ)でPICマイコンのプログラミングをするための、わかりすい入門書です。アセンブラは、入門者には覚えるのも楽でわかりやすい言語であり、上級者にはPICマイコンの構造やプログラミングの原点に触れられるという特徴があります。本書は、はじめてPICマイコンに取り組む人、入門したのによくわからなかった人、よりいっそうプログラミングの力を向上させたいと考えている人を対象に、PICマイコンのなかでも代表的かつ扱いやすいPIC16F84Aを中心に解説しています。よく使われるプログラムはコピーしてすぐに使えるようにしているので、楽しくプログラミングに集中できます。サンプルファイルのダウンロードサービス付き。

著者 遠藤敏夫
価格 本体2600円(税別)
ISBN 978-4-7980-3668-7
発売日 2013/2/20
判型 B5変
色数 2色
ページ数 448
CD/DVD
対象読者 初級
シリーズ
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

Chapter 1 プログラミングに向けて

1-1 はじめに

(1)PICマイコンはどのようなものか

(2)実験で使われるパーツ

PIC マイコン

ブレッドボード

ブレッドボード用ジャンパー線

LCD(液晶表示器)

AC アダプタ

各種パーツ

1-2 用意するもの ・・・ これだけあればまずはOK

(1)パソコン(Windows ~、2000、XP、~)

(2)ROMライター(秋月電子の『AKI-PICプログラマー Ver4.0』)

(3)電源(15V~)およびケーブル

(4)MPLAB IDE(Microchip Technology社のホームページからダウンロード)

(5)実験用ボード(ブレッドボード)+電源(5V)

(6)プログラム作成に使うファイル(筆者のホームページからダウンロード)

1-3 最初の実験 ・・・ 開発しやすい環境の確立をめざして

(1)プログラム作成

【1】新しいプロジェクトを用意する

【2】プログラム「FIRST.asm」をフォルダ「FIRST」に保存する

【3】「FIRST.asm」をプロジェクトに組み込む

(2)アセンブル

(3)マイコンへ書き込み

(4)実験用ボードで確認

(5)デバッガーの活用

1-4 PICマイコンに関すること ・・・ これくらいは知っておきたい

(1)一般的な特徴

(2)3種のメモリ(プログラムメモリ、データメモリ、EEPROM)

プログラムメモリ

データメモリ

EEPROM

(3)I/Oポート

(4)オシレータ

1-5 本書に登場するPICマイコン ・・・それぞれの特徴と機能

(1)PIC16F84A

(2)PIC16F88、PIC16F819

(3)PIC12F675

(4)PIC16F876A

(5)PIC16F877A

1-6 プログラミングに向けての第一歩 ・・・ 入門のための基礎知識

(1)ビット、バイトおよび二進数、十六進数

(2)フローチャート

(3)WAIT

(4)サブルーチン

(5)データ(テーブル)

1-7 PICマイコンのアセンブラMPASM ・・・ 約束ごと

(1)プログラムの書き方

(2)データメモリについて

(3)コンフィギュレーションビッツについて

(4)W(ワーキング)レジスタ、変数(ファイルレジスタ)、定数(リテラル)について

(5)STATUSレジスタ

(6)足し算、引き算

Chapter 2 PIC16F84Aでできること=基本から発展まで=

2-1 基本編その1 ・・・ LEDへの表示でプログラミングに慣れる

(1)LEDを思いのままに点滅させる

P2_1_1A ・・・ PORTBの8個のLEDを1秒間隔で互い違いに点滅させる

P2_1_1B ・・・ P2_1_1Aの点灯にPORTAのRA0、RA1の点滅を加える

P2_1_1C ・・・ P2_1_1Bの点灯を5回だけ繰り返す

(2)入力信号に従って点滅させる

P2_1_2A ・・・ RA2を1にするとPORTBのLEDが3回点滅を繰り返す

P2_1_2B ・・・ 二つの入力待ちで、それぞれのサブルーチンをCALLする

(3)データに従って点滅させる

P2_1_3A ・・・ PORTBのLEDをイルミネーションのように点灯する

(4)センサの活用とモータの制御を想定してプログラムする

P2_1_4A ・・・ データによってモータを制御する

P2_1_4B ・・・ (センサを想定して)外部からの信号でモータを制御する

(5)割り込みの機能を確かめる

P2_1_5A ・・・ RB0の信号入力による割り込みを確認する

P2_1_5B ・・・ RB4?RB7の信号入力による割り込みを確認する

(6)タイマー・カウンタの機能を確かめる

P2_1_6A ・・・ タイマー0を用いて1秒毎のカウントアップをPORTBに表示する

P2_1_6B ・・・ 外部からの信号をカウントしてPORTB に表示する

(7)ウエイトでPWMを実現する

P2_1_7A ・・・ PWMでモータの回転数やLEDの明るさをコントロールする

2-2 基本編その2 ・・・ LCDによる表示で活用の幅を広げる

(1)LCDに文字(キャラクタ)を表示する

P2_2_1A ・・・ LCDの任意の位置に任意の文字(キャラクタ)を表示する

(2)多くの文字をまとめて表示する

P2_2_2A ・・・ 表示したい文字をデータとしてテーブルに書き込む

(3)変数の値を二進数、十進数、十六進数で表示する

P2_2_3A ・・・ 変数の値を二進数(0、1)で表示する

P2_2_3B ・・・ 変数の値を1桁、2桁、3桁の十進数で表示する

P2_2_3C ・・・ 変数の値を十六進数で表示する

P2_2_3D ・・・ 256個のキャラクタパターンを表示する

(4)RAMへのデータの書き込み、読み出し

P2_2_4A ・・・ RAMに40個のデータを書き込み、それを読み出してLCDに表示する

(5)内蔵のEEPROMへのデータの書き込み、読み出し

P2_2_5A ・・・ 内蔵のEEPROMにデータを書き込み、さらに読み出してLCDに表示する

(6)時計(経過時間)を表示する

P2_2_6A ・・・ 時間を「00:00:00」で表示する

2-3 発展編 ・・・ さらなる実力の向上を目指して

(1)LCDにオリジナルのキャラクタを表示する

P2_3_1A ・・・ LCDにオリジナルのキャラクタを書き込み表示する

(2)四則演算(十進法)の結果を表示する

P2_3_2A ・・・ 簡単な四則演算を行い表示する

(3)掛け算・割り算を二進法で行う

P2_3_3A ・・・ 1バイト×1バイトを実行し結果を二進表示する

P2_3_3B ・・・ 2バイト÷1バイトを実行し結果を二進表示する

(4)USART通信(PCとの送受信、音声LSI)

P2_3_4A ・・・ RS-232C接続でPCと送受信する

P2_3_4B ・・・ 音声合成LSIにデータを送る

(5)SPI通信(音声LSI)

P2_3_5A ・・・ 音声合成LSIにデータを送る

(6)I2C通信(音声LSI、外付けEEPROM、各種LCD、RTC)

P2_3_6A ・・・ 音声合成LSIにデータを送る

P2_3_6B ・・・ 外付けのEEPROMとデータを送受信する

P2_3_6C ・・・ I2C用のLCDを活用する(1)

P2_3_6D ・・・ I2C用のLCDを活用する(2)

P2_3_6E ・・・ RTC(Real Time Clock)を活用する

(7)外付けEEPROMに乱数を書き込んで活用する

P2_3_7A ・・・ EEPROMに1024個の乱数を書き込む

P2_3_7B ・・・ 乱数を活用してLCDにランダムに表示する

Chapter 3 PIC16F84Aではできないこと=他のPICマイコンの活用=

3-1 小型・大型のPICマイコンおよび高機能のPICマイコンについて

(1)PIC12F675(PIC12F629) ・・・ 8ピン

(2)PIC16F88(PIC16F819)・・・ 18ピン

(3)PIC16F876A ・・・ 28ピン、PIC16F877A ・・・ 40ピン

3-2 内蔵オシレータの活用

(1)PIC12F675(PIC12F629)の場合

(2)PIC16F819(PIC16F88)の場合

PIC16F819

PIC16F88

(3)PIC16F886(PIC16F887)の場合

PIC16F886、PIC16F887

3-3 A/D変換の活用

(1)A/D変換の仕組みについて

(2)PIC12F675の場合(PIC12F629はA/D変換なし)

(3)PIC16F819の場合

(4)PIC16F88の場合

(5)PIC16F87XAの場合

(6)A/D変換の活用例

P3_3_6A ・・・ 10秒ごとに入力電圧を表示する(PIC12F675)

P3_3_6B ・・・ 4つのチャンネルからの入力を保存し表示する(PIC16F877A)

3-4 タイマー1、タイマー2(PWM)の活用

(1)PIC16F877Aでタイマー1を活用する

P3_4_1A ・・・ 1秒毎のカウントアップをLCDに表示する(PIC16F877A)

(2)PIC16F877Aでタイマー2を活用する

P3_4_2A ・・・ PWMの効果を目で確かめる(PIC16F877A)

3-5 コンパレータの活用

(1)PIC16F88でコンパレータを活用する

Chapter 4 プログラミングの基本=必要に応じて参照=

4-1 MPASMの35個の命令

(1)MOVLW、MOVFWとMOVWF(数値の代入)

(2)GOTO(ジャンプ)とCALL、RETURN

(3)BSF、BCF(ビット操作)

(4)SUBLW、SUBWF(引き算)とADDLW、ADDWF(足し算)

(5)INCF(増加)とDECF(減少)

(6)INCFSZ、DECFSZ(増加・減少における分岐<スキップ>)

(7)BTFSC、BTFSS(ビットの値での分岐<スキップ>)

(8)CLRF、CLRW(クリア)

(9)その他(15個)

4-2 流れを分岐させる( IF ~ THEN ~ ELSE ~ )

(1)変数のあるビットが0か1かで分岐 ・・・「BTFSS」、「BTFSC」を単独で用いる

(2)変数の値で分岐 ・・・「SUBLW」、「SUBWF」とセットで用いる

4-3 ある処理をn回繰り返す(FOR ~ NEXT)

(1)定番の「DECFSZ」を用いる

(2)「SUBLW」を用いる(その1)

(3)「SUBLW」を用いる(その2)

(4)多重構造にして繰り返しの回数を増やす

4-4 ウエイトの公式で任意の待ち時間を作る

4-5 いつでもどこでも便利に活用できるサブルーチン

(1)サブルーチンの活用の仕方

(2)サブルーチン

ADD ― 足し算(十進の4 桁+ 4 桁)

CGRAM_1 ― CGRAM(日、月、火、水、木、金、土、年)

CGRAM_2 ― CGRAM(棒グラフ)

CGRAM_3 ― CGRAM(人型)

CGRAM_X ― CGRAM(白紙=作成用)

CLOCK_1 ― 経過時間を1秒毎に 00:00:00 で表示(1秒毎、10秒毎、1分毎、10分毎、1時間毎、10時間毎のタイマー可)

CLOCK_2 ― 経過時間を1秒毎に00:00:00で表示(秒、分、時間の3変数)

DISP_1 ― 変数を3桁の十進で4個×4行にて表示(左端にデータのカウントを表示)

DISP_2 ― 外付けのEEPROMのデータを2桁の十六進または3桁の十進で4×4にて表示

DISP_2X ― 外付けのEEPROMのデータを2桁の十六進または3桁の十進で4×2にて表示

DISP_ADCX ― 外付けEEPROM内のA/D変換のデータを「DISP_ADX」に続けて表示(スイッチで1行毎の更新が可能)

DISP_ADX ― 1行目に"AD1 AD2 AD3 AD4"を表示

DISP_BIN ― 1バイトの変数を二進で表示

DISP_DECI ― 2バイトの変数を十進で表示

DISP_NUM0 ― 空位の0をすべて表示する

DISP_NUM ― 十進では最上位の0を表示しない

DIV ― 割り算(十進の255以下÷255以下)

DIVI_BIN ― 二進の割り算(2バイト÷1バイト)

I2C_0A ― I2C通信(ポートA)

I2C_0B ― I2C通信(ポートB)

I2C_0C ― I2C通信(ポートC)

I2C_0G ― I2C通信(ポートG)

I2C_EEPROM ― 外付けのEEPROM(I2C)へのデータの書き込みおよび読み出し

INT_EEPROM ― 内蔵のEEPROM へのデータの書き込みおよび読み出し

INTRPT ― 割り込み

LCD_INI_B ― LCDをポートBにつなぐ場合の初期化

LCD_INI_D ― LCDをポートDにつなぐ場合の初期化

LCD_LIX_INI ― ストロベリー・リナックス社のLCD(I2C)の初期化

LCD_TBL ― TABLEを用いてLCD に一連の文字を表示

MULT_BIN ― 二進の掛け算(1バイト×1バイト)

MULTI ― 掛け算(十進の255以下×255以下)

POS_SET ― 20×4のLCDで表示位置を指定

PWM_0 ― ウエイトによるPWM

RAND_NUM ― (FC00H~FFFFHに書き込まれた)乱数の読み出し

RTC_INI ― RTCの初期設定および書き込み・読み出し

SPI ― SPI通信

SUB ― 引き算(十進の4桁-4 桁)

USART ― USART通信(ボーレート)

WAIT ― 各種ウエイト(任意の時間設定が可能)

WAIT_0 ― 基本となるウエイト(0.1Sec、1Sec)

PR

秀和システム