PIC編
PICは何をしているのでしょう。
 LSIの中でも電子工作では最近有名なのがPIC、H8ですが、ここではPICを取り上げて簡単に説明しましょう。もし興味のある方はPICに関する書籍を紹介していますので是非参考にして下さい。
 PICは方向が有りますので注意してください。基板に差す時もピンが少し広がっているので少し机の上でピンを整えてから基板に順番に差し全てのピンが差さった事を確認してからハンダ付けすると良いでしょう。
 C−MOSのICは入力インピーダンスがかなり高いので静電気などで壊れる危険があります。よく黒色のスポンジに刺さっていますがこのスポンジは導電性のスポンジで静電気からICを保護してくれます。
 ☆ 目次 ☆ PICの仕事は何だろう!
14ビット長の命令を調べよう
チョット小さい12ビット長の命令を調べよう
ワンチップCPU  ワンチップCPUってなあに?
<ワンチップマイコン>
 最近はワンチップマイコンが主流になりつつあります。それは上記の周辺ICをCPUと一緒にしたものでかなりの小型化が可能でしょう。国産では日立のH8シリーズが有名で外国産ではマイクロチップテクノロジのPICシリーズがよく知られています。
 これは電子工作などでも手軽に作れるためなのでしょう。そこで電子工作でもお馴染みのPICを取り上げてみましょう。
<H8>
 国産のH8シリーズは日立製のICでいろいろな種類が販売されています。ワンチップと言われていますが完全なワンチップでなくCPUの他にRAMが必要になります。やはりワンチップですのでそんなに大きいRAMは必要ないので内蔵タイプがほしい物です。このICもRISCチップですのでかなり高速処理が可能でしょう。
 ROMはフラッシュタイプですので1万回は書き込み可能でしょう、このフラッシュROMは何回も書き込めるので大変便利です。しかも製品になった後でもソフトのバージョンアップも可能です。
 そのためキットなどでは必要最低限のRAM、ドライバーICなどが組み込まれている基板が販売されていますので、そのボードを拡張することで自分のオリジナルな回路を付け加えそれにソフトを組み込んで動かすことになります。
<PIC>
 外国産でPIC(ピックと呼ぶそうです)がありますがマイクロチップテクノロジ社よりいろいろな種類が販売されています。このPICは完全にワンチップと言えるでしょう。H8と違い少ない容量ですがRAMも内蔵されています、そのためPICの足は電源で2本、発振子の2本、リセットの1本と5本を除いたすべてが入出力に使える優れものです。PICによってはリセット、発振子までも内蔵され電源の2本以外は全部入出力に使えるという具合にかなり便利なICと言えます。
 これもROMはフラッシュROMですので1万回は書き込みできますので非常に便利です。種類によってはワンタイムROMも有りますので購入時には注意しましょう。
 電子キットもH8と違い周辺があまりいらないので、そのままPICと一体のキットになっている商品が多いようですの色々ありますので色々探してみましょう。
■ CPUの足は? ■
・LSIの足は8ピン〜40ピン位で多数有りますが最近はDIPタイプが豊富ですので電子工作には便利です。またフラットタイプがかなり増えてきましたので小型化も可能でしょう。
・ICの足のピッチですがDIP型の場合は2.54mmピッチと決まっています。
 (ユニバーサル基板(等間隔に穴が開いている基板)はこのピッチの物を購入するとICが差さります)
PICとは  PICはどんなICなの?
<PICとはなあに!>
 PICはCPUの仲間ですが、どうもそれだけではないようですが一体なんでしょう。
PICは、かなり欲張りなICですのでその辺を調べてみましょう。ワンチップのなかでも完全なワンチップですがPIC自体には何が入っているのでしょうか?
1.CPU本体(これもRISCチップで早いよ)
2.ROM(このPICの特徴であるフラッシュタイプのROM製品が売れていて1万回位も書き込みができるのです。)
   これによりソフトの修正があればすぐにバージョンアップができ大変便利!
   この他にワンタイムROMもあり1回しか書き込めません。これはソフト屋さんのストレスになり間違えると捨てるしかありません・・・
