(ツール)
 
 
 PIC アセンブラ CVASM16 解説1

 
 
 PIC関係は、たまーにだけど質問がある。それで僭越(せんえつ)ながら、ちょっとした解説ページを作ってみた。

 まずは簡単な例題1

 
   
GIF 250x150 4.91KB


 PIC12F683を使用して、LEDをテキトーな間隔で点滅させる。

 タクトスイッチを押すと、点滅間隔が早くなる。
 
 
プロクラムの記述

 
     一般的には、"マイクロチップ社のMPASM"アセンブラ が最も多く使用されていると思われるが、僕は少ししか分からない。その他、"C言語"などもあるようだけど、僕にはさっぱり分からない。

 僕が使っているのは"
TechToolsのCVASM16"なので、それを使用 して解説する。

 Windows標準添付で、スタート→アクセサリのメモ帳に打ち込む。
 もし、秀丸などのプログラム記述に便利な、エディタソフトがあれば、それを使用するのが良い。

 このすぐ下線下の黒文字からがプログラム記述。
 薄紫色の文字は説明文。

 各行頭には、スペースまたはTabで、少しすき間をあける必要がある。
 (メモリー名とラベル名については、すき間をあけなくても大丈夫。)

 面倒かもしれないが、これをコピーペーストせずに、手打ち入力しよう。
 また、最後の行もエンターで改行が必要。

 
 
 
   
include '12f683.inc'
 PICの種類を指定する。指定しないとエラーになる。

fuses _intrc_osc_noclkout
 内蔵オシレーターを使う。
 オシレーターとは、脈動発生器。PICは4脈動で1つの命令を実行するように作られている。内蔵オシレーターは抵抗とコンデンサーを組み合わせた程度の簡単なものらしく、精度は低い。温度の影響も多く受ける。チップ個別のバラツキが多いものもある。よって時計などを製作する場合は、水晶を外付けする必要がある。それから、その脈動を同時に外部に出すこともできるので、同期させたりもできる。


fuses _wdt_off
 ウォッチドックタイマーは設定しない。
 ウォッチドックタイマーとは、何かのきっかけでプログラムが暴走して固まったりした場合、PICを自動的にリセットする機能。ただし、完璧なものとは言えない。

fuses _pwrte_on
 電源投入後72m秒間はリセットし、電源の安定を待つ。通常はONに設定する。

fuses _mclre_off
 外部リセットは使わない。
 MCLR端子とはリセット用の端子。通常はVDDと同じ電圧をかけておくが、一瞬でもグランド(0V)にすると、チップはリセットされる。 チップ内部で電圧をかけっぱなしの設定にすることにより、MCLRピンは他用途のピンに使うことができる。ただし、このピンについては 、出力ピンに設定しても電気を吸い込むことしかできない。すなわち、LEDを直接点灯させたりできまないので注意が必要。


fuses _bod_off
 低電圧リセットは設定しない。
 電源電圧が約2V以下に低下した場合、PICを自動的にリセットすることができる。


fuses _cp_off
 コードプロテクトは設定しない。
 書き込んだプログラムを読み出せないようにすることができる。コピー防止機能のようなもの。通常は設定する必要はない。

fuses _cpd_off
 EEPメモリーのプロテクトは設定しない。
 EEPメモリーとは、電源を切っても内容が保持されるメモリー。


fuses _ieso_off
 実は何の設定なのかよくわからないのでOFFにしている。
(AKI-PICプログラマーVer4では、"内部/外部スイッチオーバーモード。"とメッセージが出る。)


fuses _fcmen_off
 これもよくわからないのでOFFにしている。
