(ツール) |
||||||||||||||
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(ワンチップマイコン) |
||||||||||||||
<< トップページへ |