3.RAM(少ない容量ですがソフトの組み方でうまく使いましょう。H8には無いのがこのRAMです)
4.Timerカウンター(一定時間でタイマーを作動できますのでソフトタイマーより楽にタイマーを作れます)
5.WDT(ウォッチドックタイマで暴走から守ることができます)
  ソフトを組むときにクリア命令を実行しないとリセット状態と同じになります。
6.EEPROM(それほど多くはありませんが電源を切っても記憶されていますので便利な記憶装置です)
  ソフトでEEPROMにデータを書き込むような仕掛けを作りデータをチョット変更することができます。
  そのためいちいちソフトを変更せずにパラメータなどをこのEEPROMに利用するソフトにしておけば変更も簡単です。
−−−−ここからはPICにより内蔵されていない場合があります。
7.A/D(アナログ電圧をデジタルに変換できます。簡単なテスターも作れます)
  電圧計ができれば工作のバリエーションはかなり豊富になりますので色々と考えてみましょう。
8.USART(非同期式シリアル通信で色々なことができるよ)
  簡単にできることではパソコンとデータの通信ができる(これはかなり面白いですね!)
  PIC同士の通信などもできるよ
9.CCP(PWMでモータ制御が可能?)
  モーター制御以外にも色々活用があるのでこれも面白いよ
 これらのICがすべて内蔵されています。ずいぶん欲張りなICだと言うことが解りましたか?
実際にこれだけの物が内蔵されていますので、CPU周りのハードはあまり必要ないようですので周辺回路をじっくり考えることができ決まっている回路をいちいち作る必要がないのでハード面の強化も可能でしょう。
PICの紹介  ◇PICにも色々あるよ◇
 電子工作や電子キットなどでも、お馴染みのPICを調べてみましょう。最近どんどん改良版がでて現在ではかえって価格が高くなっている物もあるようですので確認してから購入しましょう。よく使われそうなフラッシュROMタイプを中心に集めてみました。
 下記には代表的なPICの写真も載せましたので参考にして下さい。
型 番 ピン ROM RAM EEP
ROM
A/D USA
RT
簡 単 な 説 明
PIC16C84 18 1K 32 64 PICの初代フラッシュROMタイプ
PIC16F84 18 1K 64 68 現在主流の16C84の2代目
PIC16F628 18 2K 128 224 16F84にUSARTが内蔵して更にパワーアップ版(ROMが2K)
PIC16F648 18 4K 256 256 16F628のROMが4Kに増加
PIC16F819 18 2K 256 256 16F84にA/Dが付いた
PIC16F873 28 4K 128 192 A/DとUSARTが付いて更にポートも増えたよ
PIC16F876 28 8K 256 368 16F873にROMが8Kに増加、ついでにRAM・EEPROMも増加
PIC12C509 1K 41 ROMはワンタイムだが8ピンは魅力です。
ワンタイムROMは一回だけ書き込みができます。
PIC12F629 1K 64 128 8ピンPICでやっと出たフラッシュROMタイプ
PIC12F675 1K 64 128 8ピンPICでフラッシュROMしかもA/D付の優れもの!
 <<実際にPICを見てみましょう>>
 PICの参考写真ですので実際に写真を見て下さい。

 ここでは8ピンの小型の物から24ピンのPICですが実際には40ピンまで大きい物があります。

 「FlashROM」がPIC自体に内蔵にROMがフラッシュタイプです何回も書き込めれるタイプですので大変便利です。(電子工作系ではお勧め!)