(AKI-PICプログラマーVer4では、"フェイルセーフクロックモニターのイネーブルビット。"とメッセージが出る。


id '0002'
 任意4桁の識別番号を付けることができる。
 付けなくても問題ない。


mCOUNT_0 = 20h
 使うメモリーに名前を付ける。
 PIC12F683のメモリーは20hから使用可能。名前は"ABC456"等、任意に付けることができる。(最初の文字に数字は使えない。日本語は使えない。)


mCOUNT_1 = 21h
 同上。

mov cmcon0,#00000111b
 コンパレーター入力はOFFにする。
 PIC12F683はコンパレーター機能があるが、電源投入時はコンパレーターを使う設定になっている。そのため、使用しないように設定し直す。

setb rp0
 次ページに切替える。
 setbはセットビットの略。rp0を"1"にする。
 PICのわずらわしさとして、ノートをめくるようにページの切替が必要な場合がある。次の行からは、次ページでの設定になる。データーシートでは"Bank 1"という表記になっている。


mov trisio,#00111101b
 GP1ピンを出力ピンに設定する。
 「1」は入力ピンを表す。「0」は出力ピン設定。電源投入直後は、すべて入力ピンになっている。LEDはGP1に接続しているので 、そのピンを「0」に設定する。たとえば、GP4にLEDを接続し直した場合は、「#00101111b」と記述する。7ビット目と8ビット目はピンがないので、「0」を入れてある。数字の後の"b"は2進数を表す。10進数と16進数表記も可能。その場合、それぞれ"#47" "#2Fh"と表記する。(10進数は後に何も付けない。16進数はhを付ける。)


clrb not_gppu
 全体のプルアップを使用許可する。
 それぞれのピンは次の行で設定する。 


mov wpu,#00000001b
 gp0ピンをプルアップ設定する。
 入力設定のピンには、チップ内部で電圧をかけることができる。すなわち、"1"のビットが 立つ。そのピンをグランドに接続すると、"0"になるので、スイッチON、OFF判定ができる。プルアップは弱 プルアップなので、グランドに接続した場合でも、ほんの少しの電流しか流れない。


mov ansel,#00000000b
 A/Dをデジタルに設定する。
 電源投入直後は、アナログ入力→デジタル変換の設定になっているので、それは使わないように設定し直す。


clrb rp0
 切替えたページを元に戻す。
 データーシートでは"Bank 0"という表記。
 clrbはクリアビットの略。rp0のビットを"0"にする。


rLOOP_0
 ラベル名。
 名前は任意に付けることができる。ジャンプ命令などの飛び先として付ける。


djnz mCOUNT_0,rLOOP_0
 mCOUNT_0メモリーからマイナス1してゼロじゃなかったらrLOOP_0へジャンプする。
 djnzはデクリメントジャンプノットゼロの頭文字。たとえばmCOUNT_0の値がゼロだったとすると、マイナス1すると255(10進数)で、ゼロじゃないので、rLOOP_0にジャンプする。すなわち、もう1度マイナス1する。今度は254になり、ゼロじゃないので、rLOOP_0にジャンプして…を繰り返し、ゼロになったら次の行に進む。


djnz mCOUNT_1,rLOOP_0
 mCOUNT_1メモリーからマイナス1してゼロじゃなかったらrLOOP_0へジャンプする。
 内容は上と同様だが、マイナス1してゼロじゃなかったら、上の行へ戻す。もし、mCOUNT_0とmCOUNT_1がゼロだった場合、256回x256回=65,536回繰り返す。これは時間を消費させる目的。


xor gpio,# 000010b
 GP1の出力を反転する。
 出力だった場合は、電気を吸い込む。すなわちLEDが点灯していた場合は消え、消灯していた場合は点く。

jnb gpio.0,rLOOP_0
 GP0にビットがなければrLOOP_0へジャンプする。
 jnbはジャンプノットビットの頭文字。通常は内部プルアップにより5Vがかかっているので、"1"のビットがある。タクトスイッチを押すと、電圧はグランドレベルになり、"0"ビットになる。すなわち、タクトスイッチを押さなければ、次の行に進む。


rLOOP_1
 ラベル名。

djnz mCOUNT_0,rLOOP_1
 mCOUNT_0メモリーからマイナス1してゼロじゃなかったらrLOOP_1へジャンプする。
 先の命令と同様。


djnz mCOUNT_1,rLOOP_1
 mCOUNT_1メモリーからマイナス1してゼロじゃなかったらrLOOP_1へジャンプする。
 先の命令と同様。


jmp rLOOP_0
 rLOOP_0へ強制ジャンプする。
 impはジャンプの略。永久に繰り返すことになる。

 
 
 
   
・入力が終わったら、名前を付けて保存する。
 ファイル名は"Simple_a.src"とする。
 (標準の拡張子は"txt"だが、ここでは"src"にしておく。)

・保存場所は後で移動するので、どこでもかまわない。
 
 
 
"CVASM16アセンブラ"を入手

 
    入手方法は次の通り。
 "TechTools"のホームページから、PICmicro(R)Tools→Assemblerをクリックする。

 http://www.tech-tools.com/

 (このページを作成したのは2007年12月なので、現在はデザイン等が変更されている。)


GIF 600x300 32.3KB

 次に「Click here to download the latest version」をクリックする。


GIF 600x300 30.4KB

 「tde52_qw271-1.exe」をクリックして、ダウンロードする。
 ファイル容量は 6.71MBある。


GIF 600x300 41.8KB

 
 
インストール

 
     ダウンロード完了後 、ダウンロードした「tde52_qw271-1.exe」をダブルクリックする。
下のSetup画面が出るので「Next >」を押す。


GIF 400x300 27.8KB

 次に下の全画面になるので「Next >」を押す。


GIF 400x300 21.1KB

 インストールするフォルダーの確認画面になる。
 初期設定だとCドライブに「pictools」というフォルダーが作成される。通常はそれで問題がないはずなので
 「Next >」を押す。(問題がある場合はBrowse...で変更する。)


GIF 400x300 16.6KB

 次にインストールする選択画面が出る。アセンブラだけあればよいので、「ClearView Assembler」を選択して「Next」を押す。



GIF 400x300 20.4KB

 インストール先を確認してくる。通常は「PICTOOLS」で問題がないはずなので「Next >」を押す。



GIF 400x300 15.2KB

 次に確認画面になる。「install」を押す。



GIF 400x300 19.3KB

 インストールが始まり、バーグラフ表示になる。



GIF 400x300 12.9KB

 問題なくインストールが完了すると下画面になるはず。「Finish」を押すとインストール画面が消えて完了。


GIF 400x300 29.9KB

・もしアンインストールしたい場合は、コントロールパネル→プログラムの追加と削除から実行できる。(他のアプリケーションと同様。)

※インストール後は"pictools"のフォルダーが作成されるので、先ほど作成した"Simple_a.src"ファイルを、そこへ移動してお く。

 
 
アセンブル

 
     CVASM16は、旧DOS窓で使用する。

 ・Windows左下のスタート→すべてのプログラム→アクセサリ→コマンドプロンプトを開く。(Windows XPの場合)

 ・カーソルをCVASM16のインストールしたフォルダに移動する。
   初期設定のままだとCドライブの「pictools」なので、

    cd pictools

   とタイプしてエンターキーを押す。


GIF 600x150 4.56KB

 ・次に

   cvasm16 Simple_a /m

   とタイプしてエンターキーを押す。



GIF 600x150 4.73KB

   下画面のように、...okayが2つとDone が出れば成功。
   同じフォルダーに

   SIMPLE_A.HEX

   というファイルが作成されているはず。



GIF 600x300 8.41KB

 プログラムの記述等に何かミスがあって、アセンブル出来なかった場合は、

  ..Assembly aborted...

 と出てアセンブルできないが、ほとんどの場合はミスのある行番号が表示されるので、ミスを見つけやすい。

 ファイル名設定の注意点として

  ・拡張子を除き半角8文字まで。
  ・日本語は使えない。
  ・大文字、小文字の区別はない。
  ・拡張子はsrc以外でも使えるが、その場合、拡張子名まで指定しなければ、ファイルが見つかりません
   というようなエラーになる。


 アセンブル時のポイントは、ファイル名の後ろに

  /m

 を付加すること。
 これを付けなければ、OBJという拡張子の16進数ファイルができるが、マイクロチップ社互換モードではないので、一般的なライターでは正常書き込みでき ない。

 
 

チップ(PIC12F683)に書き込みしてみよう

 
     ・MICROCHIPのPICkit2は 【 こちら 】 (別ページにジャンプ。)

 
 
動作させてみよう!

 
     チップへの書き込みが無事に終わったら、回路を組んで動作させてみよう。回路はブレッドボードに組むのが便利だが、ユニバーサル基板や空中配線ハンダ付けでもOK。
 最初の例題説明通り動作すると大成功。

 もし、期待した動作をしない場合は、どこかが間違っている。もう一度チェックしよう。何度見直ししてもダメな場合は、↓のファイルを使用してみ よう。これは正常動作確認済みのプログラム。

   Simple_a.src (535バイト) …【 ダウンロー ド 】

 これを使用してうまくいく場合は、プログラムの打ち込みに問題があったと思われる。何が違うのか、よく確認しておこう。

 
 
その他

 
     例題のプログラムは、元々は"PARALLAXのPICライターセット"購入時、付属してきた説明書に紹介されているもの。
 しかし"PIC16C54"用の記述であり、今ではかなり古い型番となったので、今のPIC用に少しアレンジした。
 また、オシレーターとMCLRはチップ内蔵を使用するようにして(当時は無かった機能)、シンプルを更にシンプルな回路にした。

 なお、その回路とプログラムは、cvasm16をインストールすると同じフォルダーに"pictools.pdf"があ るので、その188ページにある。
 それから、cvasm16アセンブラの説明書は、同"pictools.pdf"の133ページから。たとえば今回使用した"djnz"は163ページにあ る。"jnb"は165ページにある。


[エディタについて補足]

 プログラムを記述するソフトは、Windows標準添付のメモ帳やワードパットでもOKだが、改行ごとの行番号を表示できるものが使いやすいと思 う。(僕の場合 、プログラムがある程度長くなってくると、行番号が無いと訳分からなくなってくる。)

 僕は「秀丸(ひでまる)」というエディタソフトを使っている。
 シェアウェア(当時で4千円)だが、プログラム作成に重宝している。


[アセンブラについて補足]

 "cvasm16"は、英語のホームページからの入手なので、よく分かっていない部分も多いのだが、"PARALLAX"や"秋月Paアセンブラ"と同様な記述で使えて、問題なく書き込みできてい る。コンフィギュレーション設定もOK。

 本当は日本の"秋月Paアセンブラ"を使いたいのだが、現在はバージョンアップしていないようで、新しいチップに対応していなく、使えない状態 。

 正直言うと、この系統のアセンブラがいつまでもサポートされるのか、将来が不安なところがある。しかし、マイクロチップ純正アセンブラを勉強し直す気にもなれ ないので、使える間は"cvasm16"を使用し ていくつもり。


2008.01.14
 cvasm16でエラーメッセージをすべて表示する方法を、雨宿りの軒下掲示板でryuZoさんに教えてもらった。忘れないようにここに転載してお く。

 以下のようにすれば、すべてのエラーメッセージを errmsg.txt というテキストファイルに保存できます。
 c:\pictools\CVASM16.EXE B4_s675.src /m > errmsg.txt

 
                             
 
 
  バイクでフローターフィッシングとキャンプ > ツール > PIC(ワンチップマイコン)

 
  << トップページへ

   
inserted by FC2 system