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

【Chapter1. プログラミン
グに向けて】
1−1.はじめに
  @PICマイコンはどのようなものか
  A実験で使われるパーツ
1−2.用意するも ・・・ れだけあればまずはOK
  @パソコン(Windows 〜、2000、XP、〜)
  AROMライター(秋月電子のAKI−PICプログラマー Ver4.0)
  B電源(15V〜)およびケーブル
  C『MPLAB IDE』(Microchip社のホームページからダウンロード)
  D実験用ボード(ブレッドボード)および電源(5V)
  Eプログラム作成に使うファイル(筆者のホームページからダウンロード)
1−3.最初の実験 ・・・ 開発しやすい環境の確立をめざして
  @プログラム作成
  Aアセンブル
  Bマイコンへ書き込み
  C実験用ボードで確認
  Dデバッガーの活用
1−4.PICマイコンに関すと ・・・ これくらいは知っておきたい
  @一般的な特徴
  A3種のメモリ(プログラムメモリ、データメモリ、EEPROM)
  BI/Oポート
  Cオシレータ
1−5.本書に登場するPICマコン ・・・れぞれの特徴と機能
  @16F84A ・・・ 18ピン
  A16F88、16F819 ・・・ 18ピン
  B12F675 ・・・ 8ピン
  C16F876A ・・・ 28ピン
  D16F877A ・・・ 40ピン
1−6.プログラミングに向けての第一歩 ・・・ 入門のための基礎知識
 @ビット、バイトおよび二進数、十六進数
  Aフローチャート
  B「WAIT」
  Cサブルーチン
  Dデータ(テーブル)
1−7.PICマイコンのアブラMPASM ・・ 約束ごと
 @プログラムの書き方
  Aデータメモリについて(Bank(バンク)切り替えとは)
  Bコンフィギュレーションビッツについて
  CW(ワーキング)レジスタ、変数(ファイルレジスタ)、定数(リテラル)
  DSTATUSレジスタについて
  E足し算、引き算

【Chapter2. 16F84Aでできること】=基本から発展まで=

2−1.基本編その1 ・・・ LEDによる表示でプログラミングに慣れる
 @LEDを思いのままに点滅させる
  P2_1_1A ・・・ PORTBの8個のLEDを1秒間隔で互い違いに点滅させる
  P2_1_1B ・・・ P2_1_1Aの点灯にPORTAのRA0、RA1の点滅を加える
  P2_1_1C ・・・ P2_1_1Bの点灯を5回だけ繰り返す
 A入力信号に従って点滅させる
  P2_1_2A ・・・ RA2を1にするとPORTBのLEDが3回点滅を繰り返す
  P2_1_2B ・・・ 二つの入力待ちで、それぞれのサブルーチンをCALL
 Bデータに従って点滅させる
  P2_1_3A ・・・ PORTBのLEDをイルミネーションのように点灯する
 Cセンサの活用とモータの制御を想定してプログラムする
  P2_1_4A ・・・ データによってモータを制御する

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

 D割り込みの機能を確かめる
  P2_1_5A ・・・ RB0の信号入力による割り込みを確認する

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

 Eタイマー・カウンタの機能を確かめる
  P2_1_6A ・・・ タイマー0を用いて1秒毎のカウントアップをPORTBに表示
  P2_1_6B ・・・ 外部からの信号をカウントしてPORTB に表示する
 FウエイトでPWMを実現する
  P2_1_7A ・・・ PWMでモータの回転数やLEDの明るさをコントロール
2−2.基本編その2 ・・・ LCDによる表示で活用の幅を広げる
  @LCDに文字(キャラクタ)を表示する
  P2_2_1A
・・・ LCDの任意の位置に任意の文字(キャラクタ)を表示する
 A多くの文字をまとめて表示する     
  P2_2_2A
・・・ 表示したい文字をデータとしてテーブルに書き込む
  Bレジスタファイル(変数)の値を二進数、十進数、十六進数で表示する
  P2_2_3A ・・・ 変数の値を二進数(0、1)で表示する

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

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

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

  CRAMへのデータの書き込み、読み出し
  P2_2_4A
・・・ RAMに40個のデータを書き込み、それをLCDに表示する
  D内蔵のEEPROMへのデータの書き込み、読み出し
  P2_2_5A
・・・ 内蔵のEEPROMにデータを書き込み、さらにLCDに表示
  E時計(経過時間)を表示する
  P2_2_6A
・・・ 時間を「00:00:00」で表示する
2−3.発展編 ・・・ さらなる実力の向上を目指して
  @LCDにオリジナルのキャラクタを表示する
  P2_3_1A
・・・ LCDにオリジナルのキャラクタを書き込み、表示する
  A四則演算(十進法)の結果を表示する
  P2_3_2A
・・・ 簡単な四則演算を行い表示する
  B掛け算・割り算を二進法で行う
  P2_3_3A
・・・ 1バイト×1バイトを実行し結果を二進表示する
  P2_3_3B
・・・ 2バイト÷1バイトを実行し結果を二進表示する
  CUSART通信(PCとの送受信、音声LSI)
  P2_3_4A
・・・ RS232C接続でPCと送受信する
  P2_3_4B ・・・ 音声合成LSIにデータを送る

  DSPI通信(音声LSI)
  P2_3_5A