「OneTimeROM」は一回だけ書き込めれるタイプですので充分にソフトのデバックしてから書き込みましょう。
でもソフトのチェックはどうするのでしょう、そうです「UVEPROM」が消去可能なROMタイプPICですので、これを紫外線で消去してから書き込みます。

 <<PICの一番ピンを確認してみましょう>>
 PICのピン番号を写真を見ながら確認しましょう。

 基本的にはDIPタイプですのでピン番号は共通ですがPICは中央のへこみ以外に珍しく1番ピンがわかる丸いへこみがあります。(赤印で表記しています)

 ピン番号自体はDIPタイプと同じです。下から8ピン、18ピン、28ピンを参考にして下さい。
PICの命令  CPUの命令は解らないよ
 PICもCPUの一種ですので当然ながらソフト(プログラム)が必要になります。でもソフトなんかやったことがないので解らないと思っている方は多いと思います。
 ソフトがわからないのでどうしてもやる気になれない方は本などを買って読んでも何言ってるんだろうとなりますよね。そうです実際にソフトは本で読むよりキットなどを買って実際にソフトを改造することから始めるとわりとスムーズに理解できると思いますのでチャレンジしてみて下さい。
 通常はアセンブラかC言語でプログラムを組みますが基本と言うことでアセンブラを学びましょう。
 ※このアセンブルソフトは「マイクロチップ社のMPLAB IDE シリーズ」の環境で解説いたします。
興味のあるかたはフリーですのでダウンロードしてお使い下さい。

 ・MPLABはココにあります。(2005年8月現在でV7.20です)
 ・MAICROCHIP社はココです。
 ・日本語のMICROCHIP社はココです。(売れているPICの日本語版データシートもあるよ)

 ・秋月のPICライターはココだよ。(よく使われているPICライターです。2005年8月現在 Ver-4が最新版です)
   秋月製のPICライターはVer-4でまとまっていませんので注意して購入しましょう。新しく購入する場合は
  Ver-3.5とアップキットのVer-4.0を同時に購入する必要有り、シリアルが付いてない場合はUSBシリアルケーブルも購入しましょう。
  (この場合はUSB変換と延長ケーブル、電源付のセットがお買い得です)

 ・上記MPLABとPICライターの説明がある初心者向けの本で「やさしいPICマイコンプログラミング」です。(アマゾンで購入可能)
 ・上記MPLABとPICライターの説明とソフトの詳細がある本で「はじめてのPICアセンブラ入門」です。(アマゾンで購入可能)

■ PICの命令を覗いてみよう! ■
  それでは実際にPICの命令はどんな命令があるのかを見てみましょう。PIC16F84の命令を覗いてみましょう。
命 令 命令内容 命令の説明 影響
フラグ
サイクル
ADDWF  f、d 加算  W+f   の結果をWかfへ格納 C,DC,Z
ANDWF  f、d 論理積  W and f の結果をWかfへ格納
CLRF   f ゼロクリア  f を0にクリアする
CLRW ゼロクリア  W を0にクリアする
COMF   f、d 反転  f の反転結果をWかfへ格納
DECF   f、d −1  f−1 の結果をWかfへ格納
DECFSZ f、d ゼロスキップ  f−1 の結果をWかfへ格納し
  結果がゼロで次の命令をスキップ
INCF   f、d +1  f+1 の結果をWかfへ格納
INCFSZ f、d ゼロスキップ  f+1 の結果をWかfへ格納し
  結果がゼロで次の命令をスキップ
