PIC編 |
|
PICは何をしているのでしょう。
LSIの中でも電子工作では最近有名なのがPIC、H8ですが、ここではPICを取り上げて簡単に説明しましょう。もし興味のある方はPICに関する書籍を紹介していますので是非参考にして下さい。
PICは方向が有りますので注意してください。基板に差す時もピンが少し広がっているので少し机の上でピンを整えてから基板に順番に差し全てのピンが差さった事を確認してからハンダ付けすると良いでしょう。
C−MOSのICは入力インピーダンスがかなり高いので静電気などで壊れる危険があります。よく黒色のスポンジに刺さっていますがこのスポンジは導電性のスポンジで静電気からICを保護してくれます。
|
|
|
|
|
|
|
ワンチップ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 |
X |
X |
PICの初代フラッシュROMタイプ |
PIC16F84 |
18 |
1K |
64 |
68 |
X |
X |
現在主流の16C84の2代目 |
PIC16F628 |
18 |
2K |
128 |
224 |
X |
O |
16F84にUSARTが内蔵して更にパワーアップ版(ROMが2K) |
PIC16F648 |
18 |
4K |
256 |
256 |
X |
O |
16F628のROMが4Kに増加 |
PIC16F819 |
18 |
2K |
256 |
256 |
O |
? |
16F84にA/Dが付いた |
PIC16F873 |
28 |
4K |
128 |
192 |
O |
O |
A/DとUSARTが付いて更にポートも増えたよ |
PIC16F876 |
28 |
8K |
256 |
368 |
O |
O |
16F873にROMが8Kに増加、ついでにRAM・EEPROMも増加 |
PIC12C509 |
8 |
1K |
41 |
0 |
X |
X |
ROMはワンタイムだが8ピンは魅力です。
ワンタイムROMは一回だけ書き込みができます。 |
PIC12F629 |
8 |
1K |
64 |
128 |
X |
X |
8ピンPICでやっと出たフラッシュROMタイプ |
PIC12F675 |
8 |
1K |
64 |
128 |
O |
X |
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 |
1 |
ANDWF f、d |
論理積 |
W and f の結果をWかfへ格納 |
Z |
1 |
CLRF f |
ゼロクリア |
f を0にクリアする |
Z |
1 |
CLRW |
ゼロクリア |
W を0にクリアする |
Z |
1 |
COMF f、d |
反転 |
f の反転結果をWかfへ格納 |
Z |
1 |
DECF f、d |
−1 |
f−1 の結果をWかfへ格納 |
Z |
1 |
DECFSZ f、d |
ゼロスキップ |
f−1 の結果をWかfへ格納し
結果がゼロで次の命令をスキップ |
|
1 |
INCF f、d |
+1 |
f+1 の結果をWかfへ格納 |
Z |
1 |
INCFSZ f、d |
ゼロスキップ |
f+1 の結果をWかfへ格納し
結果がゼロで次の命令をスキップ |
|
1(2) |
IORWF f、d |
論理和 |
W or f の結果をWかfへ格納 |
Z |
1 |
MOVF f、d |
移動 |
f の内容をWかfへ格納 |
|
1 |
MOVWF f |
移動 |
W の内容をfへ格納 |
|
1 |
NOP |
無動作 |
1サイクル使い何もしない |
|
1 |
RLF f、d |
左シフト |
1ビット左シフトの結果をWかfへ格納 |
C |
1 |
RRF f、d |
右シフト |
1ビット右シフトの結果をWかfへ格納 |
C |
1 |
SUBWF f、d |
減算 |
W-f の結果をWかfへ格納 |
C,DC,Z |
1 |
SWAPF f、d |
入替 |
f 上位と下位の内容を入替後Wかfへ格納 |
|
1 |
XORWF f、d |
排他的論理和 |
W xor f の結果をWかfへ格納 |
Z |
1 |
|
|
|
|
|
BCF f、b |
ビットリセット |
f の b ビット目を0にする |
|
1 |
BSF f、b |
ビットセット |
f の b ビット目を1にする |
|
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 |
1 |
ANDLW k |
定数論理積 |
W and k の結果をWへ格納 |
Z |
1 |
IORLW k |
定数論理和 |
W or k の結果をWへ格納 |
Z |
1 |
MOVLW k |
定数格納 |
k を W へ格納 |
|
1 |
SUBLW k |
定数減算 |
W − k の結果をWへ格納 |
C,DC,Z |
1 |
XORLW k |
定数排他的論理和 |
W xor k の結果をWへ格納 |
Z |
1 |
|
|
|
|
|
CALL k |
サブルーチンへ |
サブルーチン「k」へジャンプ |
|
2 |
GOTO k |
無条件ジャンプ |
「k」へ無条件ジャンプ |
|
2 |
RETFIE |
リターン |
割り込み許可で戻る |
|
2 |
RETLW k |
リターン |
W に k を格納して戻る |
|
2 |
RETURN |
リターン |
通常のサブルーチンから戻る |
|
2 |
|
|
|
|
|
CLRWDT |
WDTクリア |
WDT(ウォッチドックタイマ)をクリアする |
|
1 |
SLEEP |
スリープへ |
スリープモードにする |
|
1 |
|
|
■ アセンブラの入力方法 ■
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 |
;リセット時のスタート(一応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」を仮に作りました。
<3> 16ビット長の命令体系へ → PIC18FXXXX など
|
|
|
■ PICの用語解説 ■
◆ Wレジスタ |
PIC自体が移動(MOV命令)や演算(加減算、論理演算)などが出来る専用のレジスタです。
PICの場合は汎用レジスタは、このWレジスタ1個のみしかありませんので他の情報は全てRAMに格納して必要な時に読み出すようにします。 |
|
◆ スタック・ポインタ |
「CALL」、「割り込み」を使用した時に戻り番地を記憶しますが、この記憶する場所がスタックエリアという所です。この場所は独立してありますが16F84では8段まで準備可能です。これ以上超えるサブルーチンコールをすると戻れなくなりますのでプログラムを作る時はあまり階層を深くしない方が無難でしょう。
また上記に記載しましたが「割り込み」にも使用されますので実際は7段以下で製作しましょう。 |
|
|
|
|
空き部屋 |
空き部屋 |
|
■ 空き部屋 ■
|
|
|