このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
PIC とは Microchip 社( http://www.microchip.com/) のマイクロコンピュータです。 8 pin から 40 pin まで様々なタイプのパッケージがあります。 PIC はそれ単体でコンピュータにとって必要な機能をほとんど内蔵しています。 電源と入出力の装置(スイッチや LED など)をつなげば使えます。 この講義で使用する 18 pin パッケージの 16F628A は、さらに高度な機能も内蔵しています。
とりあえず microchip 社のページに行き、データシートを取得しましょう。 2006 年 8 月現在 Document Search に 628A を入れると、16F627A/628A/648A のデータシートとエラッタ(正誤表)が一つずつ見つかります。 それら二つをダウンロードしてください。
16F628A は非常に高機能でこの講義では全ての機能を使いこなせるわけではあ りません。 機能の概略はデータシートの 3 章にあります。 ここに載っている内容を解説します。
この 16F628A という PIC は 8 bit のデータを扱うコンピュータです。 データは 8bit ですが、命令は基本的には 6bit の命令語と 8 bit のオペラ ンド(演算の対象データ)からなる 14 bit で指定します。 この PIC は RISC タイプの CPU です。 RISC とは Reduced Instruction Set Computer の意味で、単純化された命令 のみでできているプロセッサです。したがって、かけ算命令などの高機能な命 令はありません。 また、命令数は単純に 26=64 個ではなく、全部で 35 種類あります。 14bit のうち単純に 6 bit が命令で、 8 bit がオペランドという命令もあ ります。 一方、例えば bit 演算では、アドレスXXX のbit bbb をセットするなど、二つの引数が必要 な場合もあるため、命令語とオペランドは必ずしも全て同じ形式ではありませ ん。 詳しくは TABLE 15-2 を御覧ください。
また、内部構造に関しては Figure 3-1 に載ってます。 ALU は演算器で、内部レジスタは W reg 一個です。 I/Oポートは 4 ページの Pin Diagrams にもあるように 8 bit のポート A, B の二つがあります。 他にタイマー、USART(シリアル伝送)、コンパレータ、AD 変換器などがあります。 I/O ポートの表示には RA0/AN0 のように一つの pin に対して複数の機能が割 り当てられていて、切替えて使うようになっています。
メモリはプログラム領域とデータ領域が内蔵されていて、プログラム 14 bit、
データ領域は 8 bit です。データ領域はプログラム領域より小さいと言う特
徴があります。
p. 5 の TABLE 1-1 にあるようにプログラムは 2048 語、データ領域は通常の
RAM が 224 byte と不揮発性の EEPROM が 128 byte あります。
なお、このようなプログラム領域とデータ領域が分離しているコンピュータの
方式はノイマン型とは呼ばず、
メモリの構成は 4 章に書いてあります。プログラム領域のアドレスは 0x0000 (0x は C 言語と同様に 16 進数を表します)から 0x07ff までの 13bit になります。 一方、RAM はアドレス 0x00 から 0x7f までが 4 組あります。 各組をバンクと呼びます。 RAM 領域は各 1byte 毎にアクセスでき、それぞれを ファイルレジスタと呼びます。 RAM のうち、各バンク内それぞれのアドレス 0x00 から 0x1f は SFR(Special Function Register) と呼ばれ、PIC をコントロール するための重要な役割を持ちます。 例えば、EEPROM 領域はこの SFR 領域を利用して読み書きします。 SFR の機能の説明は TABLE 4-3, 4-4, 4-5, 4-6 にあります。 一方、0x20 から 0x7F までは GPR(General Purpose Register) と呼ばれ、 ユーザが自由に利用できる領域になっています。
この講義ではマクロアセンブラを使ったクロス開発を 行います。
我々が今まで体験してきたプログラミングでは、実際にプログラムを動かすコン ピュータを使ってプログラムの開発していました。 しかし、 PIC の開発の場合、 PIC だけを使ってプログラミングを行うこと は困難です。 そこで、 Windows やLinux などの他のコンピュータを使用して開発します。 これをクロス開発と言います。
クロス開発の手順は次の通りです。 まず、インテル形式の HEX ファイルと言う機械語が書かれた特別な形式のテ キストファイルをパソコンのツールなどを利用して作ります。 そして、それをプログラマと呼ばれる装置でパソコンから PIC にプログラムとして転送します。 その後、プログラムを書き込んだ PIC を実際に動作させる装置に組み込み、 電源を入れると、 PIC はプログラムに従い動作します。
このように、インテル形式の HEX ファイルを作り、用意したプログラマで PIC に書き込むことができれば PIC を動作させることができます。 インテル形式の HEX ファイルは 16 進数をメモ帳などで書き込めば作ること ができます。 しかし、 16 進数を書いてプログラムを作成するのはとても大変です。 そこで、人間の言葉と 16 進数を対応付けることを考えます。
例えば、0x30ab という値は W レジスタに 0xab という値を入れます。
これを 0x30ab という形で覚えるより、リテラル(定数)を W に移動する(Move
Literal to W register)という意味で MOVLW 0xab
と書くと他
の代入の命令などと関連付けて覚えられ、また正確に記憶してなくても字面か
ら意味が想像できるようになります。
このように実際の PIC を動作させる値と意味を想像できる単語を関連付けた
ルールのことをアセンブリ言語と言います。
また、このアセンブリ言語で書かれたプログラムを実際に動作させる値の列
(というかインテルの HEX 形式のファイル)にするプログラムのことをア
センブラと言います。特に PIC 用のアセンブラが PIC 以外の(Windows
などの)コンピュータで動作する場合、クロスアセンブラと言いま
す。
アセンブリ言語で記述された PIC の命令の説明はデータシートの 15 章にあ
ります。一覧表は TABLE 15-2 になります。
アセンブラは基本的には文字列を数値に変換するだけですので仕組みは簡単で す。 但し、それ以外にも次のような仕事をします。
マクロ機能の付いているアセンブラをマクロアセンブラと言い、 付いてないアセンブラと区別することがあります。 PIC に対する命令ではなく、アセンブラに対して変数やマクロの定義を指示す るものをディレクティヴと言います。 アセンブラのマニュアルは マイクロ チップ社のホームページ http://www.microchip.com/ の Document Search に MPASM を入れて下さい。 すると、次の二つのドキュメントが見つかります。
どちらも重要ですのでダウンロードしておいて下さい。
統合開発環境(Integrated Development Environment)とは通常プログラムの作 成、実行、デバッグができるプログラム環境を言います。 microchip 社は PIC 用に MPLAB IDE という IDE を提供しています。本授業 でもこれを使用します。 microchip 社のホームページの Design の項目に MPLAB® IDE があります ので、そのページを開いて下さい。 そこから、Windows 用の MPLAB IDE の最新版とマニュアルをダウンロードす ることができます。 MPLAB IDE をダウンロードして、インストールしておいてください。 また、マニュアルは以下のものをダウンロードして下さい。
この IDE はエディタ、アセンブラの他、シミュレータと純正プログラマ用の 書き込みソフトも付いています。
次回は開発環境を整備します。プログラマの製作、パソコンの設定、ブレッド ボードで実験回路の構成、テストプログラムによる開発環境のテストを行いま す。