1(2)
IORWF  f、d 論理和  W or f の結果をWかfへ格納
MOVF   f、d 移動  f の内容をWかfへ格納
MOVWF  f 移動  W の内容をfへ格納
NOP 無動作  1サイクル使い何もしない
RLF    f、d 左シフト  1ビット左シフトの結果をWかfへ格納
RRF    f、d 右シフト  1ビット右シフトの結果をWかfへ格納
SUBWF  f、d 減算  W-f   の結果をWかfへ格納 C,DC,Z
SWAPF  f、d 入替  f 上位と下位の内容を入替後Wかfへ格納
XORWF  f、d 排他的論理和  W xor f の結果をWかfへ格納
BCF    f、b ビットリセット  f の b ビット目を0にする
BSF    f、b ビットセット   f の b ビット目を1にする
BTFSC  f、d ビット0スキップ  f の b ビット目が0だったら次の命令をスキップ 1(2)
BTFSS  f、d ビット1スキップ  f の b ビット目が1だったら次の命令をスキップ 1(2)
ADDLW  k 定数加算  W +  k  の結果をWへ格納 C,DC,Z
ANDLW  k 定数論理積  W and k  の結果をWへ格納
IORLW  k 定数論理和  W or  k  の結果をWへ格納
MOVLW  k 定数格納  k を W へ格納
SUBLW  k 定数減算  W −  k  の結果をWへ格納 C,DC,Z
XORLW  k 定数排他的論理和  W xor k  の結果をWへ格納
CALL   k サブルーチンへ  サブルーチン「k」へジャンプ
GOTO   k 無条件ジャンプ  「k」へ無条件ジャンプ
RETFIE リターン  割り込み許可で戻る
RETLW  k リターン  W に k を格納して戻る
RETURN リターン  通常のサブルーチンから戻る
CLRWDT WDTクリア  WDT(ウォッチドックタイマ)をクリアする
SLEEP スリープへ  スリープモードにする
■ アセンブラの入力方法 ■
 MPLABやその他のアセンブラを利用してPIC命令をソースで入力しなければなりませんがチョットした入力の規則があります。
基本的にはそれさえ守ればどんな書き方でも良いのですが無茶苦茶に入力すると後でソフト変更などで修正するときに何を意味するのかわからない場合もありますので、ある程度、自分で規定を決めておくとたいへん解りやすいソースリストになります。
 下に実際のアセンブルの入力方法と合わせて見てみて下さい。
ソース名 説  明
Label ラベルと読み、行の最初に英文字かアンダーバーで始まる32文字以内の長さで表記。
 プログラムの先頭であればそのプログラムの目的をラベルにしよう。途中の場合でラベルの付けようがないときは先頭ラベルの末尾に順番で数字を入れておこう。あまり長いラベルもかえって大変ですので10文字以内にしておきましょう。
Mnemonic  ニューモニックと読み、PIC専用の命令を記載します。
 ラベルがないときはスペースを1個もしくはタブを入れます。
Operand  オペランドと読み、命令に対するパラメータを記載します。
ないときは省略可
Comment  コメントと読み、セミコロン「;」の後は自由にコメントを記入しましょう。
 コメントも多すぎるとかえって見づらくなり、また何もないのも問題です。
 ポイントはプログラムの始まりやジャンプなどの切換部分、入出力の条件などの箇所は必ず記載しましょう。
■ 実際のアセンブラの入力方法 ■
 下記は実際に入力するとこんな感じになるサンプル表示です。
これはあくまでも参考ですので自分に合った入力方法で入力して下さい。初心者の方は基本的にこの方法で入力すると良いでしょう。慣れてきたら自分に合った書き方を考案して下さい。
実際にアセンブラを書いてみましょう。
Label Mnemonic Operand Comment
#INCLUDE "P12F675.INC"
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _MCLRE_OFF
 PIC温度監視装置 2004/07/01
    Version-1.00
 Target-PIC PIC16F84
