Comments
Description
Transcript
付録D
はじめての plCプ ログラミング Ver4で PIC 12F6291こ 対応 PCを このソケツ トに挿し フログラムを書き込む つている人 PICっ てよく聞 くけど,プ ログラムを組むとなると,と ても難 しそうだと思 し仕組みが も多いと思います どのようなものでも ,は じめは難 しく感じるものです 少 光ダイ ゎかってくると,PiCの プログラムを組むのが楽しくなつてきます ここでは ,発 し,実 際にPIC F認 撃ξξ 3を 語 11翼蔑:8三塁 省[誓 :『 ら3'7罰 『 観 この ア イコンは I「 人にチ│.F角 イ 力'あ ります `層 `ι . 付録 D は じめての PICプ ログラ ミ ング 写真 Dl PiC1 2F629の 外 観 Cド D.1プ ロ グ ラ ム の 書き 方 ● どのよ うな PiCを 使えばよいの ? PICに はた くさんの種類があ りますが,そ の中で最も小 さな8本 足の PICを い 使 ます 8本 足の PIC に も,い くつかの種類があ ります ここではPIcに 書き込んだプログラム が思 うょぅにrl」 かなかった 場合に,消 してlJ度 もi午 き直しがで きる,PIc12「 629と い うPICを ltい ます (写 真 Dl)l lR1200 1ilは どで買えて,flf度 も書 き直すことがで きるので, とて も経 済的です ● プログ ラムを組む って ? さて,こ こでプログラムを組むとい うことはどうぃ ぅことなので しょ うか 「 発光ダイオー ドを点減 させるJと い う動作を,PIcに やらせるわけですか ら,発 光ダイォー ドを点灯 しなさい,消 灯 しなさい といった命令をPIcの 中に書き込 まなければなりません その 命令を書 くことが,プ ログラムを囃lむ とい うことにな ります PICに は人間の言葉を直接理解することがで きないので ,PIcが 理解で きる言葉で命令を書 く必要が あります PIcが 理解できるのはoと 1の 2進 の IL界 です 人 間が0と 1だ けをftっ てPIcが 解釈できる プログラムをX[む のは とて も無理です そこで,ァ センブラ ′とかc言 語 ″ を使ってプログラ′ 、を組み コン至ェ ラフ とい う翻訳装 置を使ってPIcが 解釈できるオブジェク ト コー ドジに変換するのです ● アセン プラ言語 と C言 語 プログラムを淑lむ ための :=,i吾 にはいろいろあ りますが ,PIcで は 口こアセンプラ言i:1と C言 語が使わ れてい ます 人間が話す言葉に方言があるように, どちらの言 語にも少 しずつ違った言語があ ります どちらかとい うとアセンプラ言語は機械 よりで,c li.jtは 人 Fuよ りにな りますが,そ れぞれに 長 短 があ ります ここでは,PIcの 発売元であるMicrOchip社 が無償で提 供 しているMPASMと い うアセンプラを使 つてプログラムを殺1ん でい きます , ● PICの 入力や出力はどうゃって決めるの ? PIC12F629は 8本 足の 1番 ピン(埓 )に 電源の十をつ なぎ.8番 ピン(ム 、 )に 電源の ―(GND)を つ な ざます 残 りの6本 の足は目的に応 じてそれぞれのビンの 役割を変更することがで きます ここでは 残 りのすべ てのビンをディジタル人出力に設定 します ディジタル人出 力とは,人 力も出力も0(L脚 ) ,″ , 232 И, ONOL N 一〇 一 C 6PL (,P, 図 01 と l(High)だ けを扱 う とい うことです デ イジタル入 出力設定時 の ビン配 置 4番 ピン (CI)3)だ けは入力 専月1で ,残 りの ビンはプ ロ グラムの 中で入力 に もIL力 に も設定する ことがで きます この ように,入 力 とか │ll力 となる ピンの ことを人 出カ ポー トとか 1/o(Input/Output)ポ ー トと呼び ます ● 設定 の 方法 についてはプ ロ グラムを卓Fく ところで 詳 しく説り]し ます PIC1 2F629の 動作 電圧 般的に は 5Vで 使 うことが 多いのですが ,2Vか PiC12F629は 2Vか ら55Vの 電圧 で動作 します jlの 範け H ら動作す るので ,乾 電池 を24同 直列 に して使 うこと もで きます PICの FI類 によって ltえ る電 が違 うので ,lltい 電││:で ltう 場合 にはデー タ・ シー トによる確認が必要 です ここでは 5Vの 1['原 電月1を PICに 供給 します ● 発光 ダイオ ー ドに つ いて 発 光ダ イオー ド(LED)は ,lE流 を流す と発光す る半導体 の 種 で ,ア ノー ドと呼ばれ る端 ■とカソ ー ドと呼 ばれ る端 子 の 1つ の 端 rが あ り,ア ノー ドに ll,カ ソー ドに負 の 電 lFを 加 える と,I´ ED ight Emitting Diodc)の 発光色 によって電流が流 れ始める│[サ 1:が 異な りますが ,赤 色 の LEDで は約 (1′ 15Vか ら 17Vの 1[│「 で電流が流れ始 めて発 光します 通常 ,LEDは 電流 を ll限 す るlltllLを 直列 につ ない でllい ます 写真 D2の 足 の長 い 方が ア ノー ドに な ります ● 発光 ダ イオ ー ドを点滅 させ るため の 回路 ピンは 25111A 発 光 ダイオー ド(LED)と PICを どの ようにつ ない だ らよいで しようか PICの 人出カ ‐ 方 LEDは 15mA il後 の電流 を流 して点灯 させ ます つ ま り,PICに は LED の 許容電流 があ ります を直接点灯 させ るだけの能力 があるわけです 足の長 いほうがアノー ド 足 の短 いほ う が カソ ー ド 写真 D2 発光 ダ イオ ー ド 233 付録 D は じめての PiCプ ロ グラ ミング 6ND 図 D2 PiCの High出 力 を使 う方法 lllカ ポー トに LEDを つ な ぐ方法は 2種 類あ ります つ は図 D2に 示す PICの 出力 tllに LEDの アノー ドをつ な ぐ方法で,3番 ピン (CPl)が IIghに なっ た ときに発光 ダイオー ドが点灯 します この LED(D)と IIt抗 (P)が 人れ替 わって もか まい ません も う つ は図 D3に 示す PICの IH力 側 に LEDの カソー ドをつ な ぐ方法 で ,3番 ピン (CP4)が Lowに なっ た ときに発光 ダイオー ドが点灯 します LED(D)と 抵抗 (だ ])が 入れ林 わって もか まい ません。 今卜 Jは 3番 ピンに発光 ダイオー ドをつ な ぎますが ,人 力 専用 の 4番 ピン (GP3)以 外 ならどこにで つ も PICの な ぐこ と力 'で きます ただ し,つ な ぐピンに応 じて発光ダイオー ドを点減す るためのプログラム を組む 必 要があ ります。 PICの 1番 ピンと8番 ピンの 間 に 01μ F(マ イク ロ・ フ ァラ ッ ド)の コンデ ンサが接続 され てい ます が ,こ の コンデ ンサ は LEDの 点減には rl接 関係 ない部品で ,PIC内 部で発 41す る 雑 キ (ノ イズ)ゃ 電源 ラインの ノ イズを吸J(し て,PIcの 動作を安定にするために使 うもので,で きるだけ PIcの 近 くに取 り 付けます 11に 高周波特性 の よいセラ ミック コンデ ンサ をfllい ます LED(Dl)と に使 う抵抗 rlダ 」 儒 1)の llt抗 1::は どうゃ って決めた らよいの で しょうか。 ここでは PIcが ス イッチの役 ‖を してい る と考えるとわか りやす いで しょう。 PI=(電 源i[,「 5V― EDの 川n方 向電圧降 ド16V)÷ LEDに 流す電流 0015A=227Ω と計算す る ことがで きます 実際 には PIcそ の もの に内部抵liが あるので ,計 算通 りにはな りませ ん が ,″ に 220Ω 前後の抵抗 をlttえ ば よいこ とにな ります この 抵抗には EDが 点灯 した ときに 5V― I´ I´ GllD 図 D4 234 PICに スィ ッチの 役 目を させ る 図D5 発光ダイオードを点減させるためのプログラムのフローチャー ト 16V‐ 34Vの 十[∫ I:が か か る こ とに な ります lltllL器 に流 れ る電 流 は熱 に 変換 され ます 念 の ため 抵抗 器が rll費 す る電 力 をIi「 算 してみ る と , 34V X 0015A=005ヽ V つ ま り 1/20Wに な ります したが って ,こ のllt抗 に は 1/6W lllを 4tっ て も 1分 余裕 があ る こ とが わ か ります さて ,PICに 単な る ス イ ツチ の役 Hを させ るだ け な ら,何 もプ ロ グ ラム を組 んで まで PICを 使 う必 要 はあ りませ ん せ っか くです か ら,05秒 閾lLEDを 点灯 した ら,次 の 05秒 川 LEDを 消灯 す る とい う動 作 を繰 り返す プ ロ グラム を■1ん でみ ます。 ● プ ロ グ ラ ム を 書 く た め に必 要 な も の Microchip社 で 無償 提 供 して い るり‖発環境 の MPLAB た だ し,‖ 本語 が 直接 人 力 で きな い の で コ メ ン トを 1+い た セえ ます テ キ ス トが 占け る もの な ら何 で もイ IDEの エ デ イ タで も 1+く りす る の に不 l■ です こ とが で きます パ ー ソナ ル・ コ ンピュー タの ア クセサ リの 中 にあ る 「 メモ llKJ力 iイ 史え ます ● プログラムのフロー チ ヤー ト 仕 'liの 流れをドλtす るためにllわ れるフローチヤー ト′を占いてみると,プ ログラムをどのように 組 んだらよいかわか ります (図 D.5) ● プログラムでの初期設定 i別 を設定 した り,プ ログラムを プログラムの最初に必ずIL述 する「初lrll設 定Jで は,ltう PICの 不 ファイルとい う,PIC 12F629に 備わつている基本的な1記 述 ,「 きやす くするために, イ ンクルー ドク Ji項 をまとめてあるフアイルを指定 した り,05秒 ulの タイマ を作るために用意する レジスタ(人 れ物 ) の割 り` Чてや,プ ログラムの実行 始番地を決めます また,LEDを つ なぐ3番 ピン(Gl)1)を 出力にll "‖ うとい う設定をします 次に,プ ログラムのメイン部分の中で,「 Plを High」 はPICを 使 って「スイッチをONJさ せ るこ ‐ とに‖1当 します 「05秒 待つ」は何度もl■ うので,サ ブルーチンフといって, つの まとまったプロ (〕 235 付録 D は じめての PiCプ ロ グラ ミング グラム と して必 要 な と きに呼 び Jlし ます せ る こ とに村J` %し ます また,「 GI)1を L()wJは PICを 使 って 「 スイ ッチ を OFF」 さ 05秒 経 過 した らルー プの 先Jliに 戻 って ス イ ッチ の ON/OF11を で は ,初 期 設定 の プ ロ グ ラ ム を │:い てみ ま し ょう は,プ ロ グラム には 関係 の ない コ メ ン トです リス トDl 繰 り返 します ′ リス トD.1に /1Nす セ ミコ ロ ン ()か ら後 ろの 文 セ ミコ ロ ンは 行 の どこか ら書 い て もか まい ませ ん 発光ダイオー ド点減プログラムの初期設定部分 初期設定 INCLUDE'P12F629. INC'' 使用するPCの 種類をこのように書く MPLABで あらか じめ用意 してあるインクルー ド ファイル で このように記述 しておくと インクルー ド ファイルの中であ らか じめ設定されて いるラベル (名 前)わ ` 使えるので プログラムの見通 しか よ くなる ほかにも書き方がい くつかある くP12F629 1NC>と しヽう書き方もできる #INCLUDE & CONFIC INT OSC BODEN OFF E MCLRE OFF NOCLKOUT & PWRTE ON & & WDT OFF CPD OFF & CP OFF コンフイギ ュレーシ ョンの内容を以下のように設定 (G陽 をレ0ビ ン) パ ワー ア ップ タイマ ON iデ ータ コー ド プロテク ト :OFF :コ ー ド フロテク ト 10FF i発 振方式 1内 部オシレータ :プ ラウン アウ ト リセッ ト OFF MCLRピ ン OFF(GP3を /0ビ ン ) ドック タィマ :OFF :以 上の設定はここで必ず書かなければしЧナないというわけではない PCに プログラムを書き込むときに ライタで設定 して :プ ログラムと一緒に書き込んでもよい iウ ォッチ │は じめのアンダースコア (_)ま 二つ続けて書 く :内 容に ついては付録 Cの 「PCの 概要 │を 参照 COUNTl EQU COUNT2 EQU 20h 21h :時 F05を カウン トするための 変数 レジスタ (入 れ物)を 用意する 一つては足 りないのでもう一つ レジスタを用意する COUNlと COUNT2は ラベルとい ってここでは20h番 地と 2 1httltlに ある レジスタにつけられた 名前 ブログラムを書 くのにア ドレスの代わ りにわか りやすいラベルを 使えるよ うにする ラベル ま行頭か ら書 く約束になつている P C12F629で は20h番 地のア ドレス (場 所)か ら64個 の汎用の レジスタが用意されていて いろいろな 目的 に使 うことができる プログラムは電源を切 つて も記憶 しているが この レジスタ ま 電源が切れると消えて しまう ORC BSF 0 STATUS, プログラムはこの0番 地か らスター トする こrtか ら設定 するレジスタはバンク 1と いうところにあるので ここでバ ンク lに 1971り 替える STATUSと しヽうレジスタの RPOと しヽうビッ トに1を セ ッ トする 23● ': 今 )1 は説明 のためにた くさん コメン トを書 き込 んであ ります 初期 設定 の 部分 を書 くの は最初はli倒 だな と思われ ますが ,い くつ かプ ログラム を11:い て い くうちに す ぐに慣れ ますか ら,心 配 しな くて も大 丈夫です _ リス トDl 発光ダイオー ド点滅プログラムの初期設定部分 (つ づ き ) ッ ト セ ッ トとい CALL 3FFh番 地にある,ブ ルーチンにジヤンプする命令 3FFh番 地に1よ 工場から出荷されるときに 内部発振周波数の 3FFh 校正値が書き込まれている ここではこの値を読み に行 く MOVヽ IF OSCCAL 読み出された内部発振周波数校正値は レジスタに格納 して戻 つてくる PCの 内部にあるWと いう ここはWレ ジスタに格納されている値を OSCCALと いう レジスタに格納する命令 で このOSCCALレ ジスタ さくして に内部発振周波数校正値 をセ ッ トすることで誤差を」ヽ 4MHzに 近づけることができる PCは この4MHzの 1/4の ステ ップでプロクラムが実行される つまり l MHzの 速さでプログラムが実行される 1秒 間に 100万 ステッフなので 1ス テ ップの実行 に l μsの 時間がかかることになる ibと 書かれたの よバイナ リとい つて2進 数 を表すときに使 う 10と ■を合わせて8個 並んでいる :つ まり2進 数で8ビ ッ ト並んでいる MOVLW b′ 00001000′ 1-番 下位がビッ ト0 -番 上位がビッ トフになる ここでは iビ ッ ト3だ けに ■をセ ッ トしている MOVWF TRIS10 :Wレ ジスタに格納された値を TRSOレ ジスタに格納する命令 :こ のTRISIOレ ジスタは /0ポ ー トの入出力を設定す るための レジ :ス タで0を セ ッ トすると出力 にな り 1ビ ッ ト3だ けを 1に したが │こ とで ■をセッ トすると入力になる この ビッ ト3は PCの GP3ボ ー トの このポー トだけは入力専用 :0を セッ トしても無視される :GP3を 除いて残 りのポー トは出力設定になる :PC]2F629で は /0ポ ー トの数が六つなのでTRISIOレ ジスタ :の 8ビ ッ トの上位 2ビ ッ ト│よ 意味をもたない :設定 した値をWレ ジスタに一度格納 してからTRISIOレ ジスタに 1格 納 しなお している :値 を直接 T工 RS10レ ジスタに格納できな いのでこのようにする BCF STATUS, RPO :バ ンク 1で の設定が終わ つたので STATUSレ ジスタRPOビ ツ トを 1ク リア (0)し てバンク0こ 戻る :頭文字のBCは ビッ ト クリアという意味 MOVLW b′ 0000011■ MOVη ,F CMCON ′ :PC]2F629で はCPOか らCP2ま での三つのポー トがあらか じめ ンプ (レ ータ)に 設定されているので その設定を解 :電圧1ヒ 較器 (コ :除 して ほかのボ ー トと同 じデ イジタル1/0ボ ー トに設定 し直す 237 付録 D は じめ ての PCプ ロ グラミング コラム 演算 記 号 ヽII'ASMで うことの できる汀i彿 記 号はた くさんあ りますが,そ の 1か らよ くllわ れる洒t"I己 オを″1介 します (表 DA, 表 DA 'と アセンフラで使われる演算記号 意 S ( 味 現4の プElグ ラム カウンタの 処月をプロ ′ク化する ) かけ に先減 ど 'な “ COTO ,+1 ■4'の プログラム カウンタの次のア ドレスにシャンプする (coullT+1)'■ 28 co(nTレ ジス タの11に 1を 力Iえ てか する ',128‖ A'B " 制 り■ ■ し算 Jき high , ア ドレスの Iillバ イ ト A+B B A‐ МOVLW high COUNT ‐プログラヱ、 メ ジスタ● モリ ア ドレスの comTレ iイ │′ ヽイトをヽ レンスタに格 納する 6"で はブIlグ ラ′ 、 メモリ ア ドレスの11終 酢地は3FFhま でとなるので バ イトのll.人 はo3hま でとなる 1'IC12「 low ア ドレスの ド位バ イト 「 │タ MOVLl・ 1 low couNT comTレ ンス タのプ ロ グラフ 、 メモ リ ア ドレスの 卜rlバ イトをヽレジスタに 細 する 大 きいかヽ しい 大きヽヽ IF A,B A力 小さいかヽしい 'Bよ さい 等しい ι り大き ′ ば真(lr肥 I司 ) `ナ IF Aく ‐B I A力 (Bと 4ヽ “ IF A>‐ B Aが Bと 11し か 人 きけ″tlご ,t([rllr) じ力J、 さけり ι !よ ず :(l rttc) IP Aく B Aが Bよ り4ヽ さけォtl工 ,((truc, IF(A=‐ B) Aと Bが け,tば 共 │〔 rucリ 'しB) IF (Al‐ Aと B力 ゛ ■1ま ,((truc' ヽしくな1ナ オ MCLRE OFF & PI(,12「 WDT oFF 6291,は _MCLRE_oFFIま HloFBF'(11 1111 1011 1111) _WDT_OFF`よ H'3FF7.(11 11■ ■ 111l olll) 11 1111 101■ 1111 mD ll llll llll olll ll llll loll olll となる FLACA I FLAGB FmGAレ ジ ス タ と FLAGBレ rF 論理否,L ジ ス タの ●容 を ビ ッ トlrtで IF (A‐ ‐B)&&(C‐ ‐D) Aが Bと 11し てかつcが Dと 同 じな ら東 (truc, (A==B) (C==D) Aが Bと 11し かまた│ま c力 (Dと IJし なら彙 ぃue, IF I(A‐ ‐B) Aと Bが ヽ しい ときに1夕 底J記 ll ) 238 ORす る ● 内部 発振周 波数 の 校 正値 ここで 人 J'な の は内 部発振周波 数 の校 正ltで す 1)ICの プ ロ グラム を11容 す る部分は,フ ラ ツシヨ ROM(ロ ム)と I子 ばれるメモ リで,何 度 も書 きrIす ことがで きるため,プ ロ グラム を占き込む と,プ ロ 、・ メモ リの最終 番地 (3FFh)に 記録 されて い る内部発振周波数 の校 lF値 が lllえ て しまい ます グラノ ‐ iし く校 正す る ことがで きな くな って しまうので,プ ロ グラム 度消 して しまうと,内 部発振 l・l波 数を正 │ をデ :き 込む前 に,必 ず PICラ イタにセ ッ トして ,Iリ ー ド│コ マ ン ドを実行 し,最 終番地 に 書かれた11を メモ してお きます 振周波数 の校 [11:が J:き 込 まれて い るので しょうか 秋月電 ■の PIC ライタ バー ジョン4に PIC12F629の 新 1ム をセ ッ トして│リ ー ド│コ マ ン ドを実行 してみ ました プ ロ グラム メモ リの 最終 番地 (3FFh)に は,図 D6で は 3498と い うllが 書き込 まれて い ます 14終 番地 には どの ように内 ‖ `発 これは 2711数 に直す と,1■ (34h)は ,Iう IC命 令 ビッ ト100■ 覧人 この 中の 1位 6ビ ッ ト■■ o100 JttC IPICの 概 要J参 ‖(1)か ら,RETLW命 令 だ とわか ります ド位 8 0100 100■ (イ ■000(98h)が 校 ltわ れて い ます [1′ :に ■000と な ります な ります 実際 には ド位8ビ ッ トの 中の L位 6ビ ッ トが 校 Fllに この最終 番地 には , RETLW 98h と占か れ て い る こ とが わか ります この 校 者が lltも 1111は lltい ■■■■1100か ら o0000000ま で の 11:が と られ ,前 者が 最 も高 い 発振 周 波 数で ,後 中心 j‖ 波 数 は loo00000で す 発振 lll ll14数 に な ります に (こ こで は )98hと い う1′ 1を 格納 して ,呼 ばれ た次 の 命 この よ うに /1に RETLW命 令 は ,Wレ ジ ス タ 戻 ります 度 もプ ロ グ ラ ム を メ}き 込 んで い な い PICか ら, きち ん と内 部発振 周 波 数校 正llを 読 み llす こ とが で きま した で は こ こで ,こ の '卜 で これ か ら(30り lす るプ ロ グラムか ら4i成 され た ,led― test HEXと い うフ ァイルを み込んでみましょう 図 D7は スクロール してプログラム il売 メモリの最終番地付近を見たものです プログラムの力 t終 番地 (3FFh)に あった 3498hと い うlrlは 3FFFhに デ │き 換 えられて しまって い ます 11り のlllも すべ て 3FFFhに なってい ます PIC12「 629は 14ビ ッ トのプログラム メモ リカ 史われていて,プ ログラム 'イ 』』」 デバイス選択 : PIC12F629 フ ψ瓢型 lzcll2F|6firr Ir|1[ |rir:ft | 面 腰地掛準 」 F― AL臥 V4… =セ 4-d 94ス・ … 00EO:3FFF OFFF OFFF ,FFF OFFF 3FFF 3FFF 3FFF 図 D6 PIC1 2F629の 内部発振周波数校 正値 :注 1,PICそ itぞ オ tに 込 まオιて い る コlI・lI手 に ヽな る !が “ ':き 239 付録 D は じめ ての PiCプ ロ グラミング lzcll2F lrBcTr I デバイス題択 」 図 D7 r Frr F Frr “ ¨ ALBOは マイ赫 ―夕を叫 「 FF Frr 嗣 FF Frr ・=lα フ コグラ 辱 Uサ イス I LI響 捻b)「 : PIC12F629 iicra I rrcrr HEXフ ァイル を読み込ん だあとのプ ロ グラム メモ リ最終番地 が 吉き込 まれてい な い番地 (ア ドレス)は ,す べ て 1が ギ÷き込 まれて い るのです も し,こ の1犬 態で PIcに 書き込 んで しまうと , CALL 3FFh で 最終 番地 が コー ル され て も,3FFFhが J:き 込 まれ て い るた め , と L位 ビ ッ トの 3Fhは ADDLW命 令 し オ 月(さ lll年 ADDLW OFFh とい う命令が 実 行 され る こ とに な ります 2、 これ で は コー ル に対す る リター ン命 令 が な いの で ,プ ロ グラ は 娯走 して しまい ます 秋ナ l製 の PICラ イ タ .ソ フ トは とて もよ く作 られ て い て , 内 部 発振 .l波 数 補 正lliを 記憶 して い ます 度 i売 み 込 み を実 行 す る と,そ の と きの 図 D7の 10SCCALデ ー タ (16進 数 )]と 書か れ た イillllに ,読 み 込 ん だ ときの値 が 1せ 憶 され て い るのが 確 認 で き ます 10SCCAI´ BCは ,マ イコン内 のデー タをイ 吏り ‖する〕と書かれたノl:側 のチェ ックを外 してか ら,プ ロ グ ボ タンをクリックする と,10SCCALデ ー タ(16進 数 )]と ]i:か れたイ,9Uに 表示 されて い る値 を Lき 込 み ます この l11は 編集す ることが で き 内部発振 ll l波 数校 正fliと してプ ロ グラムと 締 に PICに ‐ ラム , るので,意 図的にf11を 占き換 えて内部発振l・l波 数を調整する こと もで きます [OSCCAL BGは ,マ イ コン内 のデー タをllり ‖する1と 書かれたス:1‖ のチェ ックを付けたまま,プ ロ グ ボ タンをクリックす ると,た とえプ ロ グラムをI売 み込んだ最終番地が 3FFFhに なって いて も セ ッ トした PICの 最終 番地 に メ }か れて い る1れ が 採用 され ます したが って,新 品 の PICを セ ッ トして ラム , ギ}き 込む ときはこの 方法で ■き込み ます さて,こ こで BGと い う 1:葉 が出て きました これはバ ン ド ギ ャップ とい って,パ ヮー オン リ アウ ト リセ ッ トにftう 基lll i[圧 の校 ili411な のです PIC12F629で はこのり !準 1[ な ってい ます 2ビ ッ トで 校「 され ,ooか ら■■までの 4種 類 の値 をもち ます 図 D7で セ ツ トとプラウ ン │:は 21Vに はIBGデ ー タ (範 囲:0∼ 3)1の イiに ■と表示 されて い るのがわか ります パ ヮー オン リセ ッ トとプラ ウ ン アウ ト リセ ッ トは,今 回のプログラムではイ t用 して い ませんが ,内 部発振周波数校 ‖ ill:と 締 に メモ してお きます 内部発振 l路 をltう 場合に,次 の 2行 をプ ロ グラムの 11後 に 書い てお くと,万 「 で きます _ 240 の暴走 を防 ぐことが 表 Dl 主な疑似命令 LIST アセンブル‖ リス ト‖1カ :旨 ,L ン■ 卜11り 111,こ P・ くTYPE>│よ プロセ "tの 絆工NCLUDE CONFIC ORC END ほかの ソー 17N フアイルの収 り込み コンフ ィギェレー ションの ,,Lを ‖ ルヒ ウ L数 のラベル/Lエ プログラフ 、 の開始 ll地 を指定 ツース フアイルの終わりを '11, ORC 3FFh :プ RETLW 80h ロ グラム ill:は 適 :し 11で メモ リの最終番地 を指定 よい ここでは11[‖ 1ll:(10oooooo)を ,設 定 てお く そ して PICプ ロ グラムの 終 わ りをatす END を最後 の 行 に書 い て締 め く くります。 今卜 Jの プ ロ グラムでイ tわ れ て い る表 Dlに 4tす 命令 は疑 似 命 令 とい われ る もので ,ほ か に も数 多 くの 種 類が あ ります。 詳 し くは付録 Cの 「 PICの 概 要」 を参‖ 1し て くだ さい。 ● 05秒 タ イマ この タイマ は EDを 点灯 したあ とと,消 灯 したあ との 2[1ル ープの 中で使 い ます t源 を切 る まで は何度 も繰 り返 して使 うので,サ ブルーチ ンとして作 ってお い て,ltう たびに呼 び出 します 05秒 の時 Falを 作 るために 4MHzク ロ ックだ と50万「1の プ ログラム・ステ ップが必 要にな ります。 こ れはリス トD2の プログラムの ように して作 ります I´ 人雑把 なイ !ち 時‖Iを 作 るの な ら,細 か くNOPを 入れて時‖ Jを 調整 しな くて もよいの で すが ,今 [1は ビッタ リ50万 ステ ップ (500ms)の サブ ルーチ ンを作 ってみ ました ● :/0ボ ー トヘ の 出力 では,PIC12F629の 3番 ピン (CPl)に どのよ うに出力す るのかを説りlし ま しょう BSF CPIO, 4 コラム 数値データの書き方 数 『 表 DB 種 !を 表す 方法 に表 DBに 示す 5柿 好1が あ ります 数値 デ ー タの書 き方 書 式 ′ ____ ユ くdigits>[ま たは くdigits> 数 H'く hex_digits>′ hex di または Oxく hex_digits>ま たIま 1 0jII数 一 一 脚 幽 卿 16迪 │。 くheX_digits)H(■ llヵ lA‐ F'ス 56'ま たは 3F′ タ 12と きは』の0を 竹略してもよい O'<octal d j.,git s >, _ B'<biqary_dj.gits>, A.く characters>′ D′ H′ または′くcharacters>′ 56 Ox3F.03FH 3FH′ ,tヽ すオとで もよ tヽ │ I'<i':as, B'1000■ 010′ A′ ABC′ または′ABC′ 247 付翁 景D はじめての PCプ ログラミング リス ト02 タイマの作 り方 1500ms WA T,ブ ルーチン WAIT500MS :500msの 待ち時間を作るので :こ のルーチンで50万 ステップを,肖 イ しする それには MOVLW MOV"F d'249′ 1lmsの タイマを500回 コールすればよいわけ COUNT2 CALL CALL NOP NOP NOp NOP NOP NOP NOP DECFSZ WAIT WAIT 18ビ ッ トのレジスタでは500を セットできないので 1250に して 1回 のループで lmsを 2回 コールする 1実 際には249を セットして 1回 のループの中で :lmsを 2回 コールする GOTO NOP WLP500 WLP500 1足 らない分はNOPで ステップ調整する INOPは 何もしない命令でよく時間調整に使われる INOPは lμ sに なる COUNT2, F :249回 のカウン トが終わつたら呼ばれたコール命令の :次 の行に戻る RETtJRN 999μ s WAT,ブ ルーチン WA工 T ilmsの 待ち時間を作る,ブ ルーチン MOVLW MOVTF NOP DECFSZ COTO NOP WLP d′ 248′ COUNTl :一 つの ,ブ ルーチンだけて500msを 作れないので 1こ の WAITル ー チンを用意 して呼び出 してもらう i PlC12F629で はCALL命 令を8段 の深さまで使える COUNT■ , F WLP iス タ ックとよばれる場所があ つて CALL命 令が実行 :実 行されると 次の命令行の番地をスタックに 1■ き込んでジヤンプし 処理が終 わるとスタックに 1書 き込まれた番 1也 を取 り出 して戻る NOP RETURN iた とえば今回のよ うにCALLし た ルーチンか らさらに 最初に書き込まれた 1別 のサブル ーチンを コールすると 'ブ 1戻 り番地を 1段 奥に押 し込んで次の戻 り番地を書き込む │,ブ ルーチンから戻るときは一番手前の戻り番地を取 り 1出 して 一段興にある番地 が手前に来る仕掛けになつている この 1行 だ けで CPに Highを 出 力 す る こ とが で き るの です .PICを ス イ ッチ に 見 17て た ときの ,ス イ ッチ を ONに す るの と同 じ働 きを します この 記 述 は ,CP10と い う レジス タの ビ ッ ト4に 1を セ ッ トす る とい う命 令 です。 この 命令 が実 行 され る とLEDが 点灯 します BCF GP10′ 4 owを 111カ します この 命 令 で EDが 消灯 します I.EDが 点灯 した ら,05秒 待 って LEDを 消 灯 し, さ らに 05秒 待 って ,再 度 LEDを 点 灯 させ る こ とを繰 り返せ ば ll的 を達 す る こ とが で とす る と CPlに 242 I´ I´ , リス トD3 プログラムのメイン部分 :メ イン ルーフ L00P BSF CP10, 4 CALL WAlT500MS BCF CPIO′ 4 CALL WAIT500MS COTO LOOP :こ :L∞ Pと いうラベルで 行頭から言く の命令を実行 するとLEDが 点Xlす る i500ms待 つ :こ の命令を実行するとLEDが 消灯する :500ms待 つ :LOOPに ジャンプする きます . 肝心のスイッチをON/OFFす るプログラムは, リス トD.3の ようにたったこれだけです ● プログラムの全 リス ト led― test.asmの 令プログラム・ リス トをリス トD.4に 示 します (こ のプログラムには意図的に . 間違いが含 まれている). プログラムがで きあが りました.LEDを 点滅させるプログラムはほかに もいろいろな方法が考えら れます。できあがったプログラムが間違 いな く動 くとは限 りません。これか らPICに 書き込んで動作 確認をしてい きましょう . リス トD4 LEDが 05秒 点灯,05秒 消灯を繰 り返すプログラム (led‐tost asm) :初 期設定 LIST P=PIC12F62 9 .P12F529. INCLIJDE INC' _INTOSC-NOCIJKOUT & _ &-CONFIG MCLRE OFF & PWRTE ON こ CPD OFF ι P OFF & BODEN OFF WDT OFF m U Q E O C U Q E m T一 T O C 20h h 2■ 0 STATUS′ CALL MOVWF MOVLW MOVWF BCF MOVLW MOVWF RPO 3FFh OSCCAL b′ 000010oo' TRIS10 STATuS, RPO b'00000■ ■■ CMCON . 243 付録 D はじめての PICプ ログラミング リス トD´ LEDが 05秒 点灯,05秒 消灯を繰り返すプログラム (led‐ted asm)(つ づ き) :メ イン ループ L L 0 F L F L T S Q C m ∞ B D 4 WAIT500MS CP工 0′ 4 WAIT500MS LOOP CP工 0′ :500ms WATサ カ レーチン WA工 T500MS MOVLW MOVWF d'249′ CALL CALL NOP NOP NOP NOp NOP NOP NOP DECFSZ GOTO NOP RETURN WA工 T WA工 T COUNr2 WLP500 COUNT2′ WLP500 F :999μ S WAITサ ブルーチン MOVLW MOVWF d'248′ COUNT■ NOP DECPSZ COUNT■ , F GOTO WLP NOp NOp RETURN 244 }い たプログラムは,拡 rJlt rに asmを イ メ 」けて保存 します。今11は ■ed― test aslnと します りあえずパー ソナル コンピュータの どこかに保 rlし ておぃて くださぃ Cド D.2 と 開発環境 の使 い方 ● プログラ ムの 翻 訳 何 とかアセ ンブ ラ命令 をflっ て 言い たプ ロ グラムですが ,こ の ままでは まだ 1)ICに ]!解 で きませ ん そ こで PICが lll釈 で きるマ シン語 ′に翻訳 してか らPICに ギトき込むのです そ の ために,開 発環境が 必 要にな ります それ には ,ヽ ■crOchipネ Lが 無償で提供 してい る,M PI´ ABと い う‖ H発 環境 をパ ー ソナル・ コンピュ ー タに イ ンス トール して プ ロ グラムの り ロ ‖発 を行 い ます そ の 後 プ グラムか ら41成 された HEX(ヘ キサ)フ ァ イルを,1)ICラ イタをイ 吏って PICに 込む 手川 貞にな ります ● MPLABの 'Fき イ ンス トー ル Ml)I´ AB"‖ 発環境 は lJi繁 にバー ジョン ア ップ されて い ます 最新版 を bllicrOchip本 社 の ホ ームベ ダウ ンロー ドした らインス トー ラのオ 檜/1Nに 従 って lr隣 環境 をイ ン ー ジか らダウ ンロー ドして ください 途中で確認を求めて きますが,通 41の イ ンス トールではその まま続 ければ‖ 」題な くイ ス トー ル します ンス トールする ことがで きます マ イクロチ ップ 本社 のホームペー ジ http://WWW microchip con1/の 中の[Dcsign]→ lMPLABI「 )EIで 最新版を ダウ ンロー ドす ることがで きます ● MPLABの 使 い方 ール ンス イ ト が完 す ると,Cド ライプの 中の Progrann Filcsと い うデ ィレク トリ′の中に MPI´ AB J´ II)Eと い うフォルダが作 られ ます これか らプ ログラムを開発す るのに必 要な フォルダをこの ヽ11)I´ AB IDEフ ォル ダの ドに作 ってお くと見通 しが よ くなるので 名称 をprOjectsと で もして新たにフ イル ダを作っておきます そして 先ほど保存したled― test asmフ ァイルをprOjectsフ ′ルダ の 11[に 移 して くだ さ い (図 D8) ここではprojectsフ ォルタに保存したled― test asmソ ース プログラムを1売 み込んで,PTC に き込むためのHEXフ ァイルを作るまでと,デ バ ッガ″をltっ て動作II Iの 方法を説りlし ています。 '「 r?r4rL -*11) tn.J i JEi' _● =,・ 1-ro ;nitn41 n* i,Lr ●mh'`M,A=[= o V7に つ い て MPLAB IDEバ ージ ョン7で は,イ ンス トーラの指示に従 つ ^^714t =- ‐口 '勁 てインス トールすると, C:VProgram F osYM c「 och pと ぃ う フォルダか作 られる 本 書 て 利 用 して い る MPLAB:DEバ ー ジ ョ ン 6で は C:VProgra n FileSVMPLAB!DEの フォルダが作 られ,そ の下 に prOieCtSと い う作業用 フォル ダを作 つたが,バ ージ ョン7 を使 う場合は M crochipフ ォルダの下に prOieCtSフ オルダを 作 つて利用する バージ ョンアでも,本 書で説明 したの と同様 にビル トでき る 操作画面 やシミュレー タの使い方に変化はない , J E O.8 MPLAB lOE T t )t t OT t: Nqecrs ) t )v4XlF6 245 付録 D は じめての PICプ ロ グラ ミング 図 D9 MI)LAB IDEデ ス ク トップ 初期画面 ア イコ ンを ダブ ル・ ク リ ックす る と図 D9の よ うな画像 が l・ lき ます 悦 りIの ため ,山 i像 サ イ ズ を小 さ く して あ ります が ,実 際 に は作 業性 の 良 い 大 きな lnl前 iで 作 業 します また, こ こで は MPLAB IDEの バ ー ジ ョンが 640に な って い ます が , きっ と,:売 者の 方 は これ とは )ヽ な る バ ー ジ ョンを大 手され るで しょう。 扱 える デ バ イスが えた り細 部にオ午十 の 変 更が あ る と思 い ます が '静 6xで あ れ ば 操 作 は ほ とん ど変 わ らな い ので 混 乱す る こ とは な い で しょう と きは ,Webに 説 りJが あ力 て い る と思 い ます の で ,熟 洸 くだ さい 'っ , 人 き くバ ー ジ ョンが 変 わ る まず メニ ュー の IProjeCtlか らド ewlを 選 択 す る とINew Projectlダ イア ロ グが 開 き ます (図 D_10). ‖発す る プ ロ ジェ ク トの 名 itを 人 力 します 。 こ こで は これ か らアセ ンブ ルす る IPrOjCCt Nalnelに 今トリ led― test asmフ ア イル と同 じ名前 の ■ed― testと しま した 次 にIPrOjCCt DirectoryIの 欄 にあ るIBrowSelボ タ ンを ク リ ック して ,プ ロ ジェ ク トが /1成 す る フ ア イルの 保 存 デ ィレク トリを指 定 しま す ここで は C:YProgram FilesYMPLAB IDEYprojectsを 指 定 して ヽヽます 。10K〕 ボ タン を押 して次 に進 み ます led― せん test.mcpと い う フ ァ イ ルが 作 られ ます (図 D ll)こ の 時 点 で は まだ何 も中 身 はあ りま . Source Filcsと 書か れ た ところに カー ソル を合 わせ て マ ウスの イiボ タンを ク リ ックす る と,図 D12 の ni睛 iに な るの で ,Add Filesを 選択 します [Add F‖ es lo Pr()ject]と い う ダ イア ロ グが 月くの で ,Projectsフ ォル ダ中 にあ る led― 1国 t。 ま RⅢ Di顔 叫 9。 m ttMP曖 BЮ [ヽ FⅦ 。 「 H●● 図 D10 246 1 qed` 0K I C_JI プ ロ ジェク ト名の入力 11鮮 I11 test asm So● ァ cc Fles 円議 F,し s ObFl Ftts Lbァ ● γ F,皓 s t nker Scr,ls 図 D ll プロジェク ト作成完了 図 D12 ソース・ フ ァイルの追加 "ce 図 D13 ソース・ フ ァイル指定完 了 をlL定 します Source Filcsの ドに led― test asmフ アイルが加えられて い るのが確認 で きます (図 D13) test asmと 表示 されて い る 1に カー ソルを合わせ て ,マ ウスを ダブ ル クリックす る とソ ー ス・ ファイルが 開 きます。 ソース・ フア イルはこの 中で編 集す ること力'で きます 。 もし[1本 Fl:が l「 し PropCrties]を クリックしてIEditor OptionsIダ イア ログ く人′ ,tさ れない助合は メニ ューの[Editlか ら〔 led― を開 き,lTcxtlタ プのINational Language Code Pagelで Japanesc Shift JISを 選llkし て くだ さい。 「1本 1:が ‖ プ ログラム ソー スが 衣力ヽされて い るエ デ イタの中では iし く衣/1Nさ れるようにな ります 。 ′ 直1/K日 本語 を人力す ることはで きませんが , 日本語 の 人力 文 卜は別枠 で表示 され,fl定 するとエ デ イタ , 1勾 に反映 され ます (図 D.14) 読 み 込 ん だ ソー ス・ フ ァ イ ル は PIC12F629月 1に 作 っ た プ ロ グ ラ ム で す 次 にデ バ イ ス 名 を 247 付録 D は じめての PCプ ログラ ミング ●b Fdl y“ 口け 白 げ □ 恥 :tiや つ J ir:│り 0曲 ! J11'7日 :'コ 期 設 定 LISI P Pl lt',P0 1NOし UI[ .P12F629 1NO・ FllI[ tヽ __0(NFII _IwT =,_lt it,IIJ I ,'1,,ll l 〔ウリ ;)ヽ │[ [│:J )R` 0 0SF =TliU: CALL 図 D14 1'I :Oh :││ FPi 3FFh ソー ス・ ファイルの表示 ●b Dけ : ●■ 昌 ? cl.け □ 恥 !Oittty Lせ 図 D15 0り ●1`● 【 J Stt“ s デバ イスの指 定 Mにrochip programmer Tool suppoイ O P10SIART Plus 0 PRO MATE‖ o llPШ :CD2 o日 C‖ tl ', MPtFO PMO M oioch p DeOu998rToo suppol O MP●D SIM O MPШ [C02 O HPLu SIH00 「咄獅 MPu3 1CE 2000 い 図 D16 248 。a」 デバ イ ス選択 歩い │ IF F P PIC 12F629に 指定 します メニ ューのIConfigurclか らISelcCt Dcvice]を ク リック します (図 PIC12F629を 選択 して10Klボ タンをクリックします (図 D.16) D15)[Dcvicclの リス トか ら つ ぎに メニ ューのIProjeCtlか らIBuild Alllを クリックす る力lF101キ ー を押す とアセ ンブルが始 まり ます (図 D17). ビル ドクが実行 され ,10utpu可 ダイア ロ グが 開 い て アセ ンブ ル紺果が 表示 され ます (図 D18,図 D.19) プ ロ グ ラ ノ、に ‖ ‖違 い が あ る と図 D20の よ う に エ ラ ー が 表 示 され ます Bold Oぃ ons F′」 n Plo「 t Fibs T[ ‖‖ 今 回 は エ ラーの ほか に 警 告 し ウFF I '│ , F SO● e Prottt 勢 e Po"ct As Add Fl● ,1。 Prolect Pemove Fle F`。 m Pr。 。ol ヽ Lct[む o Tooヽ olc =u“ ヽ ●dMげ sm-Oonlr。 [Sysに m Stt“ ヵ l localЮ 厖 =eT∞ 図 D17 … ビル ド :"` ・ ・ “ LED― IE『 「 A" Lll― ‐ ‐ Cdr* | f,:Fdd $o{vd O n@:<t slFlr-d liEr A'*tH.G 図 D18 アセンブル 中の表示 図 D19 ,H I Z O !26 アセンブル・ エラーの表示 24, 付録 D は じめての PCプ ロクラ ミング le ●1 立ew P7。 いot ,“ 配α PI● 0`mmo い に● Dげ 9出 ?。 喝 o「 w-r.roh Cc.trol nre'n€dByncr done €l ng │● o〔 げ 日 恥 ●mF‖os`MPtAB IDEV MO HIP」 oo s“ mpo,mw n ox● `05]C¥PR00 C'Pro;′ RAM FI[[SttMPtnB IDEIPRO U[CTSγ lo`レ t:D― ‐ /q′ ,12F02,・ od‐ te st Fo● ● 01,eci ve TEST ASM 5 C γPROG RAM FIt〔 Sγ MPtA8:0[,PROJETSγ [[o-lCST ASM 6 Founddl● e ]C VPROGRハ M Fll〔 SVMPLAO:DEttP R6 JEC TSγ [[D― TEST ASM 8 Foonddl● `t∼ ●1″ o 10] C VPROGRAM Fl[Б ¥MPlAB[0:V'RO JECIS=[[D― T〔 ST ASM 3 Symb● l ool「 OV` 13] C VPR00RAM Fl1 6¥MP[A3[DEIP RO J〔 CISyt[D― T:ST ASM 3 Synbolo。 1「 OVて lo=レ 06]e,PROGRAM F:[[S¥MPtAB ID[VPROJ[CTS¥[:0‐ T:ST ASM l] Found lloct vl C`PROG RAM FIt:SVM P[AB:DEVP Ю J[GTS¥t:D‐ T:ST ASM 17 陀 =ster n o,( O VPROG RAM FIt[S¥M PtA9 10[VPRO」 [CTSyt:D‐ TEST ASM l, 随 bu(‖ oo(,st(a鮨 `o as′ FAILED:T,oA■ 。quested `ster in o,て 9:482004 `2401● 図 D20 エ ラ ー画面 J● Ⅲ 2。 ICt ●bピ =ケ こ 酬 ││ヽ Con(ヒ けo '′ oramne, ? 口 げ □ 鴫 71… ,山 Ⅲ"… 嗜… Ll:T F II I:Fl:; Iヽ lL‖ │[ (: 1■ 11● PI:F6:1 1ヽ │ )'11ヽ TI [IU 20h │: [OU 21ト illヽ │││ '1:Iビ 1ヽ 1 11 , 1 1111 J「 1ヽ _ 「 ∫_lF「 │ ] BSF CALL 11litt 3FFh i「 [ PC12F62 図 D21 警告 の 出た行 メッセー ジが 表 /JNさ れてい ます Errorは 致命的です Warningは 警 告で MPLABが 適 切に処理 して くれ ます。 Mcssageは アセ ンプ ラや コ ンパ イル ″に影響 はあ りません 図 D.21の よ うに,表 示 されて い る行 にカー ソル を合わせて ,マ ウスをダブル クリックす ると, ソース・プロ グラム行 に矢印が よ/1N され ます 最初の Warningに カーツルを合わせ てマ ウス をダブル・ クリックしてみ ま した この 行では,プ ロ グラ′、に使 り ‖して い る PICの 種類 を指定 して い ますが ,LISTと い う文 ′ ´が行頭か ら始 まって い ます 行頭か ら始 まる文字はアセ ンブ ラが ラベ ル と半」断す るので ,こ こでは1文 字分以 卜の空 白をあ けなけれ ばい けなかったのです。 ここで ,ラ ベ ル以外の文字が 行Jrlか ら始 まってい る部分 を rlし ます (図 D.22)_ 250 Eb Ed VEn gbFcl Q.64., 麟照● m mer 口 げ 口 恥 いo`t“ e wmよ " HIい 0由 PC12F¨ 図 D22 ラベ ル で は ない 行 を タプで修 正 に 國■ VeW 21ea ? 口げ ●bu■ =er "。 ばoぃ にr □ げ 日 職 Q● 耐│げ C W■ あw H● ● 0山 ‐ C¥P`o■ ,さ ぃ F“ oVMPtA3 D[¥HCHP Too修 しぃ,os m"me、 e‐ 石 /p12F629・ ● C`PROGRAM F:t:S`MP[AB ID[γ P■ 0」 [O TSγ t:D‐ TEST ASM 3 G='00 G RAM FIt:S:MP[AB ID[VP曰 0」 :O TSrt[D― T[ST ASM= ]C IPPC G RAM FIt:Sγ M PtABID:VPRO u[CTsvt[D― T[ST ASM C`PPOO RAM FIt:Sγ M PlA3 10[単 ,RO uECTSlt[0-T[ST ASI1 o,, SynЬ olnot `te口 prevo。 S′ nbol 17 19 , not plev oos 曝 =sl=l in ope,01 ι o`ol =st,7 noっ FAILED:Tol Au=240158:552004 図 D23 エラー画面 ここでlljttIPr()jectiか らIBuild Al11を 実行 します jを 図 D23の ように Warningが なくなりました しか し,ErrOrが 2カ 所あります エ ラーのあるイ イiに スクロール してみ ましょう (図 D24) エ ラーの内容は定義 されてい ない シンポ ル を使ってい るとい うものです INTOSC NOCLKOUTは INTRC OSC NOCLKOUTの 誤 りで , P OFFは CP OFFの 誤 りです . これ らの シンボルはプ ロ グラムの 2行 ‖で イ ン タルー ドした P■ ■て い ま す さオ 2F629 INCフ ア イ ル は McHIP Tools 2F629 1NCフ Bitsの 部分に図 D25の ように書かれています こ の P■ configuration ア イ ルの 11:で 定 義 フォル ダの 中にあ ります . 257 付録 D は じめ ての PICプ ロ グ ラ ミン グ コに Fdi V印 ユoⅢ t い 嘔G Dけ ? BⅢ ,,0 1、 /.′ ・ 1・ ・ `qr● い ′ “ ●け日 い ●¨ W同 製 ll● い 09画 CIII■ trll1l Fiぃ dln F,〕 ●● │ ・ 10-1● ,l ,1・ ′e・ 01-tost er7・ ¥mp● s nwlo,,= ′ 0/。 12F629・ led― tesl,sm. ′ 「S¥[[D― TESTASM 3 S′ n bol● ol,lev。 。sy 10(ned uNTOSC NOCt(OUT' 「S¥[[DT:ST ASM 81Symし 。 ●ol,`ovOosl do(med CP」 D FF) DTSV[[D― T6Tヽ Ml, 腱 ぁrm。 。Onot m Lnk0 0su′ o th。 そ│● ●k Ыts oe co``oot "`● Onot nヽ ok O[nw′ e thot b“ k bl,こ ec。 g",=,ぃ o",0● ,TS¥1〔 ● T[sTヽ 日 19 ヽ `、 `rect 、 │■ ‐ 図 D24 エ ラ ー画 面 を右 に ス クロ ール ―咄 に 旺 rF ltON P●IltOFF ON │■ R[つ FF OFF 創 _rfF _0,: ヽ T t 図 025 }1速 プログラムを言 正して ∫ P12F6291NCの Ⅲ篇爾ⅢⅢ町Ⅲ町Ⅲ釘爾”用”鰤mm﹃Ⅲ 岬Ш帥ШШШШШШ帥ШШШ國Ш帥Ш帥Ш _ ll コンフ ィギ ュ レー シ ョン設定 Build All]を クリックするかIF101キ ーを押 します 1呼 〔 ようや くアセ ンブルに成功 しました (図 D26)Message[302]と い うのが2 fiあ りますが,気 にしな くて人丈人です これでPICに 書き込むことので きる,led― test HEXと いうファイルが 71成 されました PrOj ectsフ ォルダの 中に作られています この led― test HEXフ ll■ アイルの II]を 覗 い てみ ましょう 図 D27を 見てわか るよ うに,PICが 解 ,(で きるように翻 :J(さ れた もので ,今 度は人が 見て もさっぱ りわか りませんね と りあえず PICに 書き込むことがで きるファイルがで きま したが ,思 惑通 りの動作 を して くれるか どうか , シ ミュ レー ションで確 かめてみ ましょう . 252 ∞n,“ wo Whl。 押 Ei!. Edit View PDici 0.6'x..r P7117=mmer Elげ 嘔 ? ●げ口 ■ 0曲 p “ 日u‖ d l、 /。 ア lo● Contr011 Flnd in F,3● ● ・ ■ ●im`h io`nc`o,yf,撼 , `o● o イ [× ocut● C IP,o``om FilesV M PtA8:0〔 単MC HIP Too sy mp● snwm。 ズ 。 ′ ヽ /,12F620・ ●0‐ test as, =・ , ぃo"`a' Mes鍼 導e100210 VPR00RAM F■ ESIMPtAB[00,ROU[CTSttt[0-TEST ASM'7 R=`1● Mess“ e10021C`'R00RAM FLESγ MP[A8[00 PRO」 ECTS11[0-T〔 STASM 19 R● m op・ ,al =ste′ [o“ o`G VPro`rom FIに ,VMPtAB ID:Vpr。 ,ctsVる 0-tost OOD │ BU■ O SuCC[[DEOI Tuoん `2(0217512004 、 図 D26 │口 V アセンブルの成功 :020000040000FA :100000008316FF2390000880850088120730990083 :1000100005160C20051200p00828F930A1001C201E :1000200000000000000000001C2000000000000094 :10003000A10BOF2800000800F830A0000000A00B62 :080040001E280000000008006A :02400E00843FED :00000001FF 図 D27 ;ed‐ test HEXフ ァイルの 中身 ● MPLAB S:Mの 使 い方 MPLAB IDEを 度閉 して しまった場合は,新 たに起動 して,IPrOject〕 か ら10penlを クリックして mcpを 開いて くだ さい。次 に,lDebuggerlか らlSeleCt T0011で IMPLAB SIMIを 選‖くし ます (図 D28) ■ed― test ツール・パー にデバ ッグ用 の ア イコンが追加 され ます (図 D.29). 次にlVicw]か らIProgram Memorylを 選択 します (図 D.30) す ると,Program Memoryウ イン ドウが 開 きます。 では,こ こで図 D31の Lnli“ の/1i下 にある10pcode Hexlを クリックしてみ ましょう (図 D32) 次に図 D31画 晰iの ドにあるISymb(liCJを クリックしてみ ましょう (図 D33) 以 卜の 3種 類 のデバ ッグ″山i面 を選 ぶ ことがで きます では図 D33の シンポ リック衣/1Nttli“ でデ パ ッグ してみ ましょう (■ )に なる部分 と,500msの タイマ部分 と,CP∫ が I´ 今 )1の プ ロ グラムの CPlが High ow(o)に なる部分 を確認 してみ ます lVieWIか ら ISpeCial「 unctk)n Registers]を 選択 します 図 D34の よ うに,特 殊機能 レジス タ (SFR)の すべ てが 衣/1Nで きるように山i面 サ イズを広 げ ま した 253 付録 D は じめての PICプ ログラ ミング ¨ ¨ ¨ ¨ ¨ ¨ 図 D28 MPLABS:M選 択画 面 図 D29 ツール・パーにデバ ッグ用 アイコンが追加 された様子 E D.30 P.ogram MemoryOi*ft 254 [L 國 ' Ve・ 卜│∝ b● │`。 ′ "呼 。ぃ¨ ' 2● 604? Cl● ElD.31 [Machinel*fr t:"( 腱 國 ‥ `"卜 Clげ ` ⊆ ●■●I LV・ U・・ ・ 口じ□嘔 ゛山 │口 "│● い● ● ? 6tl{,v 。 嗜 TEIE 蜘 "暉・ し0 , "DO('日 □ぼ□昴 "o噺 山 麟 H● 。 "D● ● 0日 図 0 32 10pcode Hoxlを 選択 したときのデバ ッグ画面 D` 図 D33 b04? 口 0‐ 口 嘔 0● D "■ '0日 1SymbO‖ Clを 選択 したときのデバ ッグ画面 255 付録 D は じめての PICプ ログラ ミング ヽ● ● ? 口 ぼ□ 嘔 ● 日 ' "詢 PFD ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ∞ ∞ ル 一∞ 0 ¨ ¨ ¨ ¨ ¨ω ” け 口 m “ ” ” ω∞ ¨ ¨ ω ¨ . ∫¨ ¨ ¨ ” 一 ¨ ¨ 一 ¨ ¨ ¨ ¨ ︻ ¨ 颯 m m m 加 m 嘲 ︻ Ш ・ “”¨“O”¨¨m珈¨喘 ¨¨¨嘔一”¨¨¨¨¨m一 図D34 Special Functionレ ジスタを表示 llけ , ヽ● 0, 口 ぼ 口 0つ ● ,41● 詢 00● “ ”” ∝ “ “ 0” ¨ ¨ “ ¨ ¨ ¨ 一一¨¨¨¨mm器 , 図D35 プログラムをステップ実行 ツール アイコンをl■ ってステップを進めると, リアルタイムでsFRの 内容が反映されます では, ここでプログラムを 1ス テ ップ進めてみましょう ツール アイコンのイiか ら3番 ‖にある IStep lntO〕 アイコンかキーボー ドのIF7]キ ーをクリックしてみます 図 D35で は , BSF STATUS′ Ox5 が 実 行 され た とこ ろで す BSF , STATUS′ RA0 と書 い た 部分 で す ね セ ッ トす る 命 令 で す 25` プ ロ グラムで STATUSレ ジ ス タの ビ ッ ト5に 1を 図 D_35の SFRの ア ド レス ooo3hに STATUSと 書 か れ た レジ ス タが あ ります こ れ は バ ン ク 1に 切 り替 え る 命 令 で した ヽ● ● │ ● ● o3● 由 ● "“ PFD ¨” ” ” ¨ ” ” ″” ” ″ に ● ¨ “ ¨ 一 い一 い ¨ ¨ ¨ ﹂ ¨ 図 D36 プロ グラムをステップ実行 。0 。 0 。0 。 0 呻¨0 0 0¨¨¨0 00 0 0 図 D37 Hardware Stack画 面 イi側 のBinaryを 見るとビッ ト5に 1が セッ トされているのがわか ります ビッ ト3と ビッ ト4に 1が セ ッ トされてい ますが,こ れは電源が ONに なるとこの二つのフラグがセ ットされます 実際の画油iで は 変化 したレジスタの内容が赤い色に変化 します では,続 いてIStep lntolア イコンカ1「 7]キ ーを押 してみましょう Program Memoryの の 最終 番地 に ジ ャ ンプ して きた ところで す ミュ レー タが 内部 発振 周 波 数校 1に D36)こ れ は cALL 3FFhを 実 行 して , メモ リ Oxfcと 書 か れて い ます ね。 これ は シ 値 を仮 にセ ッ トした もの で ,oxfcと い う値 を Wレ ジス タに保 存 し line 1024を 指 して い ます (図 ここには RETLW て ,呼 び ‖1さ れ た次 の プ ロ グラム行 に戻 ります .戻 り番 地 はハ ー ドウェ ア・ ス タ ック ″ に保 存 され て い るはず で す こ こで ス タ ックの状 態 を表示 してみ ま しょ う IViewiか らlHardWare stackJを 選 択 します。 CALL命 令が 実 行 され ,Stack Level lに Return Address ooo2が セ ッ トされ て い ます (図 D37). では,プ ログラムをもう1ス テップ進めてみましょう 257 付録 D は じめての PICプ ロ グラ ミング `' 0● 口● ゛o ' "■ 'FE ¨ ¨ ・ [““¨ “ ” ¨ ¨ ¨ つ ] ¨ ¨ ¨ い“ ¨ お お ¨ ﹁ ∞ ¨ ¨¨ ¨ ¨一 一¨ ﹁ ∞ [ ” ¨¨ 一 一” “ ¨ 幌 “ ″ ¨ ¨ ¨ ¨ ] ” 0﹁ い ¨ ¨ ¨ ¨ ¨ 一 ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ 一 喝● ¨ 掟 ¨¨ ¨ ¨ m 図 038 Dじ プ ロ グラム をステ ップ実行 ヽ● ● マ D■ El嘔 0画 。 '∞ 詢 0'E ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨¨”¨¨¨¨¨¨∞”∝¨″¨ω∞“”¨¨∝∝∞∞ ¨ ¨ ¨ 一 ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ 叫 面 “ ¨ “ ¨ な ¨ ・ ¨ ” “ ¨ ¨ ¨∞ ∞∞ ¨ ¨ m 耐 耐 ¨ ¨ 勁 [ ﹂ 昴 “ m m m ¨ ¨ 颯 ¨ ﹂ ” ¨ 一 ¨ ¨ m “ 汗 ” ¨‘ い 一 ” ¨ ¨ 一 ¨ ¨ お お ∝ ”ω O ﹁ ¨ “ ¨ “ ¨ , ¨¨¨¨¨¨¨耐工加¨¨¨ 図 D39 CP10ポ ー トヘ の 出力 を実 行 サ ブ ルー チ ンの コー ル か ら戻 っ た の で ハ ー ドウ ェ ア ス タ ッ クの 矢 n]も レベ ル 0に 戻 っ て い ます OSCCALレ ジス タに発振 周 波 数校正値 の (10000000)Ox80 が格 納 されて い ます プ ロ グラ ムの Line 9に 希 日 します LOOPと ラベ ルが 表示 され て い ます ,そ の右 に ,BSF CPIO′ Ox4と あ ります ね。 これ は CP10レ ジ ス タの ビ ッ ト4に 1を セ ッ トす る命令 で す SFRの ア ドレス ooo5hに cPIOレ ジス タが あ ります 現 在 の 状 態 は 00000o00に な って い て ,CP10ポ ー トの ‖l力 が す べ て Lowに な って い ます 。 つ ま りLEDを 点灯 させ る た め の ビ ッ ト4も Lowな の で ,LEDが 点灯 して い な い状 態 です で は プ ロ グ ラム を Line 10ま で進 め てみ ま しょう。 図 D39の よ うに,SFRの CPIOレ ジ ス タの 値 は 0001oo00に 変化 しま した この 時点 で PIC12F629 (図 258 D38)SFRの ア ドレス oo90hの … ■ 面3 ¨¨ ¨ n “ ¨ ∞ ∝ ¨ 口¨ ¨ ¨ ¨ ¨¨ ¨¨ ¨ ¨ n m︹ ∞ 中¨ ¨¨ ¨ ¨ ¨¨ ¨¨¨ ¨ mO ¨ 疏 ” ¨¨ ¨ ¨ m 出 ‐種 「「 pF□ ¨ 山 ﹂ ¨ ¨ 咄 叫咄 耐 耐 耐 叫 ¨¨ m 叫 耐 m ¨ 叫 叫 呻 m m ¨ ¨ 図 D40 IM10 ● o詢 . 一 ¨ ¨ ¨ ¨ 乳Щ ¨ ¨ ¨ ﹁ コ ﹁ ¨ ¨ ¨ ﹄ 枷 ¨ 帥 呻 加 ﹂ か o “¨嗜耐﹂ロロ”“”¨一 , ぃ 回 一 ” ¨¨ “ ” ¨¨ “ “ “ m ¨ 一¨¨ ¨ ¨ ¨¨ ¨ ¨ ¨ ¨ ¨ ¨ Ю ¨” ¨ ¨ ¨¨ ¨ ¨ ¨ ¨ ¨ 。│ .… て □ … ,「 昴 '¨ │ム … │「 ¬i― ¨…… ■ ●‐● , 0凸 o 口げ 口 嘔 ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ 一 ¨ ¨ ¨ 一 , Stopwatchウ ィン ドウを開 く の 3番 ピ ン (CPl)が High(■ )に な っ て , この ポ ー トに つ なが って い る LEDが 点 灯 し ます で は ,05秒 IHlの タ イ マ を Lて い き ま し ょ う 7「 こ こ で ハ ー ドウ ェ ア ス タ ッ ク の ‖i■ iを 閉 じて , IDebuggerlか らISt()pWatch]を 選 Jく します Stopwatchウ ィン ドウ (図 D.40ノ [iド )を 開 くと,こ れ までのプ ログラム・ サ イクル数 と経過 タイムが 表示 されてい ます IPrOcessOr「 rcquency]に 4 000000MHzの 表示があ ります プ ログラムのステ ッ プは,発 振周波数 の 1/4で 実行 される ことを,プ ロ グラム を書 くところでJι 明 しました。その ことが こ の Stopwatchか らもわか ります さて,こ こで Stopwatchウ イ ン ドウの[Zerolボ タンをクリック して Timeを リセ ッ トしてお きます I'ヽ ' D● 0嘔 0自 . ぃ 一 “ ″¨ ∞ “ “∞ ” “ ¨ ”∞ ¨ ¨如 ¨ ¨ ¨ ¨ω ¨ ¨ ¨¨ ¨ ¨ 4-‐ ― … 一 ¨ ¨ ¨ 一 一 一 ¨ 一 ¨ 一 ¨ 一 Dげ ● "1● F口 ¨ 「 屋五iパ Ⅷ 図 D41 WAlT500MSサ ブル ーチ ン を実 行 25, 付録 D は じめ ての PCプ ロ グ ラ ミング 0` ? 口● ●日 9■ 口 ' 1。 一 一一 ¨ o ﹂ ¨¨ ¨ ¨ ¨ ¨¨ ¨ ∞0 ¨ 〓 ¨ 。﹁ . ¨ ¨﹁ 一 ¨ ¨ ¨ ¨ ¨ 一 ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ” ¨ ¨ ¨ ¨ ¨ メ イ ン・ プ ロ グ ラ ム の ﹁ . .1 ● . い 。 L“ . . 。 ●● ● D42 “ 。 ︻一¨¨” ¨.¨ ︹ ¨ ﹂ ¨¨¨¨ ¨¨ ¨″¨¨¨ “ .. . . 一 ¨ ¨ ¨ 一 一 ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ 如 ¨ ﹁ ﹁ T ¨ ¨ ・ れ ” ¨ .I111]淵 図 ■ 70□ LOOPを 一 周 5001nsの タイマ を シ ミュ レー シ ョンで ステ ップ実行す る と膨 大な け間がかかって しまうので 、 気 に 実行 させてみ ましょう ツール・アイ コンの イiか ら2番 F]に あるIStcp OVCrlア イコンか ,キ ー ボー ド のIF8]キ ー を押す と,サ ブルーチ ンを 気 に実 行 して くれ ます とはい え約 50万 口│の ステ ップを実行 するので ,パ ーソナ ル ‐コンピュー タによっては結構時間がかかる場合があ ります Stopwatchウ イン ドウの Timeに 499 998000msと 表示 され ました 500msぴ った りにな ってい ませ んね これは,こ の あ とGP10レ ジス タの ビッ ト4を Lowに して,1呼 度 5001nsの サブ ルーチ ンを実 行 してか ら,L00Pの 先頭に戻 るまで の ステ ップ数を加 えるとち ょう ど50万 口│の ステ ップに なるように して い るか らで ,あ らか じめステ ップ数 をこのデバ ッガによって調整 した もの をここで紹介 して い ます で は ,ぴ った り 1秒 Flで LEI)の 点 減 が イjわ れ るか を rll認 して み ま し ょう この まま Pr()granl Memoryウ ィ ン ドウの矢印が Line ■0を 指す までIStep OVer〕 ア イコンをクリックす るか,I「 81キ ー を押 して くだ さい 今度 は,図 D42の ように,Stopwatchウ イン ドウの タイムが 1秒 ピッタリに な ってい ますね これ で ルー プを 1用 す る時間が 1秒 である ことが確 認 で きま した 今卜│の プログ ラム はここ まで Ill認 す れ ば,実 際 に PICに 書 き込 んで,問 題な くLEDが 点滅 して くれるはず です まだまだ,こ れ らのツールには便利 なllい 方がた くさんあるのですが ,こ れ までの使 い 方がわかれば、 L成 された led― test HEXフ あ とはltい 込んでい けば理解 で きるよ うにな ります では,こ こで ′ ァイルを PICに 書き込 んでみ まし ょう Cド D.3 plcラ ● イタ の 方 使い PiCに 書 き込 む ための道具 開発 したプ ログラム を PICに 書 き込 むためには PICラ イタが必 要です この ライタは 自作す ること も,「 能 ですが,│ド 販 されて い る もの も多 くあ り, 手近な ところでは組み 立てキ ッ トが安価 に市販 されて 260 写真 D3 秋 月電子の PICラ イタ 秋月の PICラ イタVer 3を 購入 して,Ver 4に グレー ドア ップするためのキ ントをあとか ら購 入 した Ver 3で は P1012C509A P C16F84Aに 対応 していたが、Ver 4に なってP C12F629が 使 えるようになった 写真 D4 秋 月電 子の電源ケ ー ブル セ ッ ト 電源ケーブルセッ トにはDC15V 03A出 力のACア ダブタと、D SUB9ビ ンの RS 232Cケ ーブルがついてくる い るので ,そ れを組み立ててltう のが 賢IIIで す ここで は多 くの 人が使 って定 .Iの あ る秋 月電子製 の PICラ イタ キ ッ トを使 い ます。現 在発売 され て い るバ ー ジ ョン3キ ッ トに,バ ー ジ ョン4の ア ップ グレー ド キ ッ トを組み合 わせ ます_キ ッ トとい って も, とて もわか りやす い解説がつい てい るので ,は んだ付け さえで きれば簡単 にκlみ 立てることが で きます PICラ イタを使 うためには,パ ー ソナ ル・ コ ンピュー タとPIcラ イタとをつ な ぐため の ,RS 232C ケープル と,15Vの 電源が必要 で すが ,キ ッ トと一 緒 に電源 ケ ー ブル (写 真 セ ッ トを買 う とよい で しょう D3,写 真 D4) PICに メ │き 込むための ライタ・ ソフ トは,キ ッ トと 一緒 につい て くる CD― ROMに 収録 されて い ます jit子 のホ ームペー ジか ら最 新版 をダウ ンロー ドして使 うことをお薦め します が ,秋 チ ● PICラ イ タを使 つてみ よ う まず,秋 月のホームベー ジか ら最 新版 の PICプ ロ グラマ V4を ダウ ンロー ドします。 本書執筆時点で の最新版 は [picpgm6_beta_p3 3 34_f639 zipIと なってい ました 267 付録 D は じめての PCプ ロ グラミン グ スの │ア ドレ 図 D43 , 詢鮨り お軋 入りω 鼎 品 ∼ ,プ X順 1畠 ttω 幽い ?r1t (n 経郵D ↓L i ω ⇒ 懇 す CY[4y Docunents]6k -prc 秋 月の ホ ー ム ベ ー ジ か らダウ ン ロー ドして解凍 したフ ァイル iltli{-l" oo'i , F---= imlB-P hF , F^-d---= 子 子二 日I+錫駆幅 す 。 哺 印れま `多 図 D44 フ ァ ー ム ウ ェア の ア ップデ ー ト PICプ ロ グ ラマ をltっ て い る以 合 は,1コ ン トロー ル バ ネ ルIの [ア プ リケ ー シ ョンの 追 加│と 削 除]か らJiい バ ー ジ ョンの PIC Programmcrを 削 除 します ダウ ンロー ドした zipフ アイル を解 凍す る と,図 D43の よ うにの フ ァイルが 展 ,Hさ れ ます setup exeア イ コ ンを ダブ ル ク リ ック して PICプ ロ グラマ V4を イ ンス トー ル します い った ん Windowsを 終 ,電 源 を OFFに し,次 に PICラ イ タに電 源 と RS 232Cケ ー プ ル をつ な い で パ ー ソナ ル コ ン ピュー タの 電 源 を 人れ ,立 ち上 が った Windows 11で PICプ ロ グ ラマ を起 しま す この と きバ ー ジ ョンア ップ キ ッ ト(AE PCM877モ ジ ュー ル)上 の グ リー ンの LEDが 211点 滅 す 以 ntに バ ー ジ ョンの メiい ,´ ll」 るの を確 認 します ProgrammerV4 Bcta(picpgn6_beta exe)を 起動 します メニ ュー バ ー の ヘ ルプの ア ップデ ー ト1を 選択 して ,10PENIボ タ ンを ク リ ック し, ダ ウ ンロー ドして解 凍 し 1フ た フ ァイルの 中か ら,ppgm639 HEXを 選択 します そ の 後 ア ップデー ト・ ボ タ ンを ク リッ クす る とア 次 に ,PIC ァー ム ウエ ア ップデー トが 開始 します (図 D44) D45)の 左 起動 した PICプ ロ グラマ (図 こ こで 書 き込 むデバ イ ス を選 J(し ます い て い る ジ ヤ ンパ 2● 2 1に あ るデ バ イス選択 llllに PIC12F629の 表示 が あ ります が , 別 ウ イ ン ドウで ボー ド情 報 が 表示 され て い ます が ,ラ イタにつ ピ ン を2と 3に セ ッ トし,40ピ ンの ソケ ッ トに PIC12F629を セ ッ トす る よ うに指 PICi21629 図 D45 」 PiCプ ログラマV4の 起動 晏野 詐肇 図D46 ライタに新品のPlc1 2F629を セットして〔 リー ト(R)]を 実行 示 が IIIて ヽヽます 「 ドに は ,ラ イ タが COM2ポ ー トに接 続 され て い る こ とが 示 され て い ます イ す るパ ー ソナ ル・ コ ン ピュー タに よって違 い ます この 接 続 状 況 は ,lt川 新 品 の PIC12F629を ラ イ タに セ ッ トして か らIリ ー ド]ボ タ ンを タ リ ック して ,Fl有 の 内 部発 lllc「 J波 数校 1に ■1と バ ン ド ギ ャ ップlllを 読 み 込み ます 図 D46の 画像 中 央 L部 に ー タ (1 6 jll数 )] IOSCCALデ の イiに [981,そ の ドのIBGデ ー タ (範 レ HK)∼ 3)Iの イfに 1■ 1と 表示 され ました プ ロ グ ラム メモ リの最 終番地 (o3FFh)に 内部発llttt llx数 校 [lliが 占き込 まれているのが確認で きます この 1つ はそれぞれ のイ 同体 に特 有の値 で , 11場 か らlllr・Tさ れると きに 1+き 込 まれた ものです OSCCALデ ー タとは,PIc12F629の 内部発振 回路 を使 う場 /1tの 発振周波数の校 E値 で,内 部発振「1 2● 3 付録 D は じめての PCプ ロ グラ ミング 『 } │ :::il:l::1::: Eil ■7 錦 ― I t; t.. 一 , =¬ FA〔 ∞● 田,7い つ “ 図 D47 1ed test HEXフ アイルの 読 み込み l2cr'l2F lrocir6 lPtcro lPIU,j I osocer.nn | P*ILl'11- l6ccArt-'o6iH) | ' l$l lm:-rm,o-o -fr i, 図 D48 HEXフ cemer-s('l, vf :I,faqtr-*'tffF 6" ァイル読 み込み後の メモ リ最終番地 路 をイ tう プ ロ グラ ムでは,PICに プ ロ グラ ム を 古 き込む ときに このflも 緒 に書 き込む必 要があ りま 夕1部 発振卜 1路 を4tう ときは関係あ りません ー タとは BGデ ,パ ワー・ オ ン リセ ツ トと,プ ラウ ン アウ ト リセ ッ トに使 われる21Vの 基 l111[ す . そ の範り ‖は 0か ら3ま での PЧ 通 りの値 をもちます ここでス:Lに あるIHexロ ー ドlボ タンをクリ ックして,led― test サ 1:の 校 正llで HEXフ アイル を,売 み込み ます このプ ロ グラムでは コン 図 D47の ように,プ ロ グラム メモ リに読み込 まれた様 1が わか ります フ ィギ ュレー ショ ン グ・ ビ ッ トの 設定 をプ ロ グラムの 中 で次 の ように設定 してあるので ,図 の 画前iイ l‖ i にそ の 内容が反映 されてい ます。 CONFIG ttNT OSC NOCLKOUT & PWRTE ON & & BODEN OFF & MCLRE OFF & WDT OFF CPD OFF & CP OFF この コ ン フ ィギ ュ レー シ ョン・ ビ ッ トを プ ロ グ ラ ム の 中 で 11定 しな か った 場 合 は ,IIEXフ ア イ ル を 読 み 込 ん だ あ とに , コ ンフ ィギ ュ レー シ ョンの 内 容 を こ こで 設 定 す る必 要が あ ります では読み込んだプ ロ グラム メモ リの最終番地 を見てみ ま しょう 図 D48の ように,プ ログラム・ メモ リの最終番地は 3FFFhに なってい ます 264 方新品の PIC12F629 FF FF FF = │ 図050 プログラム成lrj ∃コ∃ FI 一 ぁ殉 ラ■ 二 FF FF FF FF FF FF FF FF FF 一一 一 郷 為 fF 一二 IOO6O:FF FF :量 i をセ ッ トしてlリ ー ド!ボ タ ンを ク リ ック した と きの プ ロ グラム ・ メモ リの 最 終 番地 は 3498hで した この よ うに,セ ッ トした PIcの 最 終 番地 に内 部発振 周 波 数校 1に 1礎 が きち ん と 書 き込 まれ て い る場 合 は 図 D46の 10SCCAL BCは ,マ イコ ン内 の デー タを使 用す るlの 項 目にチ ェ ックを して,Iプ ロ グラム lボ タ ンを ク リ ックす れ ば ,プ ロ グラム と一 緒 に きちん と内部 発振 周 波 数 校Ji値 も書 き込 む こ とが で き ます セ ッ トした Icの 最終 番地 が 別 の lAで 書 き換 え られ て しまって い る場 は 合 ,IOSCCAL BCは ,マ イ コ ン内 の デ ー タをft‖ jす るJの 項 ‖にチ ェ ックを外 して ,loSCCALデ ー タ (16進 数 )]の 右 の 枠 内 に メモ して お い た校 正値 の値 を人 力 します 人力 す るの は ド2桁 で ,上 位 の 34(RETLW命 令 )は 必 要 あ りませ ん_入 力が 済 ん だ ら1プ ロ グラムlボ タ ンを ク リ ック します , I〕 ログラム〕 ボタンをクリックすると,図 D.49の ようにメッセー ジ欄に1プ ログラミング中… と表/1N 〕 されたあと,lni面 の ドにIプ ログラ ミング成功lと 表示 (図 D_50)さ れ,PIcへ の 書き込みが 完 fし ます これでようや くPICが 使えるようにな りました では,PICに 書き込まれたプログラムの動作を確かめてみ ましょう ュニバーサル基板に組み込んで もよいのですが,部 品が少ないので米板を4tわ ないで組んでみ ましょう。 Iプ Cド D.4 ロ プ グラ ム の 動 作 確認 プ ログラムの書 き直 しが必 要になった ときのこ とを考えて,PIcは ソヶッ ト にた し込むように してお きます 電源 は 5Vで も乾電池 2個 直列 に した 3Vで も動 作 します 5Vの レギュ レー タを4rtぅ 方法 もあ ります。 今IJは 定格電圧 37Vの リチ ューム・ イォ ン 電池 で動作確 認 してみ ま した 写真 D5の よ うにパー ツをlCソ ケ ッ トに直接 はんだ付け して作 りました。 写真 D5 LEDの 点減 テス ト 265 付録 D 写真 D6 は じめての PICプ ログラ ミング 写真 D7 ク リス タル発振子 セ ラ ミック発振子各種 きちん と 1秒 間 に 1)1ず つ LEDが 点減 す る の を確 認 で きたで し ようか 。時 計 の 秒 針 と見比 べ なが ら 確 認 してみ て くだ さい ● PICの クロックについて ■ 実は PICに 内蔵 され ている発振 nl路 はあま り11確 ではあ りませ ん デー タシー トには 1%に 校 1に さ れて いる と書いてあ ります RC発 振 「 1路 をftっ てい るので,周 囲の温度 の影響 も受けます 今 llの ‖的では まった く問題 あ りませ んが ,時 計の ように精度を必要 とする場合は,外 部発振 口1路 を い は ftい ,ク リスタル発振子 (振 動 子)を ltう 必要があ ります (写 真 D6)そ こ までの精度が必要 な 場合 セラ ミック発振 (写 真 D7)を 使 えば よいで しよう 「 RC発 振 1路 に比べ て飛躍的 に精度が Lが ります “ ■ ま とめ セわれる命令は全部 で 35種 苺iし かあ りま 「初めての PICプ ロ グラ ミングJは いかがで したか PICで イ ー せん プ ロ グラムを組 むために全部 の 命令 を使 うことは まず ないで しよう 今世Iの 発光 ダイオ ド点減 プ ロ グラムでftっ た命令を もう 度見てみ ましょう BSF, BCF, CALL, MOVWF, Mい ′LW, 00TO, NOP, DECFSZ, RETURN, RETLW のに よ すでに 35種 な1の 命令 の 中か ら 101111類 の命令 をltい ました これ らの 命令 はプ ログラムを剰lむ ‐ ‐ せん く使 われる命令 です 複雑 に見えるプ ロ グラム も, つ つの命令 の組 み 合 わせで しかあ りま ロ ム ら 度にすべ てを理解す ることは大変ですが ,本 亨:の 別の 章で取 り Lげ ているプ グラ も参考 に しなが , 少 しず つ 理解 を深め て ください 1の 「発光ダイオー ドの点滅Jプ ログラム をC言 語で 書 C,i語 プ ロ グラ ミングに興味 のある人は,今 「 き直 して.第 7'れ の 中で紹介 して い ますか ら参考 に して ください 本 市の CD― ROM収 録内容 を表 D2に 示 します 表 02 CD‐ ROMリ ス ト '7+try?l ,さ progran 収録内容 1減 プ ログラ′、(エ ラーあ り 光 ダイオー ドリ , (PIC12ド 6") 発光ダイオー ド■減 プ ログラム (‐ ラーな し , (PiC 12F629' 266 解 説 C'用 語 ◆ 発光ダイオー ド(LED) 電流 を流す と発光す る半導体素 の 種 .ア ノー ドとカッー ドの 1つ の端 Fが あ り,ア ノー ドに ‖ 1,カ 「 ソー ドに負の電 をかける と,約 2Vの 電圧 で電流が流れ始め,発 光する '「 ◆ アセンブラ (assemb:er) コンピュータが解釈で きる,:語 (マ シン」 1)と 1対 1に 対応 したプログラミング1言 語 (ア センプ リ言語)を 用いて作成されたソフ トウェアの設計図 (ソ ース コー ド)を ,コ ンピュー タが実行できる形式 (オ ブジ ェク ト コー ド)に 変換するソフ トウェア ◆ C言 語 1972年 にアメリカAT&T社 のベル研究所で D M Ritchie氏 とB W Kernighan氏 によって開発された プログラミングtiri.1986年 にアメリカ規格協会 (ANSI)に よって標準化され,国 際標準化機構 (ISO) や日本 1喋 規格 (JIS)に も標準として採用 されている ◆ コンパ イル (compilo) 人 間が プ ロ グ ラ ミング ::語 を用 い て 作 成 した ソ フ トウ ェアの 設 計 図 (ツ ー ス・ コー ド)を コ ン ピュー タ Lで 実行 I能 な形式 (オ ブ ジェ ク ト・ コー ド)に 変換 す る こ と “ ◆ オブジェク ト・ コー ド(Obiect code) コン ピュ ー タにIF解 で きる 言 「1(マ シ ン語 )で 記述 されたプ ロ グラム る ネイテ ィブ 数lltと して表現 されるため ,そ の ままの形で人間が理解するのは困難 コー ドとも呼 ばれ . ◆ フローチ ャー ト 仕事 の流れや処理の il Flを ,記 号を用 いて図式化 した もの ◆ イ ンクルー ド(include) nclude」 は「含め る」 の 意味で,コ ンピュー タ関連 では,デ ー タの ある部分に のデー タを判lみ 込 別 「 む場合などに この 言葉を使用す る ◆ サブルーチン(sub rou● ne) 意味的もしくは機能的にまとまった処理を行うルーチン 複雑なプログラムをサブルーチン化 して意味 単位/機 能単位にうまく分割することで,プ ログラムの構造を理解 しやす くすることがで きる ◆ マシン語 (machine language) CPUが 直接解釈/実 行できるプログラム・ コー ド 267 付録 0 は じめての PCプ ログラ ミング ◆ デ ィレク トリ(directory) ハ ー ド デ ィスクや フロ ッビ デ イスク.cD ROヽ 1な どの記憶装 itで ファイルを分類 幣理す るた めのイ カ ■ 場所 「 フ ォルダJと も呼ぶ ◆ デバ ッガ (debugger) 、 プ ロ グラノ の (り (バ グ)の 発見や修 Lを 支援す るソフ トウ ェア 1り ◆ ビル ド(build) プ ロ グラムFTl発 にお いて. ツー ス 、を プ ログラム を コンパ イル もしくはアセ ンブル し,実 行 プログラノ 作成す ること ◆ コンパ イラ (compiler) プ ロ グラ ミング言 人間力` tl・ で i己 述 した ソフ トウ エアの ili:│ズ (ソ ース コー ド)を , コンピュー タカ'実 行で きる形式 (オ ブジェク ト・ コー ド)に 変換する ソフ トウェア ◆ デ バ ッグ (debug) コンピュー タ プ ロ グラムの fり tり (「 バ グ」 と呼 ばれる)を 探 し,IItり 除 くこと ◆ スタック (stack) との 最後 に入力 したデ ー タが 先に出力される とい う特徴 をもつ デー タ構う [ 不 ◆ コンフ ィギ ュレーション (conigura‖ on) 「coniguratk)nJは 「形Jえ 、地形Jな どの 意味 で ,コ ンピュー タ用語では,ハ ー ドウ エア ソフ トウエ アの 各種 設定 を意味す る Microchip社 のライタ コラム ヽlicrocllip llか ら多 くの Pに ラ イタが 発 売 され て い ます が 写 真 DAは 11社 の 8ピ ンか ら 11ビ ンまで の フ ラ ツシユ ボー ドです き,生 タ イプ の PICに │卜 11所 き込 む こ との で きる。 rSBボ ー トにつ なげ ば外 部電 で きるυ)で む こ と力` ート ′`ソ コ ンで 1吏 うの に使 利 です (,ビ ンの 111.最 小 I'IC(PIC101'2()、 l・ tア 2● 3 しで tヽ │ヽ ノ ワ ン タ イア、 伸li各 もS36と 安 く 何 よ ツiた な デ バ イスヘ の りもヽlit rochip lの 製 肝│な ので 対応 も rい の でお勧 め です :な シ リー ズ に も変 ダブ タを使 う こ とで 対 ,と して い ます I'iCに は 出 き込 め ませ んが i潟 シ リア ル ,ド ー トσ)な 写真 DA Microchig+lOPlckit 1 Flash Starter Kit