・・・ 音声合成LSIにデータを送る
 EI2C通信(音声LSI、外付けEEPROM、各種LCD、RTC)
  P2_3_6A ・・・ 音声合成LSIにデータを送る
  P2_3_6B ・・・ 外付けのEEPROMとデータを送受信する
  P2_3_6C ・・・ I2C用のLCD(ストロベリーリナックス)を活用する
  P2_3_6D ・・・ I2C用のLCD(ACM1602)を活用する
  P2_3_6E ・・・ RTC(Real Time Clock)を活用する
 F外付けEEPROMに乱数を書き込んで活用する
  P2_3_7A ・・・ EEPROMに1024個の乱数を書き込む
  P2_3_7B ・・・ 乱数を活用してLCDにランダムに表示する

【Chapter3. 16F84Aではできないこと】=他のPICマイコンの活用=

3−1.小型・大型のPICマイコンおよび高機能のPICマイコンについて
  @12F675(12F629)・・・ 8ピン
  A16F819(16F88)・・・ 18ピン
  B16F876A(16F886)・・・ 28ピン、16F877A(16F887)・・・ 40ピン  
3−2.内蔵オシレータの活用 
  @12F675(12F629)の場合
  A16F819(16F88)の場合
  B16F886(16F887)の場合 
3−3.A/D変換の活用
  @A/D変換の仕組みについて
  A12F675の場合
  B16F819の場合
  C16F88の場合
  D16F87XAの場合
  EA/D変換の活用例
  P3_3_6A ・・・ 10秒ごとに入力電圧を表示する(12F675)
  P3_3_6B ・・・ 4つのチャンネルからの入力を保存し表示(16F877A)

3−4.タイマー1、タイマー2(PWM)の活用
  @16F877Aでタイマー1を活用する
  P3_4_1A
・・・ 1秒毎のカウントアップをLCDに表示する(16F877A)
  A16F877Aでタイマー2を活用する
  P3_4_2A ・・・ PWMの効果を目で確かめる(16F877A)

3−5.コンパレータの活用
  @16F88でコンパレータを活用する

【Chapter4. プログラミングの基本】=必要に応じて参照=

4−1.MPASM35個の命令
  @MOVLW、MOVFWとMOVWF(数値の代入)
  AGOTO(ジャンプ)とCALL、RETURN(サブルーチン)
  BBCF、BSF(ビット操作)
  CSUBLW、SUBWF(引き算)とADDLW、ADDWF(足し算)  
  DINCF(増加)とDECF(減少)
  EINCFSZ、DECFSZ(増加・減少における分岐<スキップ>)
  FBTFSC、BTFSS(ビットの値での分岐<スキップ>)
  GCLRF(クリア)
  HRRF、RLF(ローテーション)
  Iその他
4−2.流れを分岐させる( IF 〜  THEN 〜  ELSE 〜 
  @ビットの0か1かで分岐・・・「BTFSS」、「BTFSC」を用いる
  A変数の値で分岐 ・・・「SUBLW」、「SUBWF」とセットで用いる
4−3.ある処理を回繰り返す( FOR 〜 NEXT )
  @定番の「DECFSZ」を用いる
  A「SUBLW」を用いる(その1)
  B「SUBLW」を用いる(その2)
  C多重構造にして繰り返しの回数を増やす
4−4.ウエイトの式で任意の待ち時間を作る
  @任意のウエイトを作る公式
  Aきわめて短いウエイトを作るには
4−5.いつでもどこでも便利に活用できるサブルーチン
  @サブルーチンの活用の仕方
  Aサブルーチン
・「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_N1> ― 十進で1桁表示   <DISP_N2> ― 十進で2桁表示
    <DISP_N3> ― 十進で3桁表示
・「DISP_NUM」(十進では最上位の0を表示しない)
   <DISP_N1> ― 十進で1桁表示  <DISP_N2> ― 十進で2桁表示
   <DISP_N3> ― 十進で3桁表示  <DISP_H2> ― 十六進で2桁表示
・「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)

【資料】

.本書に登場するPICマイコン一覧
.レジスタファイル
.ビット・バイトおよび十六進数の変換表
.Microchip社のホームページ


秋月電子の「AKI−PICプログラマーVer4.0」: PICマイコンにプログラムを書き込む装置

実験用ボード: 信号の出力、入力を試すことで、プログラミングの基本を習得する

LCD(液晶表示器)を活用する実験: データ等を表示できれば活用の幅が広がる

十進数の表示: 3桁の表示で最上位の0を空欄にできると見易い

四則演算: アセンブラは1バイト同士の加法と減法が可能、2バイト同士の加減法と乗法・除法はプログラミングで

外付けのEEPROMとLCDをI2C通信で接続する実験: I2Cの機能を備えたパーツならば、何個でも2本の線でつなげることが可能になる

乱数を活用する実験: EEPROMに書き込んだ乱数を使って、オリジナルのキャラクタをランダムに表示

8ピンのPIC12F675の活用: I2CのミニLCDに、10秒毎のAD変換値を経過時間とともに表示

40ピンのPIC16F877Aの活用: 4個のAD変換値をEEPROMに保存してLCDに表示、データの保存は数万個可能

RTC(Real Time Clock)の活用: スタート時に時間設定を行えば、年、月、日、曜日、時、分、秒の表示ができる(1秒ごとに更新)

オリジナルのキャラクタによるディスプレイ: LCDにオリジナルのキャラクタを書き込めば(8個まで)、独自の表示が可能になる


inserted by FC2 system