RAMTOP: EQU 0CH ;16F84のRAM開始アドレス設定
CBLOCK RAMTOP ;RAMエリア宣言
TMbuff ;タイマー用バッファー
IObuff ;出力I/Oポート用ラム
ENDC
PIC Reset Start
ORG ;リセット時のスタート(一応0番地セット)
GOTO START ;ラベルのスタートへジャンプ
PIC Interrapt Start
ORG 4 ;割り込みスタート番地
;割り込み処理があればココで処理(W、フラグなどは待避すること)
RETIE
-------------- ;線など入れると境界線となり解りやすいよ
PIC Start
--------------
START: ;I/Oの設定、割り込み設定、RAMの初期化など
-------------- ;線など入れると境界線となり解りやすいよ
PIC MAIN Loop
--------------
LOOP: ;処理したいプログラムを入力
;次からは参考のための一例です。
MOVF PORTB,W ;ポートBのデータを読み込みBUFFへ格納
MONWF PBBUFF
BTFSC PBBUFF,RB0 ;PBのビット0を検査しハイでジャンプ
CALL DTOUT
;処理したいプログラムを入力
GOTO LOOP
-------------- ;線など入れると境界線となり解りやすいよ
PIC Subroutin
--------------
;ココからはメインで使うサブルーチンなどを入力して下さい
DTOUT: MOVLW 100 ;I/Oに一定時間出力(サブルーチンDTOUTの開始)
MOVWF TMbuff ;100msをタイマーバッファーにセット
RETURN ;DOUTサブルーチン終了でリターンで元に戻る
END ;プログラムの終了
■ 補足説明 ■
  上記命令、補助命令は全て半角英数字で入力して下さい。(下記は例題ですので全角も含まれています)
 注釈文の最初の「;」も半角で入力しその後の文章は簡単な英単語でも良し漢字での入力もOKです。
 注釈文中ピンク色の枠の文章は注意文ですので注釈文ではありません。グレーの「・」はこの部分にソフトを入れて下さい。
 文中のプログラムはあくまでも入力方法の参考に記載しました。
 等間隔で横に線引きしていますが「TAB」キーを利用するとこのようになりますよ(スペースだと大変です)
■ PIC命令以外の補助命令を覗いてみよう! ■
 今度はPIC命令以外の記号ですがアセンブラは命令をわかりやすくするため便利な機能が付いていますのでそれらの機能を学んでみましょう。下記に主な補助命令ですが必ず出てくる命令もあるよ!
命令 命令の説明
#INCLUDE
◆別ファイルの参照
 アセンブラでいつも同じことを記載するのは面倒なのでPICごとに決めれれた名称を決めておきます。
その名称をラベルなどで登録しておくと大変見やすいソースファイルになります。その登録データを別ファイル(インクルードファイルという)で作っておきソフトを作るときに定義すれば自動的に読み込まれます。
▼例題
INCLUDE "PIC16F84A" ;PIC16F84Aと言うインクルード・ファイルを読み込む
#DEFINE
◆文字列の宣言
 下に出てくる「EQU」と似ていますが、この宣言は文字列全体を定義します。
ラベル(左側文)を右側文と同じにする事が出来ます。アセンブラ上では大変見やすくなるので便利です。
▼例題
・まずはDEFINEUなしの場合はプログラム内に直接データを書き込む
              BCF        PORTD,1    ;ポートDのビット1をクリア。

・DEFINEを使うとこのようになる
#DEFINE  LCD_RS   PORTD,1 ;「LCD_RS」を「"PORTD,1"」と宣言する
       ・
       ・
              BCF   LCD_RS   ;上記プログラムと同じ意味を持ち解りやすいよ
_ _CONFIG
◆PICの書き込み時の重要パラメータ
 PICを書き込むときの条件などを設定する物です。
最初のアンダーバー「_」は2個続けて入力します。
・_CP    コードプロテクトの有無
・_PWRTE パワーアップタイマー起動の有無
・_WDT   WDTの有無
・_xx_OSC xx=RC/HS/XT/LPから選択
▼例題
     __CONFIG _CP_ON & PWRTE_OFF & WDT_ON & _HS_OSC
;     この場合はコードプロテクト ON、パワーアップタイマ起動、WDT起動、HS_OSCに選択となります
CBLOCK
  ・
  ・
ENDC
◆ファイルアドレス(RAM)の開始と終了
 CBLOCKの後にファイルアドレス(RAM)の開始番号をいれてラベルを記載するとユーザーメモリなどに割り付けてくれます。ENDCで終了です。
▼例題
     CBLOCK 0Ch ;ファイルレジスタの開始を0Chとする。(PIC16F84の場合)
     SR_stsA ;シリアルAステータス用
     SR_dtA  ;シリアルAデータ用
     ENDC
EQU
◆イコール(=)です。
 ラベル(左文字)に数字(右文字)を割り当てるものです。実際には定数などの数字や決められたアドレス(IOポートなど)はこれで割り当てるとプログラムが見やすくなります。また時間などの定数もこれで設定しておくと一カ所変更するだけで全体の定数も一気に変えられるため便利でしょう。
 I/Oポートなどのハード絡みのアドレス名は各インクルード・ファイルで定義されています。
▼例題
・まずはEQUなしの場合はプログラム内に直接データを書き込む
              MOVWF    05h ;これはWの値を05h番地に書き込むことになります。
              MOVLW    100 ;Wの値に100=64Hを設定する

・EQUを使うとこのようになる
PORTA:  EQU   05h ;「PORTA」を「05H」とする。(05HよりPORTAの方がポートすぐ理解できるよ)
TMWAIT: EQU   100 ;100msの時間をセット。(この部分を変えるだけでTMWAIT全体が変わるよ)
       ・
       ・
              MOVWF   PORTA  ;Wの値をPORTA(05H番地)に書き込む。
              MOVLW   TM100  ;Wの値にTM100(100=64H)を設定する。
ORG
◆オリジナルで番地リセット
 プログラムの実際に動作させるアドレスを設定できます。0番地からのスタートのときは「ORG 0」とすると良い。
またプログラムでのバンク切り替え時にも利用可能です。
▼例題
     ORG  0 ;プログラム0番地よりスタート
LOOP: CLRW
END
◆ソースコード終了
 プログラムの入力が終わった印ですでの最後の行にはこの「END」をいれて下さい。
▼例題
     END ;プログラム終わり
◆注釈文
 プログラムの最初に書くタイトルやプログラムの説明などに、この「;」で文章をいれて下さい。後日プルグラム自体の内容が把握しやすくなります。
▼例題
;     自動温度監視君 2004/07/01
;     PIC16F84A使用

      CLRF  BUFF  ;バッファークリア
DB
◆データバイト宣言
 1バイト長のデータ宣言です。1バイトの数値やASCIIの文字などが宣言できます。
▼例題
CRDATA   DB   05h ;現在の番地に05hを宣言します。
               DB   'A'
PICの命令表にある記号について調べてみよう
 PICはCPUですので必ずプログラムが必要ですが、いきなりプログラムができる訳ではありませんが、ここで簡単に説明しましょう。
それではPICを解体してみましょう。上記に書いたアセンブラの命令セットで出てくる記号について説明します。
 きっとこれだけでは何を言っているのか解らないと思いますがこんなもんかと思って下さい。
「W」 Working register /ワーキング・レジスタ
PIC自体が持っている唯一のレジスタです。ほぼ全ての命令でWレジスタを使いますので大変重要な役割をします。
上の表で命令の説明項目に「W」が出てくる命令は全て、このWレジスタを使った命令となります。
「f」 Register file address /レジスタ・ファイル・アドレス
PIC自体のメモリ番地名に使用します。データとしては上記Wとこのファイルレジスタでプログラムを作ることになります。
PICにはユーザーが自由に使えるRAMを持っていますので、この部分をソフトを作る段階でデータ用に設定できます。
このRAMはPICの型番で容量(RAM自体のバイト数)が変わるのでソフトの移植の時などは注意が必要です。
「b」 Bit address /ビット・アドレス
ファイルレジスタの8ビットデータのどのビットをターゲットにするかを決める値です。ビット位置アドレス(0〜7)
0ビット目(最下位)を参照する場合は「0」で7ビット目(最上位)を参照するときは「7」となる。
「k」 Literal Field /リテラル
データの場合は8ビットの固定データのことです。(定数データ)
・16進表記=0F0h 、2進表記=B’11110000’ 、10進表記=240 などです。(どれも0F0Hです)
・文字表記 ’A’ 、 ’c’
「d」 Destination select
命令終了後の格納場所指定コード、「0」でWレジスタへ格納、「1」でファイルレジスタへ格納します。
通常インクルードファイルなどで設定されているので「0」の変わりに「W」、「1」の変わりに「F」と入力しても可能です。
※詳しくはインクルードファイルを参照してね!
PICのフラグについて調べてみよう
 CPUが演算などを実行するときやした後で必ずその演算においてお知らせしなければならないことがあります。
例えば「1」引いて結果が「0」になった場合にプログラマーはゼロになったことを確認したい場合どうしたらよいでしょう。
そこでフラグというレジスタの場所(STATUSレジスタ)があります。そのしくみを勉強しましょう。
「C」 Carry Flag /キャリ・フラグ(引算の場合 Borrow/ボロー)
 PICが計算した結果で8ビットを超えた足し算、もしくは「0」以下になった引算をした場合など8ビット内で収まらなかった時に、
このフラグがセットされます。
例題 (16進表記で説明します)
・「50H+50H=A0H」は8ビット内に収まっているのでキャリーは立ちません。
・「80H+90H=110H(実際は10HとCY=1)」は8ビットを超えたのでキャリーが立ちます。
・「10H-50H=-40H(実際はC0HとCY=1)」は8ビットを下回った(マイナスになった)のでキャリーが立ちます。
「DC」 Digit Carry(Borrow) Flag /デジット・キャリ・フラグ
上記キャリ・フラグは1バイト(8ビット)でのフラグですが、このDCはその8ビットの下位4ビット内で演算時にキャリ、ボローが
でた場合に立ちます。
「Z」 Zero Flag /ゼロ・フラグ
 このフラグはよく使います。いたって簡単なフラグで演算結果などで値が「0」となった場合に、このフラグが立ちます。
10回ループで1つずつ引いてゼロ・フラグが立つまでループするなどに使用。
■ PICの命令ないか簡単だ! ■
 上の表でも見ましたが命令はそんなに多くないので覚えるのも楽ですが少ないのも大変な事もあります。
実際の動きを調べてみましょう。例題は実際にプルグラムを作って実行したように見てみましょう。
 1.wレジスタとメモリー、フラグが変化した場合にはピンク色の表示にしました。
 2.フラグはZ,DC(Dと記載),Cの順番で 0に変化は”−”、1に変化は”Z,D,C”の立つフラグ、影響しない場合は=”x”
 3.RAM(ファイルメモリ)は2種類で「RAM_A」と「RAM_B」を仮に作りました。
 <1> 12ビット長の命令体系へ → PIC10F20X , PIC12F50X など
 <2> 14ビット長の命令体系へ → PIC12F6XX , PIC16F84 , PIC16F87X など
 <3> 16ビット長の命令体系へ → PIC18FXXXX など
■ PICの用語解説 ■
◆ Wレジスタ
 PIC自体が移動(MOV命令)や演算(加減算、論理演算)などが出来る専用のレジスタです。
PICの場合は汎用レジスタは、このWレジスタ1個のみしかありませんので他の情報は全てRAMに格納して必要な時に読み出すようにします。
◆ PC・ポインタ
 
◆ スタック・ポインタ
 「CALL」、「割り込み」を使用した時に戻り番地を記憶しますが、この記憶する場所がスタックエリアという所です。この場所は独立してありますが16F84では8段まで準備可能です。これ以上超えるサブルーチンコールをすると戻れなくなりますのでプログラムを作る時はあまり階層を深くしない方が無難でしょう。
 また上記に記載しましたが「割り込み」にも使用されますので実際は7段以下で製作しましょう。
空き部屋  空き部屋
■ 空き部屋 ■











著作権について、FreeLabトップへ