...

ソースブースト 6 - ソリトンウェーブ

by user

on
Category: Documents
6

views

Report

Comments

Transcript

ソースブースト 6 - ソリトンウェーブ
PIC®Microcontroller 用日本語 C コンパイラ
ソースブースト 6.0
ユーザーズマニュアル
リファレンスマニュアル
トレーニングキットマニュアル
2
総合目次
■ ユーザーズマニュアル
P.4
■ リファレンスマニュアル
P.42
■ トレーニングキットマニュアル
P.119
3
■ユーザーズマニュアル
4
ユーザーズマニュアル
ユーザーズマニュアル 目次
はじめに .............................................................................................................................. 7
クイックツアー.................................................................................................................... 7
新規プロジェクトのセット・アップ................................................................................ 7
ツール(コンパイラ)の設定........................................................................................... 8
外部ツールの設定 ............................................................................................................ 8
ターゲットデバイスの設定 .............................................................................................. 9
プロジェクトのビルド ..................................................................................................... 9
ソースブーストアーキテクチャ......................................................................................... 10
サポートするツール....................................................................................................... 10
ユーザーインターフェイス ............................................................................................ 10
ツールバー...................................................................................................................11
プロジェクトワークスペースウィンドウ ................................................................... 12
プロジェクト出力ファイル......................................................................................... 13
ブラウズデータ .......................................................................................................... 13
出力ウィンドウ .......................................................................................................... 14
ビルドページ .............................................................................................................. 14
検索ページ.................................................................................................................. 14
ターミナルページ....................................................................................................... 15
レジスタウィンドウ ................................................................................................... 15
ウォッチウィンドウ ................................................................................................... 16
スタックウィンドウ ................................................................................................... 16
メモリウィンドウ....................................................................................................... 17
EEPROMウィンドウ ................................................................................................. 17
コードウィンドウ....................................................................................................... 17
プロファイルウィンドウ ............................................................................................ 18
ステータスバー .......................................................................................................... 19
編集モード......................................................................................................................... 19
プロジェクト管理 .......................................................................................................... 19
クィックプロジェクト................................................................................................ 19
新規プロジェクト....................................................................................................... 19
プロジェクトウィザード ............................................................................................ 20
既存のプロジェクト ................................................................................................... 20
コード編集 ..................................................................................................................... 21
色の設定......................................................................................................................... 21
ホットキー ..................................................................................................................... 22
自動作成......................................................................................................................... 22
関数プロトタイプ .......................................................................................................... 23
カーソル上のファイル ................................................................................................... 23
5
ユーザーズマニュアル
カッコの対応.................................................................................................................. 23
ソース/ヘッダーの切り替え ........................................................................................... 23
ブックマーク.................................................................................................................. 24
折りたたみ ..................................................................................................................... 24
右クリックメニュー....................................................................................................... 25
プロジェクトの構築....................................................................................................... 26
ビルド......................................................................................................................... 26
コンパイル.................................................................................................................. 27
アセンブル.................................................................................................................. 28
プログラム.................................................................................................................. 28
シミュレート .............................................................................................................. 29
印刷および印刷プレビュー ............................................................................................ 29
デバッグモード .............................................................................................................. 30
実行中の行.................................................................................................................. 30
デバッグバー .............................................................................................................. 31
デバッグホットキー ................................................................................................... 32
ブレークポイント....................................................................................................... 32
ウォッチポイント....................................................................................................... 33
シンボル値の確認....................................................................................................... 33
プラグインシステム ................................................................................................... 33
付録 A: ソースブースト6.0シミュレータの特徴 ........................................................ 35
付録 B: ツール API ......................................................................................................... 37
付録 C: デバッガとシミュレータ API............................................................................. 37
付録 D: PICC Liteのソースブースト6.0セットアップ................................................ 37
付録 E: 過去のソースブースト6.0.............................................................................. 40
付録 F: ソースブースト6.0と他のコンパイラとツール .............................................. 40
購入情報 ............................................................................................................................ 40
Legal Information............................................................................................................. 41
6
ユーザーズマニュアル
はじめに
ソースブースト6.0 (統合開発環境)は Microchip Inc. PIC と Ubicom Inc. SX のための
低コスト開発環境です 。 ソースブースト6.0 は 先進的なエディタ、プロジェクトマ
ネジャ 、C、 C++ と Pascal クロスコンパイラ、Basic コンパイラ、プロジェクトウィザ
ード 、デバッガ、正確なクロックシミュレータおよび多くの仮想デバイスを含んでいます。
ソースブースト6.0 は作業の効率化のために設計されました。通常ソースブースト6.
0のインストールから、コンパイルされたコードがターゲットに対して実行されるまでの
所要時間は、わずか数分です。 ただし忘れてはならないのが、ソースブースト6.0はプ
ロジェクトでのみ作動するということです。もしファイルをひとつ作成するなら、そのフ
ァイルを含めたプロジェクトを作成しなければなりません。幸いソースブースト6.0は
簡単で、しかも高速に新規プロジェクトを作成することが可能です。
クイックツアー
ソースブーストの詳細を説明する前に、クイックツアーを御紹介します。以下は、ソース
ブーストで、プログラム開発を行う場合の、簡単な操作の流れです。
新規プロジェクトのセット・アップ
ソースブースト6.0でインストールされたサンプル・プロジェクトのひとつを開いてく
ださい。これらのサンプル・プロジェクトはソースブースト6.0をインストールしたデ
ィレクトリ(デフォルトであれば、c:¥Program Files¥Sourceboost)の Sample ディレク
トリにあります。.
7
ユーザーズマニュアル
ツール(コンパイラ)の設定
サンプルプロジェクトを開いたら、設定メニューのツールから、”BoostC”を選択します。
もし他のコンパイラを使用したい場合(たとえば BoostBasic など)は、 ツールの設定ダ
イアログから選択してください。 設定
ツールの設定メニューより選択可能です。
初期状態では、ソースブースト6.0は BoostC コンパイラを使用しています。 この新世
代 C コンパイラは、C 言語ソースファイルから、直接ターゲットのファイルを生成し、プ
ログラマ以外のアプリケーションは必要ありません。前世代の C2C-plus、C2C++ あるい
は P2C-plus といったコンパイラを使用する場合は、ソースブースト6.0の他に、アセン
ブラがインストールされている必要になります。また、他のツールを利用した、アセンブ
ラを必要とするファイルをコンパイルする場合も、アセンブラが必要となります。
外部ツールの設定
外部ツールの設定は、ソースブースト6.0オプションダイアログより設定可能です。外
部ツールへのコマンドラインパラメータの設定は、設定
オプションメニューをご利用く
ださい。
設定
オプションメニューのツールページでは、外部ツールのパスやコマンドラインオプ
ションを指定することができます。この機能は、コンパイルした HEX ファイルを使って、
デバイスにプログラムを書き込むために、デバイスプログラマを起動したい場合などに便
利です。
8
ユーザーズマニュアル
ターゲットデバイスの設定
次に、ターゲットプロセッサが正しく設定されているかどうかを確認してください。設定
されているターゲットデバイスは、ソースブースト6.0のステータスバーに表示されてい
ます。 必要があれば設定
対象デバイスメニューよりターゲットデバイスダイアログ内
を開き、変更することができます。
プロジェクトのビルド
ビルドを行う前に、ビルドオプションダイアログで、ビルドコマンドがコンパイルとリン
クを開始するか確認してください。ビルドオプションダイアログは 設定
ーより開くことができます。
画面のように設定されていれば、問題ありません。
9
ビルドメニュ
ユーザーズマニュアル
ソースを確認して、ソースブースト6.0ツールバーの、ビルドボタン
を押してくださ
い。この操作により、プロジェクトはコンパイル、アセンブルされます。また、ビルドオ
プションで、プログラマを選択していて、外部ツールに(SPWriter などの)プログラマを
設定している場合は、ビルドが終わると、設定されているプログラマを起動します。
これでプロジェクトはビルトされ、ターゲットプロセッサはプログラム済みとなります。
さあ、試してみましょう!
ソースブーストアーキテクチャ
ソースブーストは数々のコンポーネントによって構成されています。そのひとつにデバッ
ガやツール、プラグインを統合する IDE があります。またデバッガは、PIC16 もしくは
PIC18 シミュレータと、ツール類は、関連するコンパイラ、リンカ、及びアセンブラと連
携しています。
サポートするツール
ソースブースト6.0は、様々なツールをサポートする、汎用的な IDE として設計されま
した。ソースブースト6.0は、 新世代 BoostC C コンパイラを含み、BoostC で作成さ
れたコードのソースレベルでのデバッグをサポートします。 また、C2C-plus C コンパイ
ラ、 C2C++ C/C++コンパイラ、 P2C-plus パスカルコンパイラそして、HI-TECH Software
の PICC Lite C コンパイラなどが実行可能です。
ソースブースト6.0の、PICC Lite コンパイラセットアップへの詳しい情報につきまして
は、付録 D : PICC Lite コンパイラのためのソースブースト6.0のセットアップ をご
参照ください。
ユーザーインターフェイス
ソースブースト6.0は、さまざまな機能を実行するために、いくつかの専用ウインドウ
を持っています。これらのウィンドウは、ソースブースト6.0メインウィンドウ内、も
しくは任意のスクリーン上にあります。
10
ユーザーズマニュアル
ソースブースト6.0には、次の2つのモードがあります。
1)編集モード :プロジェクトのソースファイルを編集するモードです。
2)デバッグモード:デバッグセッションを開始する場合に起動します
これらのモードによって、ウィンドウの表示やレイアウトが異なります。例えば、レジス
タ、スタックウィンドウは、編集モードでは隠され、デバッグモードでのみ表示されます。
多くのウィンドウでは右クリックメニューが非常に頼もしい機能となります。しばしば右クリックメニューには、
メインメニューには存在しない機能もあるので、お見逃しなく。
ツールバー
ソースブースト6.0には、次のようなツールバーがあります。
新規ファイル作成。新しいファイルは保存されるまで syntax coloring されません。
ファイルを開く。
ファイルを保存する。
修正した全ファイルを保存する。
選択したところを切り取る。
選択したところをコピーする。
クリップボード内を貼り付ける。
ファイルを印刷する。
ワークスペースウィンドウを表示する/非表示にする。
アウトプットウィンドウを表示する/非表示にする。
プロジェクトをコンパイルする。このコマンドによりコンパイルダイアログで定められたアクションを開始しま
す。
プロジェクトをコンパイルする。
11
ユーザーズマニュアル
外部アセンブラを利用しプロジェクトをアセンブルします。外部アセンブラが指定されていない場合、このボタ
ンは灰色になります。
外部プログラマを起動します。外部プログラムが指定されていない場合、このボタンは灰色になります。
外部シミュレータを起動します。外部シミュレータが指定されていない場合、このボタンは灰色になります。
ソースブースト6.0についてのダイアログを表示する。
デバッガを起動します。ソースブースト6.0はデバッグモードに切り替わります。
カーソル上のブレークポイントをトグルします。ブレークポイントアセンブラファイルでのみ設定できます。
初期設定では、ツールバーはメインウィンドウ上部に設置されています。メインウィンドウの下部、左右部ま
たは外に設置することも可能です。
プロジェクトワークスペースウィンドウ
ソースブースト6.0には、プロジェクトファイル(プロジェクトが構成されるファイル)、
またはプロジェクトファイル内の、様々なシンボルを表示するブラウザとして、ワークス
ペースウィンドウがあります。
ウィンドウの下にあるタブを使って、ファイルビューと参照ビューを切り替えます。
ファイルを選択して、右クリックすると、ファイルを開く、ファイル削除、新規ファイル作成を選択するメニュー
が表示されます。
12
ユーザーズマニュアル
プロジェクト出力ファイル
出力フォルダ内のファイルは、コンパイラ、もしくは、アセンブラで生成
された出力ファイルです。
デフォルトでは、ファイルはプロジェクト名のデイレクトリに配置され、フ
ァイル拡張子は.asm、.lst と.hex となります。
出力フォルダリストに表示されるファイルを変更するには、ワークスペ
ースウィンドウ内の任意の場所で右クリックし、カスタマイズメニューを
選択してください。これを選択すると、出力フォルダ内のファイルをカン
マで区切ったリストが表示されます。ファイル名には、そのプロジェクト
ディレクトリ、もしくは関連したパスを含むことができます。
シンボル名の使用を推奨します。シンボル名はプロジェクト設定による値によって置き換えられます。
%name%
プロジェクト名(例: my_long_project_name)
%shortname%
短いプロジェクト名 (例: my_lon~1)
%target%
ターゲット名(例: PIC16F84)
%shorttarget%
短いターゲット名(例: 16F84)
ソースブーストインストールディレクトリ(例: C:¥Program Files¥sourceboost) アプリケーシ
%appdir%
ョン特定に使用する場合、ふるパスをダブルクォートで囲うと良いでしょう。(例:
"%appdir%¥ezdownloader.exe").
ブラウズデータ
ソースブースト6.0には、カレントプロジェクトで使用するシンボルを、自
動的にデータベース化するブラウザがあります。
プロジェクトがロード、もしくは、プロジェクト内のファイルが変更される
と、このデータベースは更新されます。
13
ユーザーズマニュアル
参照ウィンドウ内のシンボルをダブルクリックすると、このシンボルを定義したファイルを開く、もしくは、アク
ティブにします。
出力ウィンドウ
出力ウィンドウは 3 つのページから構成されています。ビルドページには、ソースブース
ト6.0からのメッセージを、検索ページには、ファイル内検索コマンドの検索結果を、
それぞれ表示し、ターミナルページは、シリアルポートでのデータ交換に使用します。
ビルドページ
このページには、コンパイル、アセンブル出力時の、エラーおよび警告メッセージや、そ
の他の必要な情報を表示します。
コンパイルエラーや警告をダブルクリックすると、ソースファイルで検索された場所が表示、もしくは、アクテ
ィブになります。
エラーと警告メッセージ間でのナビゲートには F4 を使用ください。
検索ページ
このページには、ファイルコマンドにある、検索コマンドの結果のリストが表示されます。
14
ユーザーズマニュアル
リスト中のアイテムをダブルクリックすると、 ソースファイル内で検索された場所が表示、または、アクティブ
になります。
ターミナルページ
これはシリアルポート・ターミナルです。このページでは、シリアルポートから受取った
データの表示と、シリアルポートへのデータ送信ができます。
ターミナルページはブートローダーと通信するときに使用します。
ターゲットコード内でデバッグプリントを使用したい場合、ターミナルページを使うと便利です。
レジスタウィンドウ
レジスタウィンドウは、カレントターゲットのレジスタを表示します。
レジスタの内容は、機能別にグループ化されます。 このウィンドウ
は、デバッグモード でのみ機能し、ターゲットレジスタの値を表示
します。 各値の書式は右クリックで表示されるメニューによって変
更可能です。 デフォルトのレジスタ値は黒く表示され、デバッグ中
に変更されたものは青く表示されます。レジスタ値の変更は、変更
したい値の上をクリックし、新しい値を入れて、Enter キーを押す
か、任意の場所をクリックしてください。レジスタ内でウォッチポイ
ントを設定するには、右クリックで表示したメニューを、使用しま
す。 設定されたウォッチポイントは、レジスタ名の左上の角に小さ
な赤い点として表示されます。
15
ユーザーズマニュアル
全レジスタのフォーマットを変更する際、右クリックメニューからフォーマット選択時に Ctrl キーを押し続けて
ください。
レジスタの分類を変更するには、.TDF ファイルを編集してください。TDF ファイルはソースブースト6.0がイ
ンストールされたディレクトリの、config サブディレクトリにあります。
ウォッチウィンドウ
ウォッチウィンドウ機能は、デバッグモードでのみ使用可能です。デバ
ッグ中のコードから、さまざまなシンボル値を表示するために使用しま
す。新しいウォッチを追加するには、右クリックで表示されたメニューか
ら、ウォッチの追加を選択してください。 新しいウォッチのシンボルが
指定されている場所で、クイックウォッチダイアログを開きます。同様
に、既存のウォッチは、右クリックして表示したメニューの編集アイテム
を選択して編集します。このダイアログに入力するには、ドロップダウン
リストから選択して指定できます。
全ウォッチのフォーマット変更の際、右クリックメニューからフォーマット選択時、Ctrl キーを押し続けてくださ
い。
レジスタウォッチを追加する際、$マークをレジスタ名の前に置いてください。レジスタナンバへ、ウォッチを
追加する際も、10進レジスタアドレスの前に$マークを置いてください。
スタックウィンドウ
スタックウィンドウ機能は デバッグモード でのみ使用可能です。ター
ゲットのハードウエアスタックの内容を表示します。
16
ユーザーズマニュアル
リスト中のアイテムを実行する際、もしくはソースファイル内の関連するロケーションを実行する際、それらを
ダブルクリックしてください。
メモリウィンドウ
メモリウィンドウ機能は、 デバッグモードでのみ、カレントター
ゲットのレジスタマップを表示します。 デフォルトのレジスタ値
は黒色で表示されますが、デバッグ中に変更された場合は、背
景色が水色になり、その後ユーザによって値が変更された場合
は、背景色が緑色になります。レジスタ値を変更するには、修
正したい値をクリックし、新しい値を入力し、Enter キーを押す
か、任意の場所をクリックします。レジスタにウォッチポイントを
追加するには、右クリックで表示されたメニューを使用してくだ
さい。ウォッチポイント の場所は、レジスタ値の左隅に小さな赤
いドットが表示されます。 現在のターゲットで実装されていな
いレジスタは背景色がグレーになっています。
EEPROM ウィンドウ
EEPROM ウィンドウは デバッグモード でのみ機能し、
ターゲットの EEPROM マップを表示します。
初期状態では、EEPROM 数値は黒く表示されています
が、値が変化した場合は、背景は青色になります。また
数値に変更があった場合、背景は緑色になります。
EEPROM 数値を編集する場合、値をクリックし、新しい
数値を入力し Enter を押すか、クリックしてください。
コードウィンドウ
コードウィンドウは、プロジェクトのファイルを表示しま
す(存在する場合)。デバッグモード中は、コードウィンド
ウや、関連するソースウィンドウで、実行ラインが表示
されます。アセンブリレベルで、全ステップコマンドが
実行可能です。
ツールスイートは、コールツリーやコード/メモリーデータの情報を表示するためにタブを
17
ユーザーズマニュアル
追加します。
ソース混合アセンブリ
コールツリープログラム
関数のコード/メモリ使用
現時点では BoostC ツールのみが、コールツリーとコード/メモリ使用データを作成します。
プロファイルウィンドウ
プロファイル・ウィンドウ機能は、デバッグモ
ード でのみ使用でき、実行中にすべてのア
センブラ・ラベルでヒットした回数を、グラフと
数式のフォームで表示します。
リスト中のアイテムを実行する際、もしくはソースファイル内の関連するロケーションを実行する際、それらを
ダブルクリックしてください。
Ctrl キーを押しながらウィンドウをドラッグすると、ドッキングするのを防げます。どうぞお試しください。
18
ユーザーズマニュアル
ステータスバー
ステータスバーは、カレントラインなど、カラムについてのさまざまな IDE ステータス情
報や、入力モード(挿入または上書)、最終のリセットからの経過時間などを表示します。
編集モード
編集モードはソースブースト6.0のデフォルトのモードです。ソースブースト6.0を
開始すると編集モードが開きます。 このモードで、プロジェクトの作成、開始や、コード
の編集、コンパイル、そして、外部ツールの開始などを行います。
プロジェクト管理
ソースブースト6.0はプロジェクト単位で動作します。 プロジェクトはソースファイル
の集合や、ファイルをコンパイルする方法のルールなどの情報で構成されます。 ソースフ
ァイルが 1 つしかなくても、プロジェクトを作成しなければなりません。ソースブースト
6.0には、さまざまな新規プロジェクトの作成方法があります。
クィックプロジェクト
クィックプロジェクトの作成は、プロジェクトが 1 つのソースファイルのみの場合に使用
します。 このモードでは、1 つのソースファイルのみ選択でき、作成されるソースファイ
ルと同じ名前のプロジェクト名が作成され、ソースブースト6.0の内部で開かれます。 こ
のプロジェクトは最新選択ターゲットに対して作成されます。
新規プロジェクト
これは新規にプロジェクトを作成する通常の方法です。 新しいプロジェクトを作成するデ
19
ユーザーズマニュアル
ィレクトリを選択した後、 名称が空白のプロジェクトが作成されます。
このプロジェクトへファイルを追加するには、プロジェクトメニュー、もしくは、ワーク
スペースウィンドウの右クリックでメニューを開き、ファイルの追加を選択します。
プロジェクトウィザード
このモードでは、新しいプロジェクトが、プロジェクトウィザードで選択されたテンプレ
ートから作成されます。作成されたプロジェクトは、すぐにターゲットをコンパイルして、
実行できます。
既存のプロジェクト
既存のプロジェクトは、ファイルの追加、または、削除などの編集をすることができます。
C だけでなく、CPP または H ファイルをプロジェクトに追加することが可能です。ほかのタイプのファイルも、
テキスト形式であれば全て追加可能です。例:readme.txt
IDE のスタートアップ゚中にデフォルトで前のセッションから、最後に開いたプロジェクトをロード゙します。この
動
作
は
、
レ
ジ
ス
ト
リ
内
の
HKCU¥Software¥SourceBoostIDE¥IDE¥Project
か
、
HKLM¥Software¥SourceBoostIDE¥IDE¥Projec の、'Load Last Project'の値が0の場合では無効です。IDE ス
タートアップの、最後のプロジェクトのロードを有効にするには、レジストリレコードを削除するか、値を 1 に設定し
て下さい。
20
ユーザーズマニュアル
デフォルトでは、現在開いているプロジェクトのディレクトリ内で、プロジェクトのダイアログ゙を開きます。デフ
ォルトでプロジェクトを開くディレクトリを書き換えるには、HKCU¥Software¥SourceBoostIDE¥IDE¥Project か、
HKLM¥Software¥SourceBoostIDE¥IDE¥Project の、'Default Project Dir' の値を、開きたいプロジェクトダイア
ログ゙のディレクトリ文字列の値に設定してください。
コード編集
このエディタは、とてもシンプルに設計されています。色の設定、行の字下げ、ホットキ
ー、ドラッグアンドドロップ、ほぼ無制限の取消しとやり直し、自動作成、関数プロトタ
イプの呼び出しチップなどをカスタマイズできることが特徴です。
色の設定
開いたドキュメントファイルの色は、その拡張子に基づいています。拡張子が、.C、.CPP
または.H のファイルは、C 言語のファイルとして、デフォルトで色が設定されます。
拡張しが ASM、.S または .LST ファイルは、アセンブリファイルとして色が設定されます。
他のファイルには色は設定されません。現在の色の設定や、フォント、他のエディタパラ
メータは、エディタ設定ダイアログで設定を変更できます。 (メインメニューの「設定」
「エ
ディタ」)
21
ユーザーズマニュアル
ホットキー
エディタのホットキー(さまざまな編集コマンドを開始する、キーの組み合わせ)を使用する
と、コード編集がとても容易になります。ソースブースト6.0は、いくつかの独自のエ
ディタ・ホットキーと同様に、ほとんどの標準ホットキーもサポートします。エディタ・
ホットキーは、以下の通りです。:
Ctrl+Ins
コピー
Shift+Ins
貼り付け
Tab
現在の行、または、選択した複数の記号を右にシフトします。
Shift+Tab
現在の行、または、選択した複数の記号を左にシフトします。
Ctrl+F
指定したダイアログを開きます。
Ctrl+H
移動したダイアログを開きます。
Ctrl+G
進んだ行のダイアログを開きます。
Ctrl+Z
前に戻ります。
Ctrl+Y
やり直します。
Ctrl+Space
自動作成します。
Ctrl+Shift+L
カーソル位置のラインを削除します。
Ctrl+Shift+R
マクロを記録します。
Ctrl+Shift+P
前回記録されたマクロを再生します。
Ctrl+]
挿入記号を合うブレースに移動します。
Ctrl+Mouse Wheel
ウィンドウ内のフォントサイズを変更します。
自動作成
自動作成は、その場所に入力可能な、シンボルリストを表示するエディタ機能です。
ソースブースト6.0で自動作成を起動するには、Ctrl+を押すと、シンボルからデータベ
ースを読み、入力した一部と一致するシンボルの行を表示します。
22
ユーザーズマニュアル
関数プロトタイプ
現在のヘッダファイル内の、プロトタイプで設定された関数を編集中の場合、ツールチッ
プは関数プロトタイプと、強調表示したパラメータを表示します。
プロジェクトにヘッダファイルが追加されていることをよく確認してください。
カーソル上のファイル
カーソル上にファイル名がある場合、右クリックで表示されるメニューによって、エディ
タにこのファイルを開くアイテムを表示します。
ファイルを#include ディレクティブから開く際に効果的です。
カッコの対応
キャレットが片方のカッコの後ろに位置したとき、このカッコと、対応するカッコの両方
がハイライトされます。 Ctrl+]を押すことにより、キャレットを対応するカッコに移動し
ます。
ソース/ヘッダーの切り替え
編集されるソース/ヘッダファイルが対になっている場合、右クリックで表示されるメニ
ューによって、これらを切り替えることができます。
23
ユーザーズマニュアル
ブックマーク
大きなファイル内を瞬時に移動する場合、ブックマークが使用できます。現在の行にブッ
クマークを設定するには、Ctrl+F2 を押します。次のブックマークへジャンプするには、
F2 キーを、前のブックマークにジャンプするには、Shift+F2 を押します。
折りたたみ
折りたたみ機能は、ソースを読みやすくするため、ソースの一部をそのまま折りたたむ機
能です。下の図では rc232.c サンプルコードで、printf を除く全ての機能が折りたたまれて
います。折りたたみ機能は エディタ設定ダイアログで設定可能です。
折りたたみマージンを Ctrl と Shift キーを押したままクリックすると、全折りたたみポイントを、拡張もしくは縮
小します。
折りたたみ機能は C、 C++または Pascal といった高レベル言語でのみ使用可能です。アセンブラやテキス
トファイルでは利用できません。
24
ユーザーズマニュアル
右クリックメニュー
ソースウィンドウの右クリックメニューは、作業をより効率的にするための多くの便利な
アイテムが備えられています。コピー&ペーストといった基本的なオプション以外にもこ
のメニューには以下のメニューを備えています。
•
検索や置き換えダイアログへのアクセス
•
カーソル位置の言葉の定義への移動。もし選択した言葉の定義が別ファイルに存在
していた場合でも実行可能です。
•
ファイル内のラベルやシンボルへの移動。
•
デバッグモード中のカーソル位置の言葉をウォッチウィンドウへ付け足し (この
メニュー選択中は、クィックウォッチダイアログ表示のため Ctrl を押してくださ
い。)
•
関数リストへのアクセス ( C または C++ファイルの場合)。またはラベルへのアク
セス (ASM ファイルの場合)。
Ctrl ボタンを押したまま右クリックメニューを呼び出した場合、メニューは C または C++ファイルのファンクシ
ョンと ASM ファイルのラベルになります。
25
ユーザーズマニュアル
プロジェクトの構築
ソースブースト6.0は外部のツールと共に実行可能です。 BoostC コンパイラは、外部
ツール無しで、C ソースコードを直接.HEX ファイルに変換します。 C2C-plus または
C2C++ コンパイラは、C または C++コードを、アセンブリ言語へとコンパイルし、P2C-plus
コンパイラは、パスカルコードをアセンブリ言語へとコンパイルします。そしてこれらの
アセンブリ言語ファイルは、ターゲットにプログラムされるデータ(通常 HEX ファイル)へ
とコンパイルされます。 ソースブースト6.0には、アセンブラは付属しませんので、外
部のアセンブラを使用しなければなりません。アセンブラは、MPLAB 付属の MPASM な
ど、フリーのアセンブラがありますので、そちらをご利用下さい。なお、PIC ターゲット
推奨アセンブラは、Microchip 社の MPLAB の一部である MPASM と、GPUTILS の一部
である GPASM になります。また、ソースブースト6.0は、HI-TECH Software の PICC
Lite コンパイラもサポートしています。
ソースブースト6.0はプログラミングアプリケーションも含みません。外部プログラミ
ングアプリケーションは、コマンドパラメータとしてインプットファイルを起動すること
ができるものが便利です。SPWriter は、ソースブースト6.0と協調して動作するよう、
設計されていますので、プログラミングアプリケーションには、SPWriter を推奨していま
す。なお、外部シミュレータに関しても、同様に、コマンドパラメータで、起動時に読み
込むファイルを指定できる物が便利です。
ソースブースト6.0ビルトインデバッガとシミュレータを、外部シミュレータと混同しないでください。
ビルド
ビルドは、ひとつの操作で複数の動作を実行します。ビルドボタンをクリックすると、実
行するコンパイル、アセンブラ、プログラム、そしてシミュレートの順にコマンドが動作
します。ビルドダイアログにチェックされた操作だけが動作します。
ソースブースト6.0を起動し、プロジェクトのビルドを行います。ユーザがビルドを実
26
ユーザーズマニュアル
行すると、ソースブースト6.0はビルドダイアログで指定された動作を行うメイクファ
イルを作成し、メイクを実行します。メイクコマンドは、入力および出力ファイルのタイ
ムスタンプを、それぞれのルールに従って比較し、出力ファイルよりも入力ファイルの方
が新しい場合のみ、そのルールに従った動作を実行します。それゆえ、プロジェクトが既
にコンパイルされていて、ソースが変更されていない場合は、ビルドコマンドを実行して
も、コンパイルは行われません。
例え幾つかのプロジェクトファイルが処理不要でも、全プロジェクトをリビルドしてしまった方が良い場合もあ
ります。プロジェクトビルドを実行する場合、Ctrl+F7 ホットキーまたは Ctrl+build コマンドを利用ください。
ここでのシミュレートオプションは、ソースブースト6.0デバッガとシミュレータではなく外部のシミュレータを
呼び出します。ソースブースト6.0デバッガとシミュレータは、ツールバー上のデバッグボタンを押すことによって
起動します。
コンパイル
コンパイルとは、C もしくは、C++コードをアセンブリファイルに変換することです。アセ
ンブリコードに生成された内容は、コンパイルや最適化オプションに依存します。
デフォルトオプションでは、すべてのプロジェクトが動作しますが、内容にあった設定に
することが有効な場合もあります。
27
ユーザーズマニュアル
アセンブル
このコマンドは、オプションダイアログで指定したコマンドラインで、設定された外部ア
センブラを開始します。
C2C-plus、C2C++そして P2C-plus 言語ツールは、
コンパイラが hex ファイルを生成するため、外部の
アセンブラが必要です。外部アセンブラとしては、
通常は MPLAB の MPASM を使用します。初期状態
でインストールされているとすると、このアセンブ
ラに推奨するコマンドラインオプションは、以下の
ものになります。
C:\PROGRA~1\MPLAB\MPASMWIN.EXE
/aINHX8M
/p%target% /rHEX /w2 /q
ファイルへのパスにスペースが含まれた場合、アセンブラの周りにダブルクオートを忘れないでください。
例:"C:\Program Files\MPLAB.6.30\MCHIP_Tools\MPASMwin.EXE" /aINHX8M /p%target% /rHEX /w2 /q
プログラム
このコマンドは、オプションダイアログで指定したコマンドラインが利用している外部プ
ログラムアプリケーションを起動します。
プログラマコマンドラインは、どのソフトウェアを使用するかによって異なります。ここではその例を紹介しま
す。
SPWriter(推奨):
C:\Program Files\SPWriter\SPWriter.exe /p%target% %name%.hex
DM プログラマ:
C:\DOCUME~1\Yod\Desktop\winpic\WinPic.exe /p / device=%target% /q
pp06 プログラマ:
ppwin -! -hw 6 -lax
IC-Prog プログラマ:
C:\Pic\PROGRA~1\icprog.exe -l%name%.hex -f3F32 -p -q -i -v
sxtips または sxdev プログラマ:
"C:\Program Files\ソースブースト\SXTIPS\SX_TIPS.EXE" 2 P.EXE
or
28
ユーザーズマニュアル
sx_tips.exe \2\p
PBrenner 3.2u プログラマ:
"c:\programme\pbrenner\PBrenner32u.exe" /P%shorttarget% /F%name%.hex /A
Quasar Electronics All Flash USB プログラマ:
Micropro.exe %name% %target% /f /Q
Picall プログラマ:
C:\PICALL\PICALLW.EXE %name%.hex -e -p -v -x -d%target%
プログラマソフトウェアへのパスを変更する必要もあるかもしれません。またプログラム名やパスにスペースが含
まれる場合、プログラムファイル前後にダブルクォートを付加するのを忘れないでください。
シミュレート
このコマンドは、オプションダイアログで指定したコマンドラインが利用している外部シ
ミュレータアプリケーションを起動します。
印刷および印刷プレビュー
ソースブースト6.0は、ファイルメニューからプリンタへ印刷することができます。
ユーザーは、ヘッダーとフッターが表示できるように、設定したマージンを印刷すること
ができます。
29
ユーザーズマニュアル
デバッグモード
ソースブースト6.0には、ビルトインソースとアセンブラレベルのデバッガ、正確な時
刻シミュレータが組み込まれています。ステッピングはツールによって異なります。BoostC
ツールはソースレベルでのデバッグをサポートします。PICC Lite ツールも同様です。
C2C-plus、C2C++ そして P2C-plus ツールはアセンブリレベルでのステッピングのみサポ
ートします。
デバッグセッションはデバッグボタンを押すことによって開始します。詳しいことに関し
てはツールバーを参照ください。このコマンドはビルトインデバッガとシミュレータの開
始、プロジェクト HEX ファイルのダウンロード、ターゲットのリセット、そしてデバッグ
モードウィンドウレイアウトをダウンロードします。
デバッグセッションはホットキーによっても開始・停止が可能です。
F5
デバッグセッションを開始しプログラムを実行する
F10 or F11 or F12 デバッグセッションは開始するがプログラムは実行しない
Shift+F5
実行停止しデバッグセッションを終了する
デバッグセッションはプロジェクトがコンパイル、そしてアセンブラ化されたもののみ開始できます。
実行中の行
実行中の行は、緑色で強調表示されます。
30
ユーザーズマニュアル
デバッグバー
デバッグバーは、ソースブースト6.0がデバッグモード中に表示されます。 デバッグバ
ーのボタンは、それぞれのデバッグコマンドにマッピングされています。
ステップオーバ
ー
ステップイン
ステップアウト
カレントインストラクションを実行します。カレントインストラクシ
ョンがインストラクションを呼び出す場合、デバッガは一時中断して
いますが、呼び出しが終了するまで実行を待ちます。
カレントインストラクションを実行します。
インストラクションが実行し呼び出してから戻るまで、インストラク
ションを実行します。
現在の場所から前ターゲットまで戻ります。
ステップバック
このコマンドは、ソースブースト6.0のためのものであり、他のデバッガでは
利用できません。
実行
停止
リセット
実行を続けます。
実行を止めます。このコマンドは、ターゲットを実行している時のみ
有効です。
ターゲットをリセットします。
ターゲットのプロファイルをアクティブにします。
プロファイル
プロファイル ウィンドウが表示されていることを確認してください。
スナップショッ レジスタ、メモリ、 スタック そして ウォッチ ウィンドウを更新し
ト
ます。このコマンドは、ターゲットが実行している時のみ、有効です。
31
ユーザーズマニュアル
デバッグホットキー
デバッグホットキーはデバッグをより効率的にします。これらのホットキーの、いくつか
の機能は、デバッグバーと同様ですが、いくつかは固有の機能です。
F5
コード実行を続行します
Ctrl+F5
コードをカーソルもしくは最初のブレークポイントへと移動します
Shift+F5
デバッグモードを終了します
F10
ステップオーバします
Ctrl+F10
アセンブリレベルでのステップオーバします
F11
ステップインします
Ctrl+F11
アセンブリレベルでのステップインします
Shift+F11
ステップアウトします
F12
ステップバックします
ブレークポイント
ブレークポイントは、アセンブリ言語のインストラクションを含む.asm ファイルのどの行
にも追加することができます。ブレークポイントが必要な行にカーソルを移動し、ツール
バーにあるブレークポイントボタンか F9 キーを押してください。設定されているブレーク
ポイントのリストを見る場合は、表示メニューを使用するか、Ctrl+B を押してください。
ブレークポイントリスト上のブレークポイントをダブルクリックしてください。ソースファイル内のラインにブレー
クポイントが設置されます。
32
ユーザーズマニュアル
ウォッチポイント
ウォッチポイントは、レジスタ値が変更された場合に、プログラムを停止します。レジス
タにウォッチポイントを設置する場合、 レジスタウィンドウまたはメモリウィンドウ に
設置されます。
シンボル値の確認
シンボル値をすぐに確認したいときは、そのシンボルの上で、1.5 秒以上マウスポインタを
保持します。
シンボル値は、シンボルの近くのツールチップに表示されます。
プラグインシステム
ソースブースト6.0は、各プラグインが、ターゲットにコネクトされた物理デバイスを
エミュレートする拡張機能を持ったプラグインシステムが特徴です。
標準インストールには、以下のプラグインの一部が含まれています。
シングル LED
8LED のブロック
シングルボタン
8 ボタンのブロック
33
ユーザーズマニュアル
7 セグメントと 12 セグメント表示
コード実行速度を計るためのスピードテスタープラグイ
ン
全てのプラグインは、ターゲットポートに接続されます。ターゲットが実行中のときは、
各プラグインが接続されているポートの変更を基に状態を変更します。
ポートの値は、プラグインによって変更できます。(例えば、ボタンプラグインは、接続さ
れているピンの値を変更します。)
プラグインが接続されている、もしくは、プラグインが設定されているポートを変更する
場合は、プラグインのコンフィグレーションダイアログを表示するために、プラグインを
右クリックし、設定を行います。
いくつかのプラグインはシミュレーションクロックレートに依存します。これは 設定
クロック周波数 メニュー内のクロック周波数ダイアログ によって変更可能です。
より詳しい情報と追加プラグインに関する詳細はプラグインシステムのヘルプファイルを
ご参照ください。
34
ユーザーズマニュアル
付録 A: ソースブースト6.0シミュレータの特徴
最新のソースブースト6.0 PIC16・PIC18 シミュレータは、以下の PIC マイクロコントローラのハードウェアデバイ
スをサポートしています。
1.PIC16
PIC16 のインストラクションコアには以下のものが含まれます。
・ ALU
・ W レジスタ
・ STATUS レジスタ
・ プログラムカウンタ
・ FSR レジスタ
・ RAM ファイルレジスタ
・ スタック
割り込みコントロールには以下のものが含まれます。
・ 多様な割り込みのソース
・ 正確な割り込み待ち時間
EEPROM には全ての実行状態で以下のものが含まれます。
・ 連続したプログラムが正確に施行されない場合の書き込み失敗
PIC16F877A とその互換性のあるタイプの A/D コンバータには以下のものが含まれます。
・ アナログソースの選択
・ ボルテージ関連の選択
Timer1(16 ビットタイマ/カウンタ)には以下のものが含まれます。
・ 内部クロックソース
・ 外部クロックソース
・ CCP1 と CCP2 とのインタラクション
Timer2(8 ビットタイマ/カウンタ)には以下のものが含まれます。
・ 内部クロックソース
・ CCP1 と CCP2 とのインタラクション
CCP1 と CCP2(キャプチャとコンペア 1 と 2)には以下のものが含まれます。
・ キャプチャモード
・ PWM モード
PortA( I/O ポート)は全実行状態で以下のものが含まれます。
・ シンクのみ RA4 カレント
・ アナログインプット可能 (A/D コンバータにサポートされたデバイスのみ)
PortB ( I/O ポート)は全実行状態で以下のものが含まれます。
・ RB0 のインタラプト
・ インタラプトの状態の変更
・ 弱いプルアップ
PortC ( I/O ポート)は全実行状態で以下のものが含まれます。
・ 周辺装置の入/切機能
・ PortD ( I/O ポート)は全 I/O ポートを実装しています。
・ PortE ( I/O ポート)は全 I/O ポートを実装しています。
・ PortF ( I/O ポート)は全 I/O ポートを実装しています。
・ PortG ( I/O ポート)は全 I/O ポートを実装しています。
関連する制限事項
・ EEPROM は、書き込み時間が正確ではない場合もあります。
・ Timer 1 は外部発振器をサポートしていません。推奨コンポーネントを接続する方法は現在ありません。外部
クロックモードは、サポートしています。
・ PortF は、実際のデバイスとしてではありませんが、PortC のモデルとされた電気的インターフェイスです。
・ PortG も、実際のデバイスとしてではありませんが、PortC のモデルとされた電気的インターフェイスです。
・ サーキットプログラムポートのシミュレーションはサポートしていません。
・ A/D コンバータは、16F877A と、それと互換性のあるデバイスのみサポートしています。
・ 変換にかかる時間は正確ではない場合もあります。
・ A/D バリュー変換レジスタによる早すぎる読み込みは、実際のデバイスと同様の結果をもたらしません。
35
ユーザーズマニュアル
2.PIC18
PIC118 のインストラクションコアには以下のものが含まれます。
・ ALU
・ W レジスタ
・ STATUS レジスタ
・ プログラムカウンタ
・ FSR0、FRS1、FSR2 レジスタ
・ RAM ファイルレジスタ
・ スタック
・ ROM 読み込みのためのテーブルポインタ
・ 複数のハードウェア
インタラプトコントロールには以下のものが含まれます。
・ インタラプトの複数のソース
・ インタラプトの優先順位
・ 正確なインタラプト待機時間
・ PortB の全インタラプト
Timer0(タイマ/カウンタ)には以下のものが含まれます。
・ 内部クロックソース
・ 外部クロックソース
・ 8/16 ビットモード
・ 優先順位によるインタラプトレベル
PortA ( I/O ポート)は全実行状態で以下のものが含まれます。
・ シンク RA4 カレント
PortB ( I/O ポート)は全実行状態で以下のものが含まれます。
・ RB0 のインタラプト
・ インタラプトの状態の変更
・ 弱いプルアップ
・ PortC ( I/O ポート)は全 I/O ポートを実装しています。
・ PortD ( I/O ポート)は全 I/O ポートを実装しています。
・ PortE( I/O ポート)は全 I/O ポートを実装しています。
・ PortF( I/O ポート)は全 I/O ポートを実装しています。
・ PortG ( I/O ポート)は全 I/O ポートを実装しています。
関連する制限事項
・ EEPROM はサポートされていません。
・ A/D コンバータはサポートされていません。
・ Timer 1、Timer2、Timer3 はサポートされていません。
・ CCP はサポートされていません。
・ スリープモードはサポートされていません。
・ ROM テーブルの書き込みはサポートされていません。
・ PortC から PortL までは、実際のデバイスではありませんが、PortC のモデルとされた電気的インターフェイス
として存在します。
・ PortC から PortL までは、スペシャルファンクションはサポートされていません。
・ USART ははサポートされていません。
・ インサーキットプログラムポートのシミュレーションは、はサポートされていません。
・ CAN バスインターフェイスははサポートされていません。
・ USB インターフェイスははサポートされていません。
・ Clock PLL はサポートされていません。
・ アナログピンはサポートされていません。
・ その他の周辺装置はサポートされていません。
36
ユーザーズマニュアル
付録 B: ツール API
ソースブースト6.0は可能な限りツールを使用せず、単独で実行できるよう設計されて
います。どのツールも確実に定義された API を含む DLL から成り立っています。この API
は通常共有不可となっておりますが、 ソースブースト6.0とツールを統合することによ
ってそれを可能にしています。
付録 C: デバッガとシミュレータ API
ソースブースト6.0パッケージには IDE、デバッガ、シミュレータがあります。また、
それらは論理的にも物理的にも分けられ、定義された API と接続することが可能です。そ
のような分割は、今後どのシステムでも拡張する際、非常に順応性のあるものとなります。
例えば、 ICD サポートをソースブースト6.0に付加することによって、シミュレータ
DLL を一方より シミュレータ API を実行し、他方より ICD ハードウェアを伝達すること
の可能な他の DLL と置き換えることが必要になります。その際どの IDE もデバッガの変
更も必要はありません。もうひとつの例は、gnu ツール(gcc, gdb など) のソースブースト
6.0への統合です。これにはデバッガ DLL を gdb に伝達する DLL の置き換えと、コン
パイラを管理する DLL ツールの書き込みが必要になります。この API は通常共有不可とな
っておりますが、 ソースブースト6.0とツールを統合することによって可能にしていま
す。
付録 D: PICC Lite のソースブースト6.0セットアップ
PICC Lite は 16F877, 16F877A, 12F675, 12F629, 16F627, 16C84, 16F84 そして 16F84A
デバイスをサポートする HI-TECH Software 社のフリーウェア C コンパイラです。
PICC Lite コンパイラは http://www.htsoft.com/products/piclite/よりダウンロード可能で
す。
ソースブースト6.0には、PICC Lite コンパイラのためのサンプルプロジェクトが含まれ
ています。サンプルプロジェクトは、ソースブースト6.0がインストールされている デ
ィレクトリの Samples¥Picc.Lite サブディレクトリ内にあります。(初期状態のソースブー
スト6.0インストールディレクトリは C:¥Program Files¥sourceboost にあります。)
サンプルを開くには、プロジェクトメニューから、「プロジェクトを開く」を選択してくだ
さい。
37
ユーザーズマニュアル
次に、ソースブースト6.0がインストールされているディレクトリから、
Samples¥Picc.Lite サブディレクトリへとナビゲートしてください。
.
プロジェクトを開いたら、PICC Lite ツールが選択されているか確認してください。そして
設定
ツール メニューに移動してください。
次に Picc Lite を選択してください。
IDE が PICC Lite コンパイラを起動するパスを確認してください。
設定
オプション メニューに移動してください。
38
ユーザーズマニュアル
オプションダイアログ内のツールタブを選択し、コンパイラフィールドの PICC Lite コン
パイラへのフルパスを入力してください。
これで、PICC Lite コンパイラの準備は完了です。
PICC Lite を使って、プロジェクトを編集、ビルド、デバッグすることができます。
39
ユーザーズマニュアル
付録 E: 過去のソースブースト6.0
ソースブースト6.0は、バージョン 5.0 では、ピカント C として販売されていました。
このプログラムは、様々なツールで稼動する、一般的な IDE プログラムとして設計された
ため、その名前もより一般的に、かつ発展傾向を反映し、サポートされたツールとの関連
性を連想させないものに変更いたしました。
付録 F: ソースブースト6.0と他のコンパイラとツール
ソースブースト6.0のモジュラアーキテクチャは。他のコンパイラやデバッガ、シミュ
レータを、容易に、かつ高速に統合可能です。
購入情報
ソースブースト6.0、C2C-plus、C2C++ そして P2C-plus コンパイラは、試用期間(通
常 15 日間)のあるシェアウェア製品として配布しております。
試用期間終了後、PIC16F84 ターゲットのみがサポートされます。 他のターゲットのロッ
クを解除するには、ソースブースト6.0の他にもうひとつコンパイラをご購入していた
だかなくてはなりません。ご購入方法は、こちら http://www.solitonwave.co.jpのページか、
もしくは [email protected]までメールをお送りください。ご購入登録後、製品のロ
ック解除のキーを、メールにてお送りいたします。
40
ユーザーズマニュアル
Legal Information
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY
TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
THE AUTHOR RESERVES THE RIGHT TO REJECT ANY LICENSE (REGISTRATION) REQUEST
WITHOUT EXPLAINING THE REASONS WHY SUCH REQUEST HAS BEEN REJECTED. IN CASE
YOUR LICENSE (REGISTRATION) REQUEST GETS REJECTED YOU MUST STOP USING THE
SOURCE BOOST IDE, BoostC, C2C-plus, C2C++ and P2C-plus COMPILERS AND REMOVE THE
WHOLE SOURCE BOOST IDE INSTALLATION FROM YOUR COMPUTER.
Microchip, PIC and PICmicro are registered trademarks of Microchip Technology Inc.
Ubicom and SX are registered trademarks of Ubicom Inc.
HI-TECH and PICC Lite are registered trademarks of HI-TECH Software
Other trademarks and registered trademarks used in this document are the property of their respective
owners
Copyright 2003-2005 Pavel Baranov
Copyright 2003-2005 David Hobday
41
リファレンスマニュアル
■リファレンスマニュアル
42
リファレンスマニュアル
リファレンスマニュアル 目次
はじめに ............................................................................................................................. 46
プリプロセッサ ............................................................................................................... 47
コンパイラ ...................................................................................................................... 47
ライブラリアン ............................................................................................................... 47
リンカ ............................................................................................................................. 48
C2C コンパイラモデルとの違い................................................................................. 48
C 言語 ................................................................................................................................ 48
プログラム構造 ............................................................................................................... 48
データタイプ................................................................................................................... 49
ROM ...............................................................................................................................49
Volatile ........................................................................................................................... 50
スタティック................................................................................................................... 50
構造体と共用体 ............................................................................................................... 50
Typedef ........................................................................................................................... 50
Enum .............................................................................................................................. 50
コードサイズとデータタイプ.......................................................................................... 51
定数................................................................................................................................. 51
文字列 ............................................................................................................................. 52
変数................................................................................................................................. 52
レジスタマップ変数........................................................................................................ 52
ビットアクセス ............................................................................................................... 53
配列................................................................................................................................. 53
ポインタ.......................................................................................................................... 53
関数引数の文字列 ........................................................................................................... 53
演算................................................................................................................................. 54
演算子 ............................................................................................................................. 54
条件式 ............................................................................................................................. 55
ループ ............................................................................................................................. 55
インラインアセンブラ .................................................................................................... 55
ユーザデータ................................................................................................................... 56
プラグマ.......................................................................................................................... 56
DATA........................................................................................................................... 56
CLOCK_FREQ ........................................................................................................... 57
OPTIMIZE.................................................................................................................. 57
インライン関数 ............................................................................................................... 58
特別な関数 ...................................................................................................................... 58
関数と割り込み ............................................................................................................... 59
43
リファレンスマニュアル
ダイナミックメモリマネジメント .................................................................................. 60
C言語スーパーセット ..................................................................................................... 60
関数の引数の参照........................................................................................................ 60
関数のオーバーロード................................................................................................. 61
関数テンプレート........................................................................................................ 62
システムライブラリ........................................................................................................ 62
clear_bit.......................................................................................................................... 63
set_bit ............................................................................................................................. 64
test_bit ........................................................................................................................... 65
MAKESHORT................................................................................................................ 66
MAKESHORT................................................................................................................ 67
LOBYTE......................................................................................................................... 68
HIBYTE.......................................................................................................................... 69
delay_us.......................................................................................................................... 70
delay_10us...................................................................................................................... 71
delay_100us.................................................................................................................... 72
delay_ms......................................................................................................................... 73
delay_s............................................................................................................................ 74
nop .................................................................................................................................. 75
clear_wdt ........................................................................................................................ 76
sleep................................................................................................................................ 77
strcpy.............................................................................................................................. 78
strlen .............................................................................................................................. 79
strcmp............................................................................................................................. 80
strncmp .......................................................................................................................... 81
strcat .............................................................................................................................. 82
toupper ........................................................................................................................... 83
tolower............................................................................................................................ 84
isdigit.............................................................................................................................. 85
isalpha ............................................................................................................................ 86
isalnum........................................................................................................................... 87
rand ................................................................................................................................ 88
srand...............................................................................................................................89
I2Cサポート関数............................................................................................................. 90
RS232 サポート関数 ....................................................................................................... 91
LCDサポート関数........................................................................................................... 92
flash_read....................................................................................................................... 93
flash_loadbuffer ............................................................................................................. 94
flash_write ..................................................................................................................... 95
eeprom_read................................................................................................................... 96
44
リファレンスマニュアル
eeprom_write ................................................................................................................. 97
adc_measure .................................................................................................................. 98
oo_busreset..................................................................................................................... 99
oo_get_data .................................................................................................................. 100
oo_read_scratchpad ..................................................................................................... 101
oo_start_conversion ..................................................................................................... 102
oo_conversion_busy...................................................................................................... 103
oo_wait_for_completion ............................................................................................... 104
最適化............................................................................................................................... 105
リンク............................................................................................................................... 105
コードエントリポイント .................................................................................................. 105
BoostCTMコンパイラのMPLABとの統合 ......................................................................... 107
はじめに........................................................................................................................ 107
MPLAB統合の特徴....................................................................................................... 107
MPLABの言語ツールの設定......................................................................................... 107
MPLAB IDEでのプロジェクト作成 ............................................................................. 110
ICD2 の利用 ..................................................................................................................... 113
RAMの使用方法............................................................................................................ 113
SFRの使用方法 ............................................................................................................. 113
ブレークポイントオーバーラン .................................................................................... 113
コマンドラインオプション ........................................................................................... 113
BoostCTMコマンドライン.......................................................................................... 114
BoostLinkTMコマンドライン ........................................................................................ 115
BoostC C コンパイラの詳細 ............................................................................................ 116
Optimizing コンパイラとリンカ特徴 .......................................................................... 116
ベースデータタイプ .................................................................................................. 116
特殊データタイプ...................................................................................................... 116
拡張言語仕様の特徴 .................................................................................................. 116
コード生成の特徴...................................................................................................... 116
デバッグ機能の特徴 .................................................................................................. 117
MPLAB 統合 ............................................................................................................ 118
ライブラリアン ......................................................................................................... 118
Code分析 ................................................................................................................... 118
45
リファレンスマニュアル
はじめに
BoostCTM はPIC16、PIC18、そしていくつかのPIC12 プロセッサと動作する次世代Cコン
パイラです。
ソースブースト IDE のコンパイルモデルは、次の図のようになります。
コンパイルモデル
BoostCTMは、プリプロセッサ(pp.exe)で処理された、C言語のファイルをコンパイルし、オ
ブジェクトファイルを生成します。プログラムは、通常、複数のオブジェクトファイルや
ライブラリを結合して、1つの実行ファイルとなります。このオブジェクトファイルとラ
イブラリの結合作業は、リンカ(boostlink.exe)が行います。それぞれのプログラムの機
能は、以下で説明します。
46
リファレンスマニュアル
プリプロセッサ
プリプロセッサ pp.exe はコンパイラにより自動的に起動されます。プリプロセッサで使用
可能なプリプロセッサ命令には、以下の物が使用可能です。
#include................ ファイルのインクルードを行います
#define ................. 名前の定義を行います
#undef .................. 名前の定義を解除します
#ifdef .................... 指定した名前が定義されていれば、#else または、#end までを実行しま
す
#if ......................... 条件が真ならば、#else または、#end までを実行します
#else ..................... #if または、#ifdef の条件が偽の場合、#end までを実行します
#endif ................... #if または、#ifdef の終了を表します
#error ................... 強制的にエラーを発生し、メッセージを表示します
#warning ............ 強制的に警告を発生し、メッセージを表示します
#pragma ............... プラグマを指定します
コンパイラ
PIC16 と PIC18 ターゲットデバイスには、それぞれ別個のコンパイラが用意されています。
ソースブースト IDE を使用している場合、選択したターゲットによって、使用するコンパ
イラが自動的に決められるため、ユーザは、使用するターゲットデバイスに合わせて、ど
ちらかを特定する必要はありません。
コンパイラの出力ファイルは、.lib または.hex file.を生成する、ライブラリアンまたはリン
カで使用できる形式の、obj ファイルとなります。
ライブラリアン
ライブラリアンはBoostLinkTM リンカに組み込まれ、-libコマンドライン引き数により動作
します。ソースブーストIDE 内の、設定ダイアログに専用ボックスがあり、これによりhex
ファイルの代わりにライブラリファイルを生成させることができます。
ターゲットデバイスに依存しないライブラリを作成するには、インクルードファイルに、
system.h の代わりに boostc.h を指定します。この方法は、ターゲット特有の情報(ターゲッ
ト特有のレジスタに、定数や変数をマップするような)をライブラリに組み込みません。
注意: これはソース中に、system.h が含まれない唯一のケースです。
47
リファレンスマニュアル
リンカ
BoostLinkTM 最適化リンカは、コンパイラによって生成された .obj ファイルを、ターゲッ
トに送る.hexファイルへとリンクします。 また、デバッグやコード分析に使用される補助
ファイルを生成します。
C2C コンパイラモデルとの違い
BoostCTM とC2Cコンパイラの一番の違いは、 C2Cには外部アセンブラ(例:mpasm)によ
って.asmファイル出力するビルトインリンカがあるのに対し、BoostCTM ツールは .hexフ
ァイルを自分で生成するため、外部ツールは不必要である点です。
別の違いは、コンパイラのコードメモリ内の読み込み専用変数の扱いです。C2Cがconst変
数をコードメモリ内に配置するのに対し、BoostCTMは特別なデータタイプ、ROMに配置す
る点です。
C 言語
ここでは、BoostCTMで使用できる、C言語の機能について説明します。C言語の言語使用に
ついては、一般のC言語の書籍をご参照下さい。
プログラム構造
BoostCTM では、どのソースファイルにも、ターゲット特定のヘッダ(このターゲットに特
定したレジスタマップ変数を含む)と、コードジェネレーションと文字列操作関数のプロト
タイプに必要な内部機能プロトタイプを含んだシステムヘッダファイルを指定する必要が
あります。
書式:
#include <system.h>
通常は、デバイスの指定は、ソースブースト IDE の、プロジェクトのプロパティで設定で
きるので、ソースファイルでの指定は必要ありません。
48
リファレンスマニュアル
データタイプ
BoostCTMで使用可能なデータタイプは、データのサイズ(ビット数)で分類すると、次の
ようになります。
サイズ
データタイプ
1 ビット
bit, bool
8 ビット
char,unsigned char,signed char
16 ビット
short,unsigned short,signed short
32 ビット
int,unsigned int,signed int
32 ビット
long,unsigned long,signed long
表:サイズ別のデータタイプ一覧
bit と bool データタイプ゚の違いは、1 ビットを、ビットかブール演算に割り当てる長さで
す。ビット演算は、右辺の計算式の下位バイトで、ブール演算は、右辺の計算式の結果を、
bool にキャストします。
例)
bool a;
bit b;
char x;
...
a = x & 2; // 'a'は'x'内のビット#1 が'false'に設定されない限り'true'なります
b = x & 2; // 'b'は式のビット#1 の結果となるので、常に false です。'x'の値にはよりません
ROM
文字列や配列のデータは、プログラムメモリに配置することができます。このような変数
は、通常のデータタイプの宣言に加え、'rom'というキーワードを付けて宣言します。ROM
変数は、宣言中に初期化されなければなりません。
rom char* text = "Test string";
rom char *ptr = "¥100¥11¥12";//データ 0x64, 0x0B, 0x0C の 3 バイト
※現時点では 'char' データタイプのみが 'ROM' 特定メモリとして、使用可能です。
49
リファレンスマニュアル
Volatile
Volatile は型修飾子で、通常のプログラムの流れ以外の場所から変更される可能性があり、
演算式の中間値を受け取らない変数に使用することができます。たとえば、ビット変数が
ポートのピンにマップされている場合は、この変数を Volatile で宣言すると良いでしょう。
Volatile 宣言を含む変数のコード生成は、通常のコードと比べ若干長くなります。
volatile bit [email protected]; //ポート B のピン 1 にマップされたビット変数を宣言します
※現時点では、コンパイラは volatile ビット変数に値を指示する式にのみ別のコードを生成します。また volatile 変
数は初期化するためのチェックはされていません。
スタティック
グローバル変数、ローカル変数ともにスタティック変数として宣言可能です。
構造体と共用体
構造体と共用体ともにサポートされています。
Typedef
typedef を使用することによって、データタイプの新しい名前を定義することが可能です。
typedef unsigned char uchar;
Enum
Enum は、列挙されたデータタイプです。Enum は、次のように宣言して使用可能です。
enum ETypes { E_NONE=0, E_RED, E_GREEN, E_BLUE };
50
リファレンスマニュアル
コードサイズとデータタイプ
プログラムを作成する場合は、使用可能なデータタイプのうち、最小のサイズのデータタ
イプを使用するよう心がけてください。より大きいデータタイプを使用するにつれ、より
大きいコードが生成されます。マイクロコントローラは、使用できるメモリが限られてい
るため、この注意は、非常に重要です。また、BoostCTMでは、マイクロコントローラの制
約上、8 ビット以外の演算は、ライブラリを使用することになります。ライブラリを使用す
る場合は、オーバヘッドが大きくなり、思わぬコードサイズの肥大化を招く場合がありま
す。また、処理速度にも影響が出ますので、可能な限り 8 ビットの変数を使用するように
心がけるようにしてください。
プログラムを作成する場合、変数は、可能なら char を選択し、できなければ shor、最終手
段として long を選択してください。
また、生成コード(より少ない程度ですが)のサイズにも影響を与えるルールとして符号があ
ります。できるだけ符号無しのデータタイプをご使用ください。符号無しの計算は、符号
付の計算より、小さいコードを生成します。
定数
定数は2進数、8進数、10進数と16進数が使用可能です。
定数の書式は、次の通りです。
0bXXXX or XXXXb
X が 1 か 0 である2進数
0XXXX
X が 0 から 7 の間の数字である8進数
XXXX
X が 0 から 9 の間の数字である10進数
0xXXXX
X が 0 から 9 の間または A と F である16進数
51
リファレンスマニュアル
文字列
文字列は文字に関係なくエスケープシケンスを含める事ができます。
文字列の書式は、次の通りです。
¥<decimal number> 10 進数で指定された文字
¥x<hex number>
16 進数で指定された文字
¥a
0x7(警告)の値
¥b
0x8(バックスペース)の値
¥t
0x9 (水平タブ)の値
¥r
と 0xA (改行)の値
¥v
0xB (垂直タブタブ)の値
¥f
0xC (フォームフィード)の値
¥n
0xD (キャリッジリターン)の値
¥¥
0x5C (¥ 文字)の値
¥'
0x27 (' 文字)の値
¥"
と 0x22 (" 文字)の値
¥?
0x3F (? 文字)の値
変数
変数は一般的な方法で宣言、使用が可能です。リンカは特定のアドレスに変数を設置しま
す。リンカが呼び出しを分析し、スコープツリーを計算し、競合しない変数を、同じアド
レスに配置することもあります。これはデータメモリ使用を最小限にするために、極めて
効果的です。
レジスタマップ変数
変数は指定されたアドレスに設置させることが可能です。特定のアドレスに配置すること
で、レジスタマップ変数として使用することができます。この仕様は、C2C のものと同様
です。
char var@<addr>;
<addr>は 16 進または 2 進のアドレスです。このテクニックは、プログラム中から、ター
ゲットデバイスの特定レジスタにアクセスするのに使用されています。システムヘッダフ
52
リファレンスマニュアル
ァイルは、既にターゲット独自のレジスタの定義を含んでいるため、コード中で定義する
必要はありません。
ビット変数もまたアドレス設定が可能です。アドレスにはビット位置が記入されます。ビ
ット変数には、次の2つのフォームがあります。
bit [email protected]; //レジスタ 0x40 のビット 1 に設置された変数
bit b2@0x202; //レジスタ 0x40 (0x40*8 + 2)のビット 2 に設定された変数
ビットアクセス
ビット変数を除き、変数の独立ビットは、ドット演算子'.'を使用して、ビットアクセスが可
能です。
char var;
var.2 = 1; //変数'var'のビット 2 を設置します
配列
配列はどのような要素の番号も指定可能です。ただし、配列は、レジスタバンクに収まら
なければなりません。
ポインタ
ポインタは一般的な方法と同様に使用可能です。
関数引数の文字列
関数が char *の引数を持つ場合、この引数を使って、文字列を引き渡すことができます。同じコー
ドブロックで、複数の呼び出しがある場合、コンパイラはその引数のためにアロケートされたメモリ
を再利用します。以下のコードの例では、一時メモリ文字列の"Date"と"Time"には、同じメモリが
使用されます。
...
foo( "Date" );
foo( "Time" );
...
53
リファレンスマニュアル
演算
もし演算の結果がデフォルトで特定されない場合は、精度を 16 ビットに上げて下さい。
long l = a * 100 / b; //'a' と'b'は 16 ビットの long 変数です
乗算の値は 16 ビットの一時的な変数に保存され、b で割られます。そしてこの値は l に保
存されます。
この振る舞いは、-Op コンパイラコマンドラインオプションを使用することで、変更が可能
です。この最適化が同じ式で使われると、32bit の一時変数が使用され、b で割られた結果
は、32 ビットの値として l に保存されます。
演算子
C 言語の次の演算子が使用可能です。
算術演算子
+
-
*
/
%
++
--
*=
/=
%=
<=
>
>=
代入演算子
=
+=
-=
&=
|=
^=
<<=
>>=
比較演算子
==
!=
<
論理演算演算子
&&
||
!
ビット演算子
&
|
^
~
<<
>>
54
リファレンスマニュアル
条件式
C 言語の以下の条件式が使用可能です。
if/else ステートメント
switch/case ステートメント
?: オペレータ
ループ
C 言語の以下のループが使用可能です。
while
do/while
for
break
continue
goto
goto 文は、C 言語の場合、あまり推奨されていません。このオペレーションが有効な場合
は、ネストされたループから抜けだす時のみです。
while( ... ){
while(...) {
while(...) {
goto exit;
}
}
}
exit:
インラインアセンブラ
C 言語のソース中に、アセンブラ言語を使用するために、asm オペレータが使用可能です。
インラインアセンブラから C 言語の変数を参照する場合は、アンダースコア('_')を変数の先
55
リファレンスマニュアル
頭に付ける必要があります。C 言語の変数名が、アセンブラの'movlw'インストラクション
で使用されている場合、この変数のアドレスは W にコピーされます。ラベルには':'を後に
付けてください。.
例:
asm{
start:
btfsc _i, 4
goto end
btfss _b, 0
goto iter
...
}
ユーザデータ
ユーザデータは、アセンブラの'data'命令に続けて、コンマによって区切られた数値か文字
列を、現在の場所に配置することができます。
例:
//以下のコードはバイト 10,11,116,101,115,116,0 を現在のコードの場所に設置します
asm data 0xA, 0xB, "test"
プラグマ
以下のプラグマが使用可能です。
DATA プラグマ
#pragma DATA の宣言により、ユーザデータを特定の位置に配置することができます。
例:
//以下のコードは、バイト 10,11,116,101,115,116,0 を、アドレス 0x200 番地から配置します
#pragma DATA 0x200, 0xA, 0xB, "test"
'#pragma DATA'を使用して、ターゲットデバイスの、コンフィギュレーションワードを設定し
たり、EEPROM にデータを格納することができます。
56
リファレンスマニュアル
例:
//PIC16 に、コンフィグレーションワードを設定します
#pragma DATA 0x2007, _HS_OSC & _WDT_OFF & _LVP_OFF
...
//EEPROMにデータを格納します
#pragma DATA 0x2100, 0x12, 0x34, 0x56, 0x78, "ABCD"
CLOCK_FREQ プラグマ
CLOCK_FREQ はコンパイラに、使用するクロック周波数を通知します。リンカで作成さ
れる遅延時間のコードは、この数値が元となります。
例:
//20MHz のクロック周波数を設定します
#pragma CLOCK_FREQ 20000000
OPTIMIZE プラグマ
このプラグマは、ファンクションレベルで、新しい最適化を指定します。これはグローバ
ルスコープで使用し、プラグマに続けて、で機能を選択します。プラグマの引数は-O コン
パイラのコマンドラインの引数と同じで、引用符で囲みます。空の引用符は、このプラグ
マの適用前に、最適化のリセットを行います。
例:
//変数'foo'にアグレッシブ最適化を使用する
#pragma OPTIMIZE "a"
void foo()
{
...
}
57
リファレンスマニュアル
インライン関数
インライン関数は、コードに埋め込まれる関数です。インライン関数のボディは、そのよ
うな関数が呼び出される前に定義されていなくてはなりません。
特別な関数
BoostCTMには、いくつかの特別な関数が使用されます。特別な関数には、次の物がありま
す。
void main( void )
main 関数は、プログラムのエントリポイントです。
void interrupt( void )
割り込みハンドラ (PIC18 の場合は、優先度の高い割り込みハンドラ)
void interrupt_low( void )
優先度の低い、割り込みハンドラ(PIC18 のみ)
58
リファレンスマニュアル
関数と割り込み
一般的な関数は、スレッドセーフではありません。例えば、ある関数を実行中に、割り込
み内から、その関数が呼び出されると、関数内のローカル変数は保存されません。この問
題は、発見が非常に難しいエラーであるため、リンカは、同じ関数を、メイン関数と割り
込みスレッドから呼び出すことを許可していません。もし同じ関数を、両方のスレッドか
ら使用したい場合は、関数のコピーを作り、違う名前を使用してください。
例)
//この関数はメインスレッドから呼び出されます
void foo()
{
...
}
//'foo'のコピーは割り込みスレッドから呼び出されます
void foo_interrupt()
{
...
}
//割り込みスレッド
void interrupt( void )
{
...
foo_interrupt();
...
}
//メインスレッド
void main( void ){
...
foo();
...
}
59
リファレンスマニュアル
ダイナミックメモリマネジメント
ダイナミックメモリマネジメントは、プログラム実行中に、オブジェクトをダイナミック
に生成、削除することを可能にする機能です。この機能は、例えば、プログラム中に、い
くつかのデータパケットが必要な場合等に、大変有効です。これらのパケットのメモリは、
コンパイル時に確保することもできますが、確保されたメモリは、使用する/しないにか
かわらず、他の変数には使用されません。このような場合に有効なのが、ダイナミックメ
モリアロケートの使用です。保存データのためのオブジェクトは、メモリが必要になった
場合に生成され、データ処理が完了次第、削除されます。この方法を使うと、ターゲット
デバイスのデータメモリを効率的に利用することができます。
アロケート可能なオブジェクトの量は、アプリケーションに依存します。アプリケーショ
ンがビルトされると、リンカは残ったメモリを、グローバル変数とローカル変数のヒープ
領域に割り当てます。alloc 関数コールを利用し、メモリがランタイム中に確保される場合、
このヒープ領域を使用します。ヒープが大きければ大きいほど、一度に確保できるメモリ
の量が多くなります。
ダイナミックメモリマネジメントに使用できる関数は、次の物があります。
void* alloc( unsigned char size )
ダイナミックに'size'バイト分のメモリを確保します。最大のサイズは 127 バイトです。メモリ
が確保できない場合、NULL を返します。
void free( void *ptr )
'alloc'によって確保されたメモリを解放します。
C 言語スーパーセット
BoostCTMコンパイラには、C++言語から流用した、次のような、いくつかの拡張仕様があ
ります。これらの機能により、柔軟で有用なコードを開発することができますが、もちろ
ん、この機能を使用しなくても、問題はありません。
関数の参照引数
関数の引数は、ある変数の参照として渡すことができます。参照変数が、呼び出し関数内
で変更された場合、呼び出し元の関数の変数も変化します。これは生成されたコードを破
壊せずに、データフローを作り変えるのに大変有効です。
60
リファレンスマニュアル
例)
void foo( char &n) //'n'は参照変数です
{
n = 100;
}
void main( void )
{
char a = 0;
foo( a ); //呼び出しから戻ると、'a'は 100 の値を持つことになります
...
}
関数のオーバーロード
関数は、名前が同じで、その引数の型や数が異なる、別の関数を定義できます。
例)
void foo( void )
//'foo' number 1
{
...
}
void foo( char *ptr ) //'foo' number 2
{
...
}
void foo( char a, char b )
//'foo' number 3
{
...
}
void main( void )
{
foo();
//'foo' number 1 が呼ばれます
foo( "test" );
//'foo' number 2 が呼ばれます
foo( 10, 20 );
//'foo' number 3 が呼ばれます
...
}
61
リファレンスマニュアル
関数テンプレート
関数テンプレートは、関数を、データタイププレースホルダを使用して宣言し、定義する
ことが可能です。この機能は、特定のデータタイプに依存しない、極めて一般的なコード (例
えばリンクリストなど)の記述を可能にします。またより重要な応用として、ヘッダファイ
ル形式の、ライブラリの作成が挙げられます。
書式)
template <class T>
void foo( T *t )
{
...
}
void main( void )
{
short s;
foo<char>( "test" );
//'foo( char* )' が呼ばれます
foo<short>( &s ); //'foo( short* )' が呼ばれます
...
}
システムライブラリ
BoostCTMのインストールには、いくつかの基本的な関数も含まれています。関数の数は定
まっていません。リリースごとに新しい関数が加えられ、増加する場合があります。これ
らの関数のほとんどは、boostc.hに宣言されています。
※boostc.h を直接コードに含めてしまわないように、注意してください。boostc.h を含んでいる、system.h をインク
ルードすることを推奨します。
以下のページには、現在のリリースに含まれる、システム関数のリファレンスを示します。
これらの関数は、system.h をインクルードすることで、使用する事が可能です。
62
リファレンスマニュアル
clear_bit
書式:clear_bit( var, num )
引数:
var:対象となる変数
num:ビット番号
戻り値:
なし
機能:
変数 'var'のビット'num' をクリアします。boostc.h で宣言されています。
この関数は、マクロで定義されています。
63
リファレンスマニュアル
set_bit
書式:set_bit( var, num )
引数:
var:対象となる変数
num:ビット番号
戻り値:
なし
機能:
変数 'var'のビット'num' をセットします。boostc.h で宣言されています。
この関数は、マクロで定義されています。
64
リファレンスマニュアル
test_bit
書式:test_bit( var, num )
var:対象となる変数
num:ビット番号
戻り値:
なし
機能:
変数'var'内のビット'num'が設定されているかテストします。boostc.h で宣言されています。
この関数は、マクロで定義されています。
65
リファレンスマニュアル
MAKESHORT
書式:MAKESHORT( dst, lobyte, hibyte )
引数:
dst:結果の保存先
lobyte:下位バイトの値
hibyte:上位バイトの値
戻り値:
なし
機能:
二つの 8 ビットの値(下位バイト'lobyte'と上位バイト'hibyte')から 16 ビットの値 ('dst'に保
存)を作ります。'dst'は 16 ビットの値の変数でなければなりません。boostc.h で宣言されて
います。
この関数は、マクロで定義されています。
66
リファレンスマニュアル
MAKESHORT
書式:MAKESHORT( res, adresl, adresh )
引数:
res:結果の保存先
adresl:下位バイトのレジスタ
adresh: 上位バイトのレジスタ
戻り値:
なし
機能:
adresh:adresl レジスタから 16 ビット値を作成し、res 変数に書き込みます
この関数は、マクロで定義されています。
67
リファレンスマニュアル
LOBYTE
書式:LOBYTE( dst, src )
引数:
dst:結果の保存先
src :ソースデータ
戻り値:
なし
機能:
'src'の下位バイトを取得し、'dst'に書き込みます。boostc.h で宣言されています。
この関数は、マクロで定義されています。
68
リファレンスマニュアル
HIBYTE
書式:HIBYTE( dst, src )
引数:
dst:結果の保存先
src :ソースデータ
戻り値:
機能:
'src'から上位バイトを取得し、'dst'に書き込みます。'src'は 16 ビットの変数でなければなり
ません。boostc.h で宣言されています。
この関数は、マクロで定義されています。
69
リファレンスマニュアル
delay_us
書式:void delay_us( unsigned char t )
引数:
unsigned char t:遅延時間
戻り値:
なし
機能:
実行を、t マイクロ秒だけ遅らせます。boostc.h で宣言されています。 この関数はプロジ
ェクトがリンクされ、 CLOCK_FREQ プラグマにコントロールされる度に生成されます。
クロック振動数が低すぎて生成が物理学的に不可能な場合もあります。このような場合は
リンカが警告を発します。
70
リファレンスマニュアル
delay_10us
書式:void delay_10us( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t×10 マイクロ秒だけ遅らせます。boostc.h で宣言されています。 この関数はプ
ロジェクトがリンクされ、 CLOCK_FREQ プラグマにコントロールされる度に生成されま
す。 クロック振動数が低すぎて生成が物理学的に不可能な場合もあります。このような場
合は、リンカが警告を発します。
71
リファレンスマニュアル
delay_100us
書式:void delay_100us( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t×100 マイクロ秒だけ遅らせます。 boostc.h で宣言されています。 この関数は
プロジェクトがリンクされ、 CLOCK_FREQ プラグマにコントロールされる度に生成され
ます。 クロック振動数が低すぎて生成が物理学的に不可能な場合もあります。このような
場合は、リンカが警告を発します。
72
リファレンスマニュアル
delay_ms
書式:void delay_ms( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t ミリ秒だけ遅らせます。boostc.h で宣言されています。 この関数はプロジェク
トがリンクされ、CLOCK_FREQ プラグマにコントロールされる度に生成されます。
73
リファレンスマニュアル
delay_s
書式:void delay_s( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t 秒だけ遅らせます。boostc.h で宣言されています。 この関数はプロジェクトが
リンクされ、CLOCK_FREQ プラグマにコントロールされる度に生成されます。
74
リファレンスマニュアル
nop
書式:void nop( void )
引数:
なし
戻り値:
なし
機能:
nop 命令を生成します。boostc.h で宣言されています。
この関数は、インライン関数です。
75
リファレンスマニュアル
clear_wdt
書式:void clear_wdt( void )
引数:
なし
戻り値:
なし
機能:
clrwdt 命令を生成します。boostc.h で宣言されています。
この関数は、インライン関数です。
76
リファレンスマニュアル
sleep
書式:void sleep( void )
引数:
なし
戻り値:
なし
機能:
'sleep 命令を生成します。boostc.h で宣言されています。
この関数は、インライン関数です。
77
リファレンスマニュアル
strcpy
書式:
void strcpy( char *dst, rom char *src )
void strcpy( char *dst, char *src )
引数:
char *dst:コピー先バッファ
rom char *src:コピー元の文字列
戻り値:
なし
機能:
0 でターミネイトされている文字列 src を、格納先バッファ dst にコピーします。格納先バ
ッファは、文字列が入る大きさがなければなりません。boostc.h で宣言されています。
78
リファレンスマニュアル
strlen
書式:
unsigned char strlen( rom char *src )
unsigned char strlen( char *src )
引数:
rom char *src:文字列のポインタ
戻り値:
なし
機能:
文字列の長さを返します。boostc.h で宣言されています。
79
リファレンスマニュアル
strcmp
書式:
signed char strcmp( rom char *src1, rom char *src2 )
signed char strcmp( char *src1, char *src2 )
signed char strcmp( rom char *src1, char *src2 )
signed char strcmp( char *src1, rom char *src2 )
引数:
rom char *src1, rom char *src2 :文字列のポインタ
戻り値:
-1:src1<src2
0:src1==src2
1:src1>src2
機能:
文字列を比較します。もし文字列#1 が文字列#2 より小さい場合は-1 を返し、文字列 #1 よ
り文字列#2 が大きい場合は1を、文字列#1 が文字列#2 と同じの場合は 0 を返します。
boostc.h で宣言されています。
80
リファレンスマニュアル
strncmp
書式:
signed char strncmp( rom char *src1, rom char *src2, unsigned char len )
signed char strncmp( char *src1, char *src2, unsigned char len )
signed char strncmp( rom char *src1, char *src2, unsigned char len )
signed char strncmp( char *src1, rom char *src2, unsigned char len )
引数:
rom char *src1, rom char *src2:文字列のポインタ
unsigned char len :比較する長さ
戻り値:
-1:src1<src2
0:src1==src2
1:src1>src2
機能:
文字列の、最初の len 文字分だけ比較します。もし文字列#1 が文字列#2 より小さかったと
き-1 を返し、文字列 #1 より文字列#2 が大きかった場合は、1を返します。文字列#1 が文
字列#2 と同じの場合 0 を返します。 boostc.h で宣言されています。
81
リファレンスマニュアル
strcat
書式:
void strcat( char *dst, rom char *src )
void strcat( char *dst, char *src )
引数:
char *dst:ターゲットの文字列
rom char *src:追加する文字列
戻り値:
なし
機能:
0 でターミネイトされている文字列 src を、格納先文字列 dst に付加します。格納先バッフ
ァは、文字列が入りきる大きさでなければなりません。boostc.h で宣言されています。
82
リファレンスマニュアル
toupper
書式:char toupper( char ch )
引数:
char ch:入力文字
戻り値:
入力文字を、大文字に変換した文字
機能:
小文字を大文字に変更します。boostc.h で宣言されています。
83
リファレンスマニュアル
tolower
書式:char tolower( char ch )
引数:
char ch:入力文字
戻り値:
入力文字を、小文字に変換した文字
機能:
大文字を小文字に変更します。boostc.h で宣言されています。
84
リファレンスマニュアル
isdigit
書式:char isdigit( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が数値であるかを判定します。数値であった場合 O でない値を返します。
boostc.h で宣言されています。
85
リファレンスマニュアル
isalpha
書式:char isalpha( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、文字であるかをチェックします。これが文字であった場合 O でない
値を返します。boostc.h で宣言されています。
86
リファレンスマニュアル
isalnum
書式:char isalnum( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、数字または文字であるかを判定します。数字または文字であった場
合 O でない値を返します。boostc.h で宣言されています。
87
リファレンスマニュアル
rand
書式:unsigned short rand( void )
引数:
なし
戻り値:
乱数値
機能:
擬似乱数を生成します。rand.h で宣言され、rand.lib で定義されています。
88
リファレンスマニュアル
srand
書式:void srand( unsigned short seed )
引数:
unsigned short seed:初期値
戻り値:
なし
機能:
擬似乱数ジェネレータの初期値を設定します。rand.h で宣言され、rand.lib で定義されて
います。
89
リファレンスマニュアル
I2C サポート関数
I2C サポート関数には、次の関数があります。
i2c_init
i2c_start
i2c_restart
i2c_stop
i2c_read
i2c_write
これらの関数の詳細に関しては、i2c_driver.h と i2c_test.c files を参照ください。
90
リファレンスマニュアル
RS232 サポート関数
RS232 サポート関数には、次の物があります。
uart_init
kbhit
getc
getch
putc
putch
これらの関数の詳細に関しては、serial_driver.h と serial_test.c files を参照ください。
91
リファレンスマニュアル
LCD サポート関数
LCD サポート関数には、次の物があります。
lcd_setup
lprintf
lcd_clear
lcd_write
lcd_funcmode
lcd_datamode
LCD サポート詳細に関しては、lcd_driver.h と lcd.c files を参照ください。
92
リファレンスマニュアル
flash_read
書式:short flash_read(short addr)
引数:
short addr:読出しアドレス
戻り値:
読出しデータ
機能:
フラッシュメモリのアドレス addr の内容を、読み出します。この関数は、PIC16F87X で
機能します。flash.h 内で宣言され、flash.PIC16.lib で定義されています。
93
リファレンスマニュアル
flash_loadbuffer
書式:void flash_loadbuffer(short data)
引数:
short data:設定データ
戻り値:
なし
機能:
short 型 4 つ分の大きさの内部バッファに、short 型変数 data を書き込みます。内部バッフ
ァを全て埋めるために、4 回の呼び出しが必要です。バッファ内のデータは、フラッシュメ
モリに、でデータを保存するために使用されます。この関数は、PIC16F87X で機能します。
flash.h 内で宣言され、 flash.PIC16.lib で定義されています。
94
リファレンスマニュアル
flash_write
書式:void flash_write(short addr)
引数:
short addr:書き込みアドレス
戻り値:
なし
機能:
アドレス addr に、フラッシュ内の内部バッファのデータを書き込みます。short 型 4 つ分
の大きさの内部バッファは、flash_loadbuffer を 4 回呼び出して書き込まれている必要があ
ります。この関数は、PIC16F87X で機能します。flash.h で宣言され、flash.PIC16.lib で
定義されています。
95
リファレンスマニュアル
eeprom_read
書式:char eeprom_read(char addr)
引数:
char addr:アドレス
戻り値:
読出しデータ
機能:
アドレス addr の EEPROM の内容を、読み込みます。
この関数は、PIC16F87X で機能します。eeprom.h で宣言され、eeprom.pic16.lib で定義
されています。
96
リファレンスマニュアル
eeprom_write
書式:void eeprom_write(char addr, char data)
引数:
char addr:書き込みアドレス
char data:書き込みデータ
戻り値:
なし
機能:
EEPROM のアドレス addr に、data を書き込みます。
この関数は、PIC16F87X で機能します。eeprom.h で宣言され、eeprom.pic16.lib で定義
されています。
97
リファレンスマニュアル
adc_measure
書式:short adc_measure(char ch)
引数:
char ch:チャンネル番号
戻り値:
計測値
機能:
ADC チャンネル ch の計測地を読み込みます。この機能を使用する前に、ADC を初期化す
る必要があります。この関数は、ADC ユニットを持つ PIC16F で機能し、adc.h で宣言さ
れ、adc.pic16.lib で定義されています。
ADC の初期化は以下のように行います。
volatile bit adc_on @ ADCON0 . ADON; //AC アクティブフラグ
set_bit(adcon1, ADFM); // AD 結果は右詰めです
set_bit(adcon1, PCFG0); // 全てのアナログを入力
set_bit(adcon1, PCFG1); // Vref+ = Vdd
set_bit(adcon1, PCFG2); // Vref- = Vss
// Tad を選択 = 32 * Tosc (
X-tal 次第です。ここでは 10 MHz ですが, 20 MHz まで上げて下さい)
set_bit(adcon0, ADCS1);
clear_bit(adcon0, CHS0); // Channel 0
clear_bit(adcon0, CHS1); //
clear_bit(adcon0, CHS2); //
adc_on = 1; // Activate AD module
98
リファレンスマニュアル
oo_busreset
書式:char oo_busreset()
引数:
なし
戻り値:
リセット結果
機能:
1- Wire バスをリセットします。oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義され
ています。
代表的な 1-Wire ライブラリの使用方法は、以下の通りです。
// 1-Wire ライブラリの2グローバルビット変数を使用するにはコード内で宣言が必要です
// 1-Wire コミュニケーションのコントロールピンの変数です。
// 1-Wire インターフェースがポート B の6ピンに接続している場合、宣言は以下のようになり
ます
#define OO_PORT PORTB
#define OO_TRIS TRISB
#define OO_PIN 6
volatile bit oo_bus @ OO_PORT . OO_PIN;
volatile bit oo_bus_tris @ OO_TRIS . OO_PIN;
// 1-Wire バスのリセット
oo_busreset();
// 変換をスタート(ノンブロッキング関数)
oo_start_conversion();
// 終了を待ちます, 他のスタッフも出来ます。この関数がゼロに戻ることを確認して下さい
// スクラッチパッドを読み込んでいます
if( oo_wait_for_completion() ){
//ハンドル変換 time out
}
// スクラッチパッドを読み込む
if( oo_read_scratchpad() ){
//ハンドル変換エラー
}
// テンプレチャの情報を引き出す
short data = oo_get_data();
99
リファレンスマニュアル
oo_get_data
書式:short oo_get_data()
引数:
なし
戻り値:
読み込みデータ
機能:
1- Wire バスからデータを読み込みます。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
100
リファレンスマニュアル
oo_read_scratchpad
書式:char oo_read_scratchpad()
引数:
なし
戻り値:
スクラッチパッドの値
機能:
スクラッチパットを読み込みます。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
101
リファレンスマニュアル
oo_start_conversion
書式:void oo_start_conversion()
引数:
なし
戻り値:
なし
機能:
変換を開始します。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
102
リファレンスマニュアル
oo_conversion_busy
書式:char oo_conversion_busy()
引数:
なし
戻り値:
確認結果
機能:
変換が実行中かどうかを確認します。変換が実行されていない場合は、0 を返します。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
103
リファレンスマニュアル
oo_wait_for_completion
書式:char oo_wait_for_completion()
引数:
なし
戻り値:
1 秒以内に終了する場合は、0となる。
機能:
変換が終了するのを待ちます。1秒以内に終了する場合は 0 を返します。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
104
リファレンスマニュアル
最適化
コード゙の最適化は-O コマンドラインオプション とプラグマで操作されます。
最適化のコマンドラインオプションには、次の物があります。
-O0
最適化しないか、もしくは最小の最適化
-O1
通常の最適化(このオプションは大抵のアプリケーションで推薦されます。)
-Oa
最大の最適化(短いコードの作成と変数の最適化)
-Op
16 ビットオペレーションの内容を 32 ビットに変換する
リンク
ソースブースト IDE は、プロジェクトがリンクされる際に、デフォルトで ibc.lib のライブ
ラリを検索し、リンカのコマンドラインに追加します。libc ライブラリには、乗算、除算、
あるいは動的なメモリの割り当てに必要なコードが含まれます。また、文字列命令のコー
ドも含んでいます。
コードエントリポイント
エントリポイントは、BoostLinkTM リンカによる、コードアドレス列によって決まります。
デフォルトでは、リンカは、利用できる全てのコードスペースを使用しますが、リンカコ
マンドラインオプションから、使用しなければならないコード開始の特定や、アドレスの
終了をすることも可能です。
エントリポイントは、次のようになります。
PIC16 のエントリポイント
リセットエントリポイント
<code start> + 0x00
割り込みエントリポイント
<code start> + 0x04
PIC18 のエントリポイント
リセットエントリポイント
<code start> + 0x00
割り込みエントリポイント
<code start> + 0x08
低レベル割り込みのエントリポイント
<code start> + 0x18
105
リファレンスマニュアル
106
リファレンスマニュアル
BoostCTMコンパイラのMPLABとの統合
はじめに
BoostCTM C コ ン パ イ ラ は 、 マ イ ク ロ チ ッ プ 社 の 、 MPLAB integrated development
environment (IDE)に統合することが可能です。MPLAB統合オプションは、ソースブース
トのソフトウェアパッケージインストール中に選択してください。もしインストール中に
統合オプションを選択しなかった場合、インストールを再び実行し、MPLAB統合を選択し
てください。
MPLAB 統合の特徴
BoostCTMがMPLAB IDEに統合された場合、以下のことが可能になります。
・ MPLAB IDE 中での、MPLAB プロジェクトマネージャの使用
・ MPLAB IDE.中での、ソースコードの作成と編集
・ MPLAB IDE 実行中のプロジェクトの作成.
・ MPLAB シミュレータ使用での、ソースレベルデバッグと変数モニタリング
・ MPLAB ICD2 使用での、ソースレベルデバッグと変数モニタリング
・ MPLAB ICE1使用での。ソースレベルデバッグと変数モニタリング
MPLAB の言語ツールの設定
このプロセスは、最初の 1 回だけ行う必要があります。
以下の手順は、ソースブースト・ソフトウェアパッケージが、デフォルトのフォルダにイ
ンストールされていると仮定して説明しています。
・ MPLAB IDE を開始します。
・
メニューから、「Project」「Set Language Tool Locations」を選択します。
注:もしBoostCTM C コンパイラがRegistered Toolsリストに現れない場合、 SourceBoostインストール中の
統合プロセスは実行されなかった、もしくは完了していなかったことになります。
・ PIC16 用の、BoostCTM C コンパイラのロケーションを設定します。
107
リファレンスマニュアル
・ Boost Linker のロケーションを設定します。
・ PIC18 用の、BoostCTM Cコンパイラのロケーションを選択します。
108
リファレンスマニュアル
・ Boost Linker のロケーションを設定します。
109
リファレンスマニュアル
MPLAB IDE でのプロジェクト作成
これを実行する前に、MPLAB 言語ツールの設定が、正常に完了しているかどうか、確認し
てください。
以下の手順で、MPLAB IDEで、プロジェクトが作成できます。そして、BoostCTM Cコン
パイラで、PIC16 ターゲット用にコンパイル、ビルトが可能になります。
・ メニューから、「Project」「New」を選択し、プロジェクト名とディレクトリを入力し
ます。
注:SourceBoost IDE プロジェクトを含むディレクトリがある場合があります。
・ メニューから、
「Project」
「Select Language Toolsuite」を選択し、PIC16 用の、BoostCTM
Cコンパイラを選択してください。
・ メニューから、「File」「New」を選択し、Untitled*と表示されている、コード入力ウ
110
リファレンスマニュアル
ィンドウに、コードを入力してください。
注:すでにSource Filesが存在する場合、2 と 3 の手順は飛ばすことが可能です。
・ メニューから、「File」「Save As」を選択し、ダイアログボックスで、プロジェクトフ
ォルダを指定します。(ここでは、ファイル名を、test.cとしています。)
・ プロジェクトツリー内の、Source Files を右クリックし、 test.c ソースファイルをプ
ロジェクトに追加してください。
・ プロジェクトツリー内の Library Files を右クリックし、libc.pic16.lib ファイル
(C:¥Program Files¥SourceBoost¥Lib フォルダ内にあります)をプロジェクトに追加し
てください。
111
リファレンスマニュアル
・ プロジェクトは最終的に以下のようになります。
・ メニューから、
「Project」
「Build」を選択します(または、ツールバーのビルドボタンを
押す)。これで、コードはビルトされます。
以上のプロセスで、MPLABシミュレータ、ICD2、またはICE1を使用し、デバイスをプロ
グラムして、プログラムを実行したり、デバッグしたりすることが可能になります。ICD2
を使用する前には必ず、本ドキュメントの、ICD2 の利用についてのセクションを参照くだ
さい。
ソースファイルの追加と同様に、プロジェクトツリーに、プロジェクトヘッダファイルを
追加するのも良いでしょう。プロジェクトブラウズが容易になります。
112
リファレンスマニュアル
ICD2 の利用
ICD2 を使用する際、以下のように、注意しなければならない点がいくつかあります。
RAMの使用方法
ICD2 はいくつかの RAM ターゲットデバイスを使用するため、実際のアプリケーションで
使用できる RAM の残量は少なくなってしまいます。ICD2 によって使用される RAM を抑
え、Boost Linker がメモリを確保するのを防ぐためには、次の例のように、icd2.h のヘッ
ダファイルをインクルードしてください。
#include <system.h>
#include <icd2.h>
// allocates RAM used by ICD2
void main()
{
while( 1 );
}
SFRの使用方法
ICD2 はいくつかの特殊機能レジスタを使用しています。これにより、ICD2 をデバッグに
周辺デバイスを使用するのを防ぎます。
重要:ICD2 が特殊機能レジスタにアクセスしていないかどうかを確認できるのは、ユーザのみです。いくつかのタ
ーゲットでは、これらの特殊機能レジスタは、他の周辺デバイスと同じアドレスになっています。詳しくは、MPLAB
IDEヘルプ内にある、ICD2 リソースの取り扱いの説明書を参照ください。
ブレークポイントオーバーラン
ターゲットデバイスの、プリフェッチ命令によるタイミングスキューにより、設定したブ
レークポイントアドレスを通過してしまう事があります。
コマンドラインオプション
BoostC コンパイラと BoostLink リンカコマンドラインオプションは、コマンドラインから
実行して、指定します。
113
リファレンスマニュアル
BoostCTMコマンドライン
BoostCTMのコマンドラインオプションは、以下のものがあります。
書式: boostc.pic16.exe [options] files
Options:コマンドラインオプション
-t name プロセッサを name で指定した、ターゲット(デフォルト名=PIC16F648A)にし
ます。
-On
最適化レベルの指定(デフォルト n=1)
n=0 - 最適化オフ
n=1 - 最適化オン
n=a - 最大の最適化
n=p - 32 ビット長プロモーションオン
-Wn
警告レベルの設定 (デフォルト n=1)
n=0 - 警告無し
n=1 - 警告あり
n=2 - 全ての警告を出力する
-Werr 警告をエラーとする(デフォルトオフ)
-i
インラインコードデバック(デフォルトオフ)
-Su
初期化されていない変数の初期化を無効にする
-d name name を定義する
-m
マップファイルを作成する (デフォルトオフ)
-v
詳細表示モードオン(デフォルトオフ)
-I path1;path2 インクルードディレクトリの追加
114
リファレンスマニュアル
BoostLinkTMコマンドライン
BoostLinkTMのコマンドラインオプションは、以下のものがあります。
書式:linker.exe [options] files
Options: コマンドラインオプション
-t name
プロセッサを name で指定した、ターゲット(デフォルト名=PIC16F648A)に
します。
-On
最適化レベル 0-1 の設定 (デフォルト n=1)
n=0 - 最適化無し
n=1 - パターン一致とバンクスイッチング最適化を有効にする
-v
詳細表示モード
-d path プロジェクト出力のディレクトリの指定
-p name
マルチ obj ファイルをリンクする、プロジェクト(出力)名の指定
-ld path
ライブラリ検索ディレクトリの指定
-rb address ROM ベース (開始)アドレスの使用
-rt address ROM のトップ (終了)アドレスの使用
ライブラリ作成のスイッチ
-lib
.obj と .lib ファイルからライブラリファイルを作成
-p name プロジェクト(ライブラリ出力ファイル)名の指定
115
リファレンスマニュアル
BoostC C コンパイラの詳細
Optimizing コンパイラとリンカ特徴
ベースデータタイプ
・ 1 ビット長
long (bit, bool).
・ 8 ビット長
char - 符号付と符号なし
・ 16 ビット長 int - 符号付と符号なし
・ 32 ビット長 long - 符号付と符号なし
特殊データタイプ
・ シングルビット - 効率的にフラグを保存するためのデータタイプ
・ 固定アドレス -固定アドレスデータタイプは、ターゲットデバイスレジスタへの、容易
なアクセスを可能にします
・ 変数を読み込み専用のコードメモリとして宣言可能です
拡張言語仕様の特徴
・ 関数の引数の参照渡し
・ 関数のオーバーロードが可能
・ 関数テンプレート
コード生成の特徴
・ ANSI 'C' との互換
高い移植性があります。
・ 迅速なコードコンパイル
数秒でプロジェクトをビルドすることが可能です。
・ PIC16(14 ビットコア)と PIC18 (16 ビットコア)ターゲットのために最適化されたコー
ドの生成
116
リファレンスマニュアル
・ 構造体と共用体のサポート
構造体と配列は、基本データ型、またはその他の構造体で生成可能です。また、基本デ
ータ型、または構造体による配列を作成可能です。
・ ポインタのサポート - ポインタは、通常通りの方法で使用可能です。
・ インラインアセンブラ
インラインアセンブラは、必要な場所で、アセンブリコードを使用可能にします。
・ インライン関数
インライン関数は、コードのセクションを関数として書き込みますが、参照時には呼び
出しの代わりにインライン関数のコードが組み込まれます。これによりコード実行が非
常に効率的になります。
・ 不要コードの削除
実行されないコード、もしくはデッドコードの除去を行い、コードメモリ使用率を削減
します。
・ 未使用関数の除去
コードメモリ使用率を削減します。
・ 最小のコードページ切替
複数コードページが必要なコードの場合のみ、切り替えを行います。
・ 変数の自動バンク切替
変数の手軽な使用を可能にします。
・ 有効な RAM 使用法
異なるコードセクション内のローカル変数はメモリの共有が可能です。クラッシュ予防
のため、リンカはプログラムを分析します。
・ 関数ポインタ
・ ダイナミックメモリマネジメント
デバッグ機能の特徴
・ ソースレベルとインストラクションレベルのデバッガ
ソースブーストデバッガの下で、リンカは COF ファイル出力を生成します。
・ ステップイン、ステップオーバ、ステップアウト
これらの機能は、ソースレベルとインストラクションレベルで動作します。
・ 複数実行ビュー
コードの実行が、ソースレベルとアセンブリレベルでどの位置にあるかを同時に表示し
ます。
・ モニタリング変数
値を調べるために、ウォッチウィンドウに変数を追加することができます。変数がどこ
に保存されているのかを知る必要はありません。
117
リファレンスマニュアル
MPLAB 統合
・ MPLAB IDE での MPLAB Project Manager の使用
・ MPLAB IDE でのソースコードの作成や編集
・ MPLAB IDE のままでのプロジェクトのビルド
・ MPLAB シミュレータを使用して、ソースレベルのデバッグと多様なモニタリング
・ MPLAB ICD2 を使用して、ソースレベルでのデバッグと多様なモニタリング
・ MPLAB ICE1を使用して、ソースレベルのデバッグと多様なモニタリング
ライブラリアン
・ ライブラリファイルの生成が可能です
これにより通常使用のコードのマネジメントとコントロールが容易になります。
・ コンパイル時間の短縮
ライブラリファイルを使用すると、コンパイル時間の短縮になります。
Code 分析
・ コールツリービュー
ソースブースト IDE では、関数コールツリーを表示することができます。
・ ターゲットコードの使用状況
プログラム全体から関数レベルまで、コードスペースの使用状況を、ソースブースト
IDE で見ることが可能です。
・ ターゲット RAM の使用状況
プログラム全体から関数レベルまで、RAM の使用状況を、ソースブースト IDE で見る
ことが可能です。
メモ:
1) ICE 機能は現時点ではテストされていません。
2) 関数ポインタは、今後のリリース版に載せる予定の機能になります。
Microchip, PIC, PICmicro and MPLAB are registered trademarks of Microchip Technology
Inc.
Other trademarks and registered trademarks used in this document are the property of
their respective owners
Copyright© 2004-2005 Pavel Baranov, David Hobday
118
■トレーニングキット
トレーニングキット
トレーニングキットマニュアル 目次
はじめに ........................................................................................................................... 121
セット内容........................................................................................................................ 121
PIC-P18 トレーナー基板について ................................................................................... 127
ブレッドボードの使い方 .................................................................................................. 129
スイッチとLEDのテスト.................................................................................................. 132
プロジェクトフォルダの準備........................................................................................ 133
フレームワークの作成 .................................................................................................. 134
ソースプログラムの作成............................................................................................... 136
プログラムのコンパイルとシミュレーション............................................................... 138
デバイスのプログラムと動作確認 ................................................................................ 141
割り込みテストプログラム............................................................................................... 143
プロジェクトウィザードの設定 .................................................................................... 144
ソースの修正................................................................................................................. 145
RS232 のテスト................................................................................................................ 147
EEPROMのテスト ........................................................................................................... 149
電子オルゴール................................................................................................................. 151
フルカラーLEDの調光 ..................................................................................................... 153
LCDモジュールの表示 ..................................................................................................... 155
ストップウォッチの製作 .................................................................................................. 159
120
トレーニングキット
はじめに
PIC デバイス学習キットは、日本語版 PIC-C コンパイラが付属した学習キットです。
本キットには、C コンパイラだけではなく、PIC 書き込みソフトウェアや書き込み用ハー
ドウェアなど、PIC デバイスの学習や開発に必要な物が全てそろっているため、購入して、
直ぐに学習が開始できます。
また、実験回路の作成も、ブレッドボードを使用するため、半田付けなどの道具や手間が
必要ありません。半田付けが苦手な人や面倒な人でも、問題なくご利用いただけます。
学習用の基板には、あらかじめ、電源回路や LED、スイッチ、シリアルインターフェース
など、必要最低限の回路が組み込まれています。基板の空きエリアは、2.54mm ピッチの
ユニバーサル基板となっていますので、オリジナルの回路を搭載することも可能です。ま
た、学習基板は、付属の PIC16F84A のほか、18 ピンのタイプの PIC デバイスであれば、
ほとんど使用可能です。詳しくは、弊社 Web 等をご参照下さい。
セット内容
本セットには、以下の物が含まれています。添付品をご確認下さい。
1)PIC-P18 トレーナー基板(PIC18F84A-20 付き)
2)PIC-PG1 PIC プログラマ
3)ソースブースト 6.0(日本語 PIC-C コンパイラ)スタンダード版(SPWriter フリー版
付)
4)AC アダプタ
5)D-SUB9 通信ケーブル(オス-メス)
6)ブレッドボードセット(配線ケーブル 2 種付き)
7)周辺機器セット(LCD モジュール/スピーカ/フルカラーLED/調整用ボリューム/抵抗)
付属品一式
121
トレーニングキット
付属品の説明
画像
内容
P IC R M icrocontroller用 、 日本語Cコンパイラ
W indow s98/M e/2000/X p対応
ソースブースト 6.0
(ピ カントC 6.0日本語版)
■ 主な 特 徴
・日本語Cコンパイラ
・リーズナブルな価格設定
スタンダード版
ROM 4Kワード まで/RAMは無制限
・マルチ言語対応
・仮想デバイスシミュレータ
ソースブースト 6.0・スタンダードライセンス
PIC マイクロコントローラ用の日本語 C コンパイ
ラです。
4K ワードまでのプログラムが作成可能です。
・優れた拡張性
また、PIC 書き込み用ソフトウェアの、SPWriter
シェアウェア版が付属しています。PIC16F84A は、
B
oo
st
C
無制限に書き込むことができます。
※画面の仮想LCDデバイスは、別売のプラグインです
※P IC ,P IC m icro とM P L A B はマイ ク ロチ ッ プ・テ ク ノロ ジ ー 社の 米 国及 び 、 その 他 の国 に お ける 登 録商 標 です。
ウ ィン ド ウ ズは マ イク ロ ソ フト 社 の登録 商 標で す 。
学習キット本体です。PIC16F84A-20MHz が実装さ
れています。
また、基板には、スイッチ、LED、シリアルポート、
電源回路、書き込み用アダプタ接続コネクタが付属
しています。
PIC 書き込み用アダプタです。PC の標準シリアル
ポート(USB 変換コネクタやノートパソコンは使
用不可)から、PIC デバイスを書き込むことができ
ます。
ブレッドボードです。実験回路を組み立てる場合に
使用します。
122
トレーニングキット
ジャンパケーブルです。ブレッドボードで回路を組
み立てる場合に、配線用に使用します。
左から、フルカラーLED、100 オーム抵抗、半固定
抵抗、ジャンパピンです。ジャンパピンは、ジャン
パケーブルのメスピンを、オスピンに変換する場合
に使用します。必要に応じて、カットしてご使用下
さい。ピンには、太い側と細い側があります。必ず、
ジャンパケーブル側が太い方になるように接続し
ます。その他の部品は、それぞれの実験で使用しま
す。
スピーカ
ブザーの実験に使用します。
LCD モジュール
LCD 表示の実験に使用します。
AC アダプタ
PIC-P18-20MHz 用の AC アダプタです。
AC アダプタは、必ず付属のものをご使用下さい。
シリアルケーブル
シリアルケーブルは、PIC デバイスの書き込み時
と、シリアル通信のテストで使用します。
ケーブルは、D-SUB9 ピンの、オスーメスタイプの
ストレートケーブルです。
123
トレーニングキット
PIC16F84A の概要
ここでは、PIC16F84A の概要を説明します。詳しい説明は、PIC16F84A のデータシート
や、一般の解説書をご参照下さい。PIC16F84 の日本語版のデータシートは、以下の URL
からダウンロードできます。
http://ww1.microchip.com/downloads/en/DeviceDoc/30430cj2.pdf
また、PIC16F84A の最新版のデータシート(英語)は、以下の URL からダウンロード可
能です。
http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf
PIC16F84A は、プログラム用のフラッシュメモリを内蔵した、マイクロコントローラ
(CPU)です。プログラムメモリや、RAM、各種周辺回路を内蔵しているため、外部に
クロックオシレータを接続するだけで、動作させることができます。
次の図は、PIC16F84A のピン配置図です。
PIC16F84A には、RA0-4、RB0-7 の 13 本の GPIO があります。GPIO は、ソフトウェア
の制御により、入力ピンや出力ピンに割り当てることができるため、ソフトウェアを用意
することにより、カスタムの IC のような動作をさせることができます。例えば、7 セグメ
ントの LED デコーダのように、4 ビットの BCD 入力に対して、7 セグメントの LED を
点灯させるようなデバイスが必要な場合、PIC16F84A を使えば、簡単なプログラムで実
現することができます。このようなデバイスは、PAL や GAL といた、書き込み可能なハ
ードウェアデバイスでも実現可能ですが、PIC16F84A を使う場合は、使い慣れた C 言語
で記述できますし、ソフトウェア制御ですので、さらに複雑な動作をさせたい場合も、比
較的簡単に行う事ができます。
各ピンの割り当ては、次の表のようになっています。
124
トレーニングキット
また、次の図は、PIC16F84A のブロック図です。
125
トレーニングキット
ここでは、主なブロックについて説明します。
1)フラッシュプログラムメモリ
プログラム格納用のメモリです。実行する
プログラムを書き込んで使用します。
2)RAM
RAM は、図のようにファイルレジスタの
一部となっています。周辺デバイスは、
00H-0BH と 80-8BH のアドレスの範囲にあ
ります。
3)GPIO
GPIO には、PORTA と PORTB の2つがあ
ります。PORTA は、RA0-RA4 までの5ビ
ット、PORTB は、RB0-RB7 の 8 ビットが
使用可能です。
4)タイマ
8 ビットのタイマが使用可能です。入力ク
ロックには、プリスケーラを使用可能です。
また、オーバーフローの割り込みが使用で
きますので、周期割り込みをかけることが
できます。
5)EEPROM
64 バイトの EEPROM を使用可能です。EEPROM は、不揮発性ですので、設定データ
などを保存する場合に便利です。EEPROM はプログラム中から、自由に読み書きする
ことができます。
6)スタック
8 レベルのハードウェアスタックが使用できます。ハードウェアスタックですので、
サイズを変更することはできません。したがって、サブルーチンをネストさせる場合
は、スタックサイズを超えないように、注意する必要があります。
7)ウォッチドッグタイマ
ウォッチドッグタイマは、プログラムが暴走した場合、CPU をリセットするために使
用します。これは、CPU を組み込み機器に使用した場合、万が一プログラムが暴走し
ても、CPU が自動復帰させ、ハングアップを防ぐための機能です。PIC のプログラム
学習の場合は、この機能は、OFF にしたままでよいでしょう。
PIC16F84A の具体的な使い方は、後述するサンプルを参照してください。
126
トレーニングキット
PIC-P18 トレーナー基板について
次の図は、PIC-P18 トレーナー基板の概観図です。
こ の 基 板 に は 、
RS232コ ネクタ
RS232の 実験で、
RSケ ーブルを接続
し ます。
PIC16F84A-20 デバイスの
ICSPコ ネクタ
PIC-PG1を 接続します
DCジ ャック
ACア ダプタを接続します
ほか、20MHz クリスタル
発振子、RS232 ドライバ/
6VAC
9VDC
6 ICSP 1
レシーバ、RS232 コネクタ、
12 -RTS
23-DTR
電源回路、PIC 書き込み用
ICSP コネクタ、リセット
3.3V
リセットスイッチ
PIC16F84Aを リセットします
LEDジ ャンパ
LEDの テストをするときは、
シ ョートします
0123A
PIC-P18
20.000
などが搭載されています。
LED
TX
CTS
RX
RTS/DTR
ュスイッチ、実験用 LED
LEDラ ンプ
LEDの テストで使用します
J1
LED_J
スイッチ、テスト用プッシ
プッシュスイッチ
ス イッチのテストで使用します
また、基板には、ユニバー
サルのエリアがありますの
で、独自の回路や、よく使
う回路を搭載して、様々な
OLiMEX
COPYRIGHT (C) 2005
WWW.OLIMEX.COM/DEV
実験を行う事ができるようになっています。
各部の機能は、次の通りです。
・ DC ジャック
付属の AC アダプタを差し込みます。
・ 3.3V ジャンパ
基板上の回路を 3.3V で動作させる場合にジャンパピンを挿入します。通常は、オープ
ンにして、5V で使用します。
・ ICSP コネクタ
PIC デバイスに書き込みを行う場合、PIC-PG1 を接続して、基板上の PIC デバイスに
書き込みを行う事ができます。書き込みを行う際は、AC アダプタは接続しません。
・ RS232 コネクタ
RS232 のテストを行う場合に使用します。
・ RS232 ドライバ/レシーバ
RS232 の信号レベルを、PIC で使用する信号レベルに変換します。MAX232 相当のデ
バイスが搭載されています。PIC とは、ジャンパケーブルで接続しますので、任意の
ピンに割り当てることができます。
・ DTR/RTS 切り替えジャンパ
RS232 レシーバに入れる信号を、DTR または RTS に切り換えます。
・ LED と LED ジャンパ
LED のテストを行う場合に使用します。LED を接続しない場合は、ジャンパピンを
127
トレーニングキット
外しておきます。
・ テスト用プッシュスイッチ
スイッチのテストを行う場合に使用します。
・ リセットスイッチ
PIC デバイスをリセットします。
・ 水晶振動子
20MHz の水晶振動子が搭載されています。使用しない場合は、取り外すことができま
す。
・ ユニバーサルエリア
任意の回路を構成することができます。
128
トレーニングキット
ブレッドボードの使い方
ここで、簡単にブレッドボードの使い方について説明します。
ブレッドボードは、図のように、格子状にソケットピンが配置されているボードです。
VCCに 接続
通常V CC( 5V )に する
X
X
1
X列 、Y列、A -E、F-G
は 、それぞれ内部で
接 続されている。
5
10
15
20
A
B
C
D
E
A
B
C
D
E
F
G
H
I
J
F
G
H
I
J
1
5
10
15
20
Y
Y
GNDに 接続
通常G NDに する
図の X 列、Y 列のピンは、それぞれ、内部で接続されています。例えば、X 列の1番ピン
に VCC を接続すれば、X 列は全て VCC となります。また、A-E、F-G も、それぞれ内部
で接続されています。
ブレッドボードのピンには、IC や抵抗、コンデンサ、ジャンパケーブルなどが接続できま
すので、任意の回路をボード上につくることができます。この図の例では、IC の1番ピン
が GND、8 番が VCC、2 ピンとピンの間にコンデンサ、5 ピンは抵抗を通して GND に接
続されています。VCC は、PIC16F84A の 14 ピン、GND は、PIC16F84A の 5 ピンから
取ることができます。
本キットに付属しているジャンパケーブルは、片側がピン、もう一方がソケットになって
います。PIC16F84A からブレッドボードへの配線などは、次の図のように、付属のピン
を使用して接続してください。付属のピンは、片側が細く、片側が太くなっています。接
続する際は、ジャンパケーブルのソケットに接続する側が太いピンになるようにして使用
します。
また、ピンは必要に応じて、適当な数でカットして使用してください。
太いピン
細いピン
必要なピン数にカットして使用する
129
IC ソケット、ブレッドボードへ
トレーニングキット
PIC-P18 トレーナー基板の回路
VR
LM317T_NS
1
1
PWR
1
2
3
2
1
D2
DIODE BRIDGE
3.3V
R3
390/1%
R4
240/1%
1
1
3
2
1
DCJACK
+9V INPUT or
AC6V INPUT
VCC
1
+ 2
2
R5
330/1%
2
1
4 -
2 1
C3
22uF/25V
+ C2
C1
2
100uF/16V
0.1uF
2
3
+
2
電源回路
IN
OUT
VREF
次の図は、PIC-P18 トレーナー基板の回路図です。
RS232回路
2
VCC
J1
1
1
2
+
C7
4.7uF/25V
12
3
4
+
C4
4.7uF/25V
5
2 2
6
+
8
VCC
V+
GND
C1-
5V
232
5V
232
C2+
16
EIA232
DTR
11
232
5V
10
232
5V
9
RXD
RTS
TXD
CTS
DTR
13
13
V-
RTS
14
14
12
8
C8 4.7uF/25V
2
15
C2-
7
1
12
UART
11
1
2
3
4
10
9
GND
TX
CTS
RX
DTR/RTS
PIC周辺回路
1
1
VCC
VCC
R5
R6
10K
1
2
3
4
5
6
2
2
10K
VCC
U1
1
2
3
4
5
6
PSW(RED)
2
130
XTAL
1 20MHz
1
1
Reset SW
2
2
1
1
Button
PSW(BLACK)
2
1
2
18PIN_IC_SOCKET
PIC16F84A-20MHz
2
LED R5
330
LED
RA1
RA0
RA7/CI
RA6/CO
VDD
RB7/PGD
RB6/PGC
RB5
RB4/PGM
C10
22pF
C9
22pF
2
1
2
1
RA2
RA3
RA4/TOCKI
RA5/MCLR
GND
RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
ICSP CON
18
17
16
15
14
13
12
11
10
2
1
2
3
4
5
6
7
8
9
LED_J
1
1
2
3
4
5
6
7
8
9
1
6
2
7
3
8
4
9
5
D-SUB9(F)
U2
MAX232N_TI
1
C6
4.7uF/25V
7
C1+
3
2
1
1
+
+
C5
4.7uF/25V
トレーニングキット
1)電源回路
電源回路は、回路を 5V で使用するか、3.3V で使用するかを選択できるようになって
います。デフォルトでは、5V で、3.3V と書かれたジャンパをショートすると、3.3V
となります。今回は、全て 5V で使用します。
2)RS232 回路
RS232 回路は、J1 で、DTR と RTS を切り換えられるようになっています。コネク
タは、PC とストレートケーブルで接続できるようになっています。RS232 ドライバ
/レシーバと PIC デバイスとの接続は、テスト端子を、ジャンパケーブルで接続して、
任意の接続に出来るようになっています。
3)PIC 周辺回路
PIC 周辺回路には、ICSP コネクタ、リセットスイッチ、プッシュスイッチ、LED が
接続されています。LED は、ジャンパを外せば、切り離すことができます。また、
20MHz の水晶発振子が実装されています。プッシュスイッチは RB2、LED は RB3
に接続されています。PIC デバイスの 16 ピン以外は、全てテスト端子に接続されて
いますので、ジャンパケーブルで、任意に配線を行う事ができます。また、水晶発振
子も取り外して、16 ピンをテストピンとして使用することも可能です。発振器内蔵タ
イプの PIC デバイスを使用する場合は、この方法を使って、全てのピンを有効にする
ことができます。
4)ICSP 端子
ICSP 端子は、PIC-PG1 を接続して、PIC デバイスに書き込みを行う場合に使用しま
す。この方法は、PIC デバイスを外さず、基板上で書き込みができますので、非常に
便利です。
なお、書き込みを行う際は、AC アダプタを必ず取り外して行ってください。
5)DC ジャック
付属の AC アダプタを接続します。
131
トレーニングキット
スイッチと LED のテスト
■概要
スイッチ押すたびに、LED が ON./OFF するプログラムを作成する
■サンプルプロジェクトの格納フォルダ
Switch
■ポイント
・ ソースブーストの使い方を理解する
・ シミュレータの使い方を理解する
・ PIC での、GPIO の使い方を理解する
■テスト回路とプログラム
次の図は、このテストで使用する回路です。
1
1
VCC
R5
VCC
1
1
PSW(BLACK)
2
R5
330
LED
RA2
RA3
RA4/TOCKI
RA5/MCLR
GND
RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
RA1
RA0
RA7/CI
RA6/CO
VDD
RB7/PGD
RB6/PGC
RB5
RB4/PGM
18
17
16
15
14
13
12
11
10
2
XTAL
1 20MHz
1
1
1
2
3
4
5
6
7
8
9
C10
22pF
C9
22pF
2
2
U1
1
Button
2
2
10K
2
R6
10K
PIC16F84A-20MHz
2
LED
PIC-P18 トレーナー基板には、テスト用のスイッチと LED が付属していますので、今回
は、これをそのまま使用します。LED のジャンパがきちんとささっていることを確認して
い下さい。
作成するプログラムは、次のようなものです。
・ スイッチを 1 回押すと、LED が点灯する
・ 再度スイッチを押すと、LED が消灯する
・ スイッチを押す度に、上記の動作を繰り返す
・ スイッチのチャタリングを防止する
それでは早速、ソースブーストを使って、プログラムを作ってみましょう。
先ずは、ソースブーストを起動して、設定メニューの「ツール」を選択し、ツール(コンパ
イラ)が、BoostCになっていることを確認してください。
132
トレーニングキット
ソースブーストは、いろいろなコンパイラをインストールして使用できるように設計されて
いますが、それぞれのライセンスは、別途取得する必要があります。通常は、Cコンパイラ
のBoostCで問題ないでしょう。C++言語やPascal、Basicといったコンパイラを使用したい
場合は、別途ライセンスを取得してお使い下さい。
本マニュアルでは、製品に付属する、BoostCを前提に説明します。
(本製品にはBoostCのラ
イセンスが付属しています。期限切れのメッセージが出るような場合は、ライセンスの登録
に失敗している可能性があります。ヘルプ等を参考にして、ライセンスの登録を再度行って
ください。)
ツールがBoostCになっていれば、OKを押して、この画面を閉じます。
プロジェクトフォルダの準備
最初に、プロジェクトを作成するフォルダを用意します。ソースブーストは、プロジェクト
ウィザードで、プロジェクトを作成する際、指定されたフォルダにプロジェクトを作成しま
す。プロジェクトで使用するファイル名が、他のプロジェクトで使用しているファイル名と
同じであった場合、他のプロジェクトのファイルを上書きしてしまう可能性がありますので、
プロジェクト毎にフォルダを用意した方が良いでしょう。
なお、ここで取り上げるテストプログラムのプロジェクトは、サンプルのインストール時に
指定したフォルダ(通常は、c:¥PicTrainer)の下にインストールされています。作成したプ
ロジェクトがうまく動作しない場合は、こちらのフォルダのソースを参照してください。
ここでは、プロジェクトの格納用に、次のフォルダを作成してください。
c:¥PicTest¥Switch
133
トレーニングキット
フレームワークの作成
プロジェクトウィザードを使って、フレームワーク(雛形)を作成します。
プロジェクトメニューから、「プロジェクトウィザード」を選択すると、プロジェクトウィ
ザードのダイアログが表示されます。
ここで、プロパティの保存場所の、パス名のエディットボックスに、プロジェクトフォルダ
名(c:¥PicTest¥Switch)を入力。エディットボックスの右の、ボタンを押して、フォルダ
ツリーから、フォルダを選択することができます。
プロジェクト名には、プロジェクトの名前を入れます。ここでは、プロジェクト名は、
“LedTest”とします。設定項目のターゲットは、PIC16F84を選択し、クロックは、20000000
(20MHz)とします。
次に、画面左側のモジュールウィンドウから、”ターゲット”を選択します。
ここではコンフィグレーションレジスタの設定値を設定します。今回はデフォルトのままで、
次のように設定します。
項目
設定値
パワーアップタイマ
No
ウォッチドックタイマ
No
発振器
HS(more than 4MHz)
コードプロテクション
No
134
トレーニングキット
次に、I/Oポートの設定です。
今回の回路のI./Oの設定は、次のようになっています。
GPIO
機能
RB2
プッシュスイッチ
RB3
LED
RB2はスイッチ入力ですので、入力ピン、RB3はLED出力ですので、出力ピンとなります。
デフォルトでは、全て出力になっているので、ここでは、RB2が入力になるように設定しま
す。
モジュールウィンドウのI/Oポートから、ポートBを選択します。RB2は、ポートBのビット
2です。ウィンドウの右側で、RB2を選択し、これを”In”に変更します。
今回は、タイマは使用しないので、これで準備は完了です。OKを押すと、フレームワーク
が作成され、ワークスペースに、プロジェクトのファイル一覧が表示されます。ここで、プ
ログラムソースの、“LedTest.c”を選択すると、次のような画面になります。
135
トレーニングキット
ソースプログラムの作成
また、対象デバイスは、ウィザードで設定した、PIC16F84になっていますが、実際のデバ
イスPIC16F84Aですので、先ずこれを変更します。
(プロジェクトウィザードでは、代表的
なデバイスのプロジェクトを作成しますので、使用するデバイスに近いタイプのデバイスを
選択して、プロジェクトを作成し、その後、実際のデバイスに設定し直します。)
設定メニューから、ターゲットを選択し、ターゲットのダイアログから、PIC16F84Aを選
択して、OKを押します。
これでデバイスの設定は、完了です。
作成されたフレームワークには、あらかじめ、必要な初期化処理や割り込みの処理ルーチン
などが含まれています。そこで、ソースの先頭の方にある、プラグ間の行の後ろに、次のよ
うに、ビットアサインを追加します。
//Set clock frequency
#pragma CLOCK_FREQ 20000000
//以下の2行を追加
#define SW_BIT
2
#define LED_BIT
3
また、main関数の最終行付近に、whileの無限ループがありますので、これを次のように変
更します。
//Endless loop
while( 1 ){
while(test_bit(portb,SW_BIT));
//スイッチが押されるまで待つ
//LEDを反転させる
if(test_bit(portb,LED_BIT))
clear_bit(portb,LED_BIT);
else
set_bit(portb,LED_BIT);
delay_ms(30);
//チャタリングを無視
while(!test_bit(portb,SW_BIT));
}
136
//スイッチが放されるまで待つ
トレーニングキット
スイッチの状態を調べるには、test_bitという関数を使用します。この関数は、ポートの指
定ビットの状態を返します。スイッチが押されていない状態では、ポートはプルアップされ
ているため、1となり、押されると0となります。したがって、最初にスイッチが押される
まで待つには、
while(test_bit(portb,SW_BIT));
という処理で可能になります。スイッチが押されたら、LEDを反転する処理を行います。
ここでも、test_bit関数を使用し、LEDが点灯中かどうかを調べます。PICのポートは、出
力にしていた場合、出力している状態を読み出すことができますので、このような処理が可
能になります。
最後に、スイッチが放されるまで待ちますが、ここでチャタリング防止のために、ディレイ
関数を呼び出しています。チャタリングは、スイッチのON/OFF時に、スイッチのばねの振
動や、接触表面の状態により、短い時間(通常は、数ミリ~30ms程度)の間、ON/OFFが
繰り返される現象です。チャタリングが発生しても、誤動作しないよう、ここでは30msの
間、スイッチを無視するようにしています。最後に、スイッチがOFFになるのを待つと、1
つの処理が終了になります。この処理は、while文で無限ループになっているため、スイッ
チが押されるたびに、LEDがON/OFFするようになります。
137
トレーニングキット
プログラムのコンパイルとシミュレーション
次に、プログラムを実際に動かす前に、シミュレーションを行ってみましょう。
ソースブーストには、仮想デバイスを使った、シミュレータが内蔵されています。シミュレ
ータを使えば、実際にPICにプログラムを書き込む前に、ある程度の動作の検証を行う事が
できますので、非常に便利です。
プログラムソースのコーディングが終わったら、F7 を押すとプログラムをビルドすること
ができます。
(あるいは、ビルドメニューからビルドを選択するか、ツールボタンのビルドボタンを押
す)
プログラムのシミュレーションを行うには、正常にビルドが完了していなければなりませ
ん。
ビルドが正常に終われば、ソースブーストの出力ウィンドウに、次のようなメッセージが
表示されます。
最後に「完了」と表示されていれば、ビルドは完了です。
エラーが発生した場合は、もう一度、ソースを見直してみてください。
ビルドが正常に終了したら、今度はシミュレーションを行います。
シミュレーションを行うには、ツールボタンのデバッグボタン
を押します。
シミュレーションモードに切り替わると、このてんとう虫が、みどり色のてんとう虫に変
わります。
ソースウィンドウには、先ほど修正したソースが表示され、main 関数の最初のコマンド
に、カーソルが表示されます。
138
トレーニングキット
この緑のカーソルが、現在の実行行を表しています。
ここで、F10 や F11 などを押すと、ステップ実行を行う事ができます。
ここでは、仮想デバイスを使用して、スイッチと LED のシミュレーションを行ってみま
す。
まず、プラグインメニューから、Button を選択します。選択すると、ボタンの仮想デバイ
スウィンドウが表示されます。このウィンドウ上で、マウスを右クリックして、表示され
たメニューから構成を選択すると、次のようなウィンドウが表示されます。
port には、ボタンを接続するポートを選択しますので、
ここでは PortB となります。また、Pin は、ボタンを接
続するピンです。こちらはビット2ですので、2を選択
します。Text には、ボタンに表示するラベルを設定しま
す。これは何でも良いのですが、仮に”PUSH”としてお
きましょう。
設定が完了したら、OK を押すと、先ほどの仮想デバイ
スのボタンに、”PUSH”と表示されることがわかります。
今度は、LED を設定します。
同様に、プラグインメニューから、LED を選択し
ます。ボタンと同様、右クリックで、構成メニュ
ーを開き、Port を PortB、
Pin を 3 に設定します。
また、Led Color は、実際のボードと同じように、
Red にしておきましょう。設定が終わったら、OK
を押します。
これで準備は、完了です。なお、仮想デバイスのウィンドウは、フローティングウィンド
ウですので、ソースウィンドウに張り付いている場合があります。邪魔な場合は、タイト
ルバーをつまんで、適当な場所に移動してください。
139
トレーニングキット
以上の設定が終われば、次のような画面になります。
ここで、F5 または実行ボタンを押すと、シミュレーションが開始されます。
シミュレーションが開始されたら、PUSH ボタンを何回か押してみてください。ボタンを
押す毎に、LED が ON/OFF される様子がわかると思います。最後に実行の中止ボタンを
押して、デバッグボタン
を押すと、元の状態に戻すことができます。
140
トレーニングキット
デバイスのプログラムと動作確認
シミュレーションで問題が無いことを確認したら、実際の基板で動作させて見ることにし
ます。
PC のシリアルポートに、付属のシリアルケーブルを使って、PIC-PG1 を接続します。
PIC-PG1 は、PIC-P18 トレーナー基板の ICSP と書かれた白いコネクタに接続します。
PIC の書き込みを行う際は、AC アダプタは接続しませんので、注意してください。
次に、書き込みソフトウェアの準備です。
ソースブーストの設定メニューから、オプションを選択し、ツールのタブを開きます。イ
ンストール時に、SPWriter をインストールしてあれば、次のような画面が表示されます。
ここで、”デフォルト値”ボタンを押すと、この設定が、デフォルトとして登録されます。
登録が終わったら、そのまま OK を押してください。プログラマの設定がされていない場
合は、SPWriter が正しくインストールされていない可能性がありますので、再度インス
トールを行ってください。
これで、プログラマの設定は完了です。
ソースブーストの画面で、プログラム開始ボタン
141
を押すと、SPWriter が起動されます。
トレーニングキット
SPWriter をソースブーストから起動した場合は、ビルドしたプロジェクトのデバイス名
と HEX ファイルが、自動的に SPWriter に読み込まれます。また、コンフィグレーショ
ンレジスタの内容も、プロジェクトで設定した値が反映されます。PIC-PG1 の接続を確認
し、SPWriter のプログラマが”SPW-10 JDM”となっていて、接続ポートが、PIC-PG1 に
なっていることを確認してください。また、デバイスが正しく PIC16F84A になっている
ことも確認して、プログラムボタンを押してください。次のようなダイアログが表示され
ますので、全てチェックされていることを確認して、OK を押してください。
OK を押すと、プログラムが開始され、しばらくすると、正常終了のメッセージが表示さ
れます。これで書き込みは完了ですので、SPWriter を終了し、PIC-PG1 も外してくだ
さい。これでデバイスの書き込みは完了です。PIC-P18 トレーナー基板に AC アダプタを
接続して、黒いスイッチを何度か押してみてください。LED が先ほどのシミュレーション
と同じように、ON/OFF すれば、テストは成功です。
142
トレーニングキット
割り込みテストプログラム
■概要
周期割り込みを使って、LED を点滅させる
■サンプルプロジェクトの格納フォルダ
Interrupt
■ポイント
タイマと割り込みの使い方を理解する
■テスト回路とプログラム
テスト回路は、スイッチと LED のテストと同じです。ただし、スイッチは使用しません。
ここでは、タイマを使用して、LED を約 0.5 秒毎に ON/OFF させてみることにします。
■ソフトウェアの説明
PIC16F84A には、8 ビットのタイマが内蔵されています。このタイマは、内部のシステム
クロックや、プリスケーラの出力、あるいは外部のクロックで動作させることができます。
PIC のシステムクロックは、発振周波数の 1/4 ですので、今回のボードでは、20/4=5MHz
がシステムクロックとなります。
タイマ割り込みは、タイマがカウントアップして、オーバーフローとなり、FFh から 00h
に変わるところで発生します。例えば、タイマの入力クロックがシステムクロックであれ
ば、1 クロックは、1/5MHz は、0.2μs となります。オーバーフローは、256 回に 1 回発
生しますので、割り込みの周期は、0.2μs×256≒51μs です。これは、0.5 秒の点滅には、
あまりにも早すぎますので、プリスケーラを使用することにします。
プリスケーラは、分周器で、システムクロックを分周してから、タイマに入力することが
できます。PIC16F84A では、最大で 256 分周まで行う事ができます。この場合、割り込
み周期は、さらに 256 倍されますので、割り込み周期は、約 13ms となります。これでも、
まだ短いのですが、割り込み処理ルーチンでカウンタを持たせ、割り込みが 38 回毎に 1
回、LED を反転させれば、0.5 秒周期の点滅が可能になります。
143
トレーニングキット
プロジェクトウィザードの設定
スイッチのテストと同様、新しいフォルダを作成して、プロジェクトを作成します。
ほとんどの設定は、スイッチの場合と同じですが、今回はタイマ割り込みを使用しますの
で、プロジェクトウィザードのタイマの設定を、次の画面のようにします。
タイマでプリスケーラを使用しますので、プリスケーラは Timer0 にします。また、プリ
スケーラレートは(分周比)は、1:256 に設定します。イベントハンドラには、タイマ割
り込みイベントのコールバック関数名を指定します。ここでは、”OnTimer”という名称に
します。
OK を押すと、プロジェクトが作成されます。
144
トレーニングキット
ソースの修正
作成されたソースには、空の OnTimer 関数が用意されていますので、この部分を次のよ
うに修正します。
#define LED_BIT
3
#define SEC_CNT
38
//13.1msx38=0.5Sec
//Timer 0 handler
static void OnTimer( void )
{
static char tcnt=0;
tcnt++;
if(tcnt>=SEC_CNT){
if(test_bit(portb,LED_BIT))
clear_bit(portb,LED_BIT);
else
set_bit(portb,LED_BIT);
tcnt=0;
}
}
これでプログラムは完了です。
先ほどと同じ要領で、PIC-P18 にプログラムを書き込んでテストしてみてください。
LED が約 0.5 秒間隔で点滅すれば、テストは完了です。
なお、このプログラムを、シミュレータでテストする場合は、点滅が非常に遅くなります
ので、注意が必要です。ソフトウェアのシミュレーションは、構造上どうしても、実際の
デバイスよりも動作が遅くなります。これは、デバイスの各種レジスタの状態やピンの状
態など、全ての状態をシミュレーションする必要があるためです。このため、今回のよう
なプログラムのシミュレーションを行うと、点滅が遅すぎて、実際にシミュレーションに
ならない場合があります。このようの場合、デバッグ時のみ、割り込み周期を短くすると、
PC 上でもシミュレーションが出来るようになります。
145
トレーニングキット
割り込み周期を簡単に変更するには、プリスケーラの値を変更する方法が、最も簡単です。
現在のソースでは、プリスケーラの値は、次のように 1:256 に設定されています。
//Set prescaler rate
set_bit( option_reg, PS2 ); //prescaler rate 1:256
set_bit( option_reg, PS1 );
set_bit( option_reg, PS0 );
プリスケーラの値は、PS2:PS0 の値によって、次のように設定されます。
PS2:PS0
TMR0 プリスケーラレート
000
1:2
001
1:4
010
1:8
011
1:16
100
1:32
101
1:64
110
1:128
111
1:256
たとえば、プリスケーラの値を、1:16 にする場合は、先のソースは、次のようになります。
//Set prescaler rate
clear_bit( option_reg, PS2 ); //prescaler rate 1:16
set_bit( option_reg, PS1 );
set_bit( option_reg, PS0 );
146
トレーニングキット
RS232 のテスト
■概要
ソフトウェアで RS232 通信を実現する
■サンプルプロジェクトの格納フォルダ
RS232
■ポイント
・ RS232 の使用を理解する
・ ソフトウェアで RS232 通信を実現する手法を学ぶ
■テスト回路
次の図は、このテストで使用する回路です。
2
VCC
1
C1+
1
1
1
C5
4.7uF/25V
C7
4.7uF/25V
12
3
C1-
4
C4
4.7uF/25V
C2+
18PIN_IC_SOCKET
PIC16F84A-20MHz
XTAL
1 20MHz
5
6
2 2
2
7
4.7uF/25V
C6
+
2
GND
8
5V
232
5V
232
14
13
C2-
12
V-
11
7
8
22pF
2
22pF
VCC
V+
+
232
5V
10
232
5V
9
16
1
C8 4.7uF/25V
2
EIA232
15
14
RXD
13
12
11
GND
1
6
2
7
TXD3
8
4
9
5
10
D-SUB9(F)
9
U2
MAX232N_TI
1
RA1
RA0
RA7/CI
RA6/CO
VDD
RB7/PGD
RB6/PGC
RB5
RB4/PGM
2
+
1
RA2
RA3
RA4/TOCKI
RA5/MCLR
GND
RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
18
17
16
15
14
13
12
11
10
1
2
10K
1
2
3
4
5
6
7
8
9
+
VCC
+
VCC
PIC-P18 トレーナーボードは、次のようにジャンパケーブルを配線してください。
ジャンパケーブルは、片側がメスピンになっていますので、メスピン側には、付属のジャ
ンパピンを使って配線します。
(ジャンパピンは、必要に応じてカットしてご使用下さい。)
12 -RTS
23-DTR
J1
3.3V
6VAC
9VDC
20.000
TX
CTS
RX
RTS/DTR
LED
6 ICSP 1
LED_J
PIC-P18
WWW.OLIMEX.COM/DEV
OLiMEX
COPYRIGHT (C) 2005
0123A
147
トレーニングキット
■RS232 の仕様
RS232 は、比較的単純な、非同期のシリアル通信です。信号レベルは、PIC で使用してい
る 5V のレベルとは異なりますが、レベル変換は、上記回路の MAX232 が行いますので、
プログラムをする場合は、通常の GPIO の制御だけで通信を行う事ができます。
次の図は、一般的な RS232 通信のデータフォーマットです。
1 ビットのデータの幅は、通信速度で決まります。例えば、9600bps の場合は、1 ビット
の幅は、1/9600sec ですので、約 104μs のパルス幅となります。
■ソフトウェアの説明
RS232 シリアル通信の場合、信号線の通常状態は、1(=H)レベルとなっていますので、
初期化時に、出力ピンを1になるように初期化しておきます。9600bps でデータを送信す
る場合は、データの 1 バイトの転送は、次のような手順で行います。
1.出力ピンを0にして、104μs 待つ
2.データの LSB を出力ピンに出力して、104μs 待つ
3.データを右に 1 ビットシフトする
4.2~3を 8 ビット分繰り返す
5.出力ピンを1にして、104μs 待つ
また、データの受信も、ほぼ同じ考え方で受信が可能です。データ受信の場合、データの
開始を調べるため、通信線が、H から L になるのを待つ必要がありますが、データのサン
プルは、データが安定している、クロックとクロックの間の部分で行う必要があります。
そこで、データ受信の手順は、次のようになります。
1.入力ピンを監視し、入力ピンが、H から L になるまで待つ
2.サンプルをクロックの中心にするため、半クロック分(52μs)待つ
3.104μs 待つ
4.受信レジスタを右に 1 ビットシフトし、受信レジスタの MSB に、入力ピンの値をセ
ットする
5.3~4を 8 ビット分繰り返す
6.ストップビット分として、104μs 待つ
以上のように、送受信とも、非常に簡単なアルゴリズムで実装可能です。
このテストでは、起動時に、”PIC16F84A RS232 TEST”と表示し、あとは受信した文字を
そのまま送信するようにしています。ハイパーターミナルなどのターミナルソフトを
PIC-P18 の RS232 コネクタに接続して、テストしてみてください。ソースプログラムは、
サンプルのフォルダのソースを参照してください。
148
トレーニングキット
EEPROM のテスト
■概要
RS232 通信で受信したデータを EEPROM に書き込み、リスタート時にそれを表示する
■サンプルプロジェクトの格納フォルダ
EEPROM
■ポイント
・ EEPROM の使い方を理解する
■テスト回路
このテストでは、RS232 テストで使用した回路をそのまま使用します。
■EEPROM の概要
PIC16F84A には、データ格納用の、64 ビットの EEPROM が内蔵されています。EEPROM
は、電源が切断されても、データが消えたいため、初期化用のデータや、設定値、あるい
は製品毎のシリアルナンバーなどを保存する場合に便利です。
■ソフトウェアの説明
EEPROM のアクセスは、次の 4 つのレジスタで行います。
レジスタ名
機能
eedata
EEROM のデータレジスタ。EEPROM へのアクセスは、すべてこのレジス
タを通して行います。
eeadr
EEPROM のアドレスレジスタ。eedata への読み出しまたは、eedata の書き
込みのアドレスを指定します。
eecon1
EEPROM の制御レジスタ。EEPROM の読み書きの制御を行います。
eecon2
EEPROM の制御レジスタ。不用意に EEPROM を書き換えないため、書き
込みのためのシーケンスを制御するために使用します。
1)EEPROM からの読出し
EEPROM の読出しシーケンスは、次のようになります。
・ eeadr に、読み出したいデータのアドレスをセットする
・ eecon1 の RD ビットを1にする
・ 設定したアドレスのデータが、eedata にセットされるので、eedata を読み出す
以上のように、EEPROM の読出しは、非常に簡単に行う事ができます。
また、EEPROM への書き込みは、次のようになります。
149
トレーニングキット
・ eecon1 の WREN ビットを1にして、EEPROM の書き込みを有効にする
・ eeadr に、データを書き込むアドレスをセットする
・ eedata に、書き込むデータをセットする
・ eecon2 に、0x55 をセットする(書き込みシーケンス1)
・ eecon2 に、0xaa をセットする(書き込みシーケンス2)
・ eecon1 の WR ビットを1にして、書き込みを開始する
・ eecon1 の WR ビットが、0になるまで待つ(書き込みの完了待ち)
EEPROM への書き込みは、通常数 ms 必要としますので、必ず書き込みの完了待ちを行
う必要があります。
サンプルのテストプログラムでは、16 文字の書き込みをテストします。デフォルトでは、
EEPROM に、"*PIC16F84A Test*"という文字が書き込まれています。PC にシリアルケ
ーブルで接続し、ターミナルソフトを起動して、通信状態にしておきます。通信設定は、
9600bps の、8 ビットパリティなし、ストップビット1で、フロー制御無しにしておきま
す。
ターミナルソフトの接続状態で、PIC-P18 トレーナーボードの電源を入れると、起動メッ
セージの後に、"*PIC16F84A Test*"とう文字が表示されます。
次に、文字の入力が促されますので、16 個の適当な文字を打ち込みます。最後に、書き込
みが完了したメッセージが表示されますので、トレーナーボードを再度リセットするか、
電源を入れなおしてください。起動時に表示されるメッセージが、今打ち込んだ文字に変
わっていたら、実験は成功です。
150
トレーニングキット
電子オルゴール
■概要
ソフトウェアで音階を制御して、ブザーによるオルゴールを作成する
■サンプルプロジェクトの格納フォルダ
Sound
■ポイント
・ タイマを使って周波数制御をする
■テスト回路
次の図は、このテストで使用する回路と結線図です。
VCC
1
VCC
RA1
RA0
RA7/CI
RA6/CO
VDD
RB7/PGD
RB6/PGC
RB5
RB4/PGM
18
17
16
15
14
13
12
11
10
100
1
2
SPEAKER
XTAL
1 20MHz
2
18PIN_IC_SOCKET
PIC16F84A-20MHz
1
2
RA2
RA3
RA4/TOCKI
RA5/MCLR
GND
RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
1
1
2
3
4
5
6
7
8
9
10K
2
22pF
2
22pF
12 -RTS
23-DTR
15
20
Y
6 ICSP 1
10
3.3V
5
LED
1
Y
LED_J
F
G
H
I
J
0123A
PIC-P18
F
G
H
I
J
WWW.OLIMEX.COM/DEV
A
B
C
D
E
20.000
20
6VAC
9VDC
15
TX
CTS
RX
RTS/DTR
10
J1
5
COPYRIGHT (C) 2005
X
1
A
B
C
D
E
OLiMEX
X
このプログラムは、タイマ割り込みで、一定周期の割り込みを発生させ、割り込みをカウ
ントして、特定の音階を出すようにしています。ポート A の RA0 ピンに 100Ωの抵抗を
通して、直接スピーカを鳴らすようにしています。
音階を出すには、特定の周期でポートを ON/OFF すれば良いので、サンプルでは、この周
期を作り出すために、タイマ割り込みを使用しています。
タイマ割り込みを、システムクロックをプリスケーラなしに使用すると、タイマ割り込み
151
トレーニングキット
は、20MHz/4/256=1/19,531 周期の割り込みとなります。この割り込みが入る度に、ポー
トを ON/OFF すると、発生する音の周期は、この 2 倍となり、周波数は、19,531 の 1/2
の、約 9.7KHz となります。
真ん中のラの音が、440Hz ですので、これに近くなるよう、割り込みをカウントして、音
階を出すようにします。たとえば、割り込みが 44 回発生する毎にポートを ON./OFF させ
れば、音の周波数は、9700/44=221 で、真ん中のラの、1オクターブ下のラの音となりま
す。
現在一般に使われている平均律では、音が半音上がる毎に、音の周波数が 21/12(≒1.06)
倍だけ高くなります。1 オクターブは、半音ずつカウントすると、12 音ありますので、丁
度 12 音で周波数が 2 倍となる計算です。タイマのカウントを増減させると、音の周期を
変えることになりますが、周期で考えると、半音上の音の周期は、もとの音の周期/1.06
となります。
そこで、先ほどのタイマのカウント値=44を基準に音階を考えると、音階は、次のよう
になります。
#define DO
#define RE
#define MI
#define FA
#define SO
#define RA
#define SI
#define DO2
44
39
35
33
29
26
23
22
//ド
//レ
//ミ
//ファ
//ソ
//ラ
//シ
//ド
また、割り込みのハンドラでは、次のリストのように、与えられた周期をカウントして、
カウント終了時に、ポートを反転させています。周期は、SoundFreq で与えられ、
SoundWork をカウンタとして使用しています。
//Timer 0 handler
static void SoundInt( void )
{
//20MHz/4/256=1/19,531 周期の割り込み
if(SoundFreq){
if(SoundWork){
SoundWork--;
}else{
if(test_bit(SoundPort,SoundBit))
clear_bit(SoundPort,SoundBit);
else
set_bit(SoundPort,SoundBit);
SoundWork=SoundFreq;
}
}else{
clear_bit(SoundPort,SoundBit);
SoundWork=0;
}
}
このサンプルでは、main 関数の中で、簡単な音楽を鳴らすようにしています。この部分
を変更すれば、好きな音楽を鳴らすことができます。
152
トレーニングキット
フルカラーLED の調光
■概要
ソフトウェアで LED の各色の明るさを制御して、ネオンサインのようなカラフルな色を
表示させます。
■サンプルプロジェクトの格納フォルダ
RGB_LED
■ポイント
・ PWM を使って、明るさを制御する
■テスト回路
次の図は、このテストで使用する回路と結線図です。
RGB LED
VCC
1
VCC
18
17
16
15
14
13
12
11
10
RA1
RA0
RA7/CI
RA6/CO
VDD
RB7/PGD
RB6/PGC
RB5
RB4/PGM
1
2 BLUE
1
2
100
1
2 GREEN
1
2
100
1
2 RED
1
2
COMMON
XTAL
1 20MHz
2
18PIN_IC_SOCKET
PIC16F84A-20MHz
1
2
10K
RA2
RA3
RA4/TOCKI
RA5/MCLR
GND
RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
1
1
2
3
4
5
6
7
8
9
100
2
22pF
2
22pF
12 -RTS
23-DTR
15
20
10
15
20
Y
153
6 ICSP 1
5
3.3V
1
Y
LED
F
G
H
I
J
0123A
LED_J
F
G
H
I
J
WWW.OLIMEX.COM/DEV
A
B
C
D
E
20.000
10
PIC-P18
5
6VAC
9VDC
X
1
A
B
C
D
E
TX
CTS
RX
RTS /DTR
X
J1
Red
COPYRIGHT (C) 2005
GND
OLiMEX
Green Blue
トレーニングキット
青色 LED の発明により、LED も赤、青、緑の 3 色が揃い、これらの色の明るさを加減す
ることで、フルカラーの発色を行う事ができるようになりました。
ただし、通常の方法で、PIC で LED を点灯すると、ON と OFF しか制御できないため、
7 色しか表示できません。そこで、PWM のテクニックを使って、明るさの制御を行いま
す。
PWM 制御では、図のようにある一定の時間の間に、LED を ON にする時間を制御します。
この期間内で ON の期間を調整
この方法は、実際には、LED は高速で点滅するのですが、点滅が早いと、人間の目には残
像作用のため、連続的に発光しているように見えます。この場合 ON の期間が短ければ、
暗く点灯しているように見え、ON の期間が長ければ、明るく見えます。したがって、RGB
それぞれの LED の点滅を調整すれば、フルカラーで LED を点灯することができます。
サンプルプログラムでは、割り込みを使って PWM の制御を行っています。明るさを 0~
64 までの 64 段階で調整し、割り込みのエントリーポイントでは、1 回割り込みが入る毎
に、カウンタをインクリメントします。カウンタは、0~63 までカウントし、指定された
明るさとカウンタの値を比較して、カウンタの値が指定された明るさよりも小さい間は、
LED を ON にするようにしています。さらに、色を連続的に変化させるため、次の図の
ようなアルゴリズムで、色を変化させています。
初期設定
緑=0 赤=0 青=63
State0
赤 加算
赤=63
緑=0
State1
青 減算
青=0
State5
緑 減算
State2
緑 加算
青=63
緑=63
State4
青 加算
State3
赤 減算
赤=0
154
トレーニングキット
LCD モジュールの表示
■概要
LCD モジュールにキャラクタを表示させる
■サンプルプロジェクトの格納フォルダ
LCD
■ポイント
・ LCD モジュールを使って、キャラクタを表示させる
■テスト回路
次の図は、このテストで使用する回路と結線図です。
1
XTAL
20MHz
1
1
2
2
22pF
2
22pF
VCC
VCC
VCC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
VCC
1
2
3
4
5
6
7
8
9
2
10K
RA2
RA3
RA4/TOCKI
RA5/MCLR
GND
RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
RA1
RA0
RA7/CI
RA6/CO
VDD
RB7/PGD
RB6/PGC
RB5
RB4/PGM
18
17
16
15
14
13
12
11
10
10K
LCD MODULE
18PIN_IC_SOCKET
PIC16F84A-20MHz
13 14
SC1602 BS*B -SO - GB -K
04/11/14 QC O K 64 0-034
1 2
12 -RTS
23-DTR
10
15
20
Y
155
6 ICSP 1
5
3.3V
1
Y
LED
20.000
F
G
H
I
J
0123A
LED_J
F
G
H
I
J
WWW.OLIMEX.COM/DEV
A
B
C
D
E
6VAC
9VDC
20
TX
CTS
RX
RTS/DTR
15
J1
10
PIC-P18
5
COPYRIGHT (C) 2005
X
1
A
B
C
D
E
OLiMEX
X
トレーニングキット
回路図中のボリュームは、LCD のコントラスト調整用です。小型のドライバを回し、LCD
のコントラストを調整してください。
付属の LCD モジュールは、SC1602B(又は相当品)です。これは 16 桁×2 行の表示が可
能な LCD です。このモジュールには、日立製の LCD コントローラ IC、HD44780 互換の
LCD コントローラが搭載されています。この種の LCD モジュールは、各社から発売され
ていて、LCD の桁数や行数は様々ですが、ほとんどの場合、同じコントローラを搭載して
おり、初期化部分を書き換えれば、同じように使用することができます。
HD44780 は、データバスのほか、RS、R/W、E の 3 つの信号で制御を行います。RS レ
ジスタセレクトで、コマンド(ステータス)レジスタとデータレジスタの何れかを指定し、
R/W は、リードかライトかを指定します。これらの信号のタイミングは次の図のようにな
っています。
プログラムで GPIO を使って制御する場合は、ソフトウェアで、これらのタイミングを作
成します。
データバスは、8 ビットですが、上位 4 ビットを使って、8 ビットのデータを 2 回に分け
てアクセスすることも可能です。サンプルの回路では、信号線の数を節約するために、4
ビットアクセスを使用しています。
156
トレーニングキット
■初期化方法
HD44780 の初期化は、多少癖があり、いくつか、一定時間のウェイトを入れながら処理
しなければなりません。初期化ルーチンは、次のようになっています。
LcdInit は、引数の mode が 4 の時、4bit アクセスになるように初期化します。
void LcdInit(char mode)
{
//ポートの初期化
LCDDIRECTION=LCDWRITE;
LCDPORT=0;
SetBit(RSBIT,CMD);
msdelay(15);
CmWrite(0x30);
msdelay(5);
CmWrite(0x30);
mcsdelay(100);
CmWrite(0x30);
mcsdelay(100);
if(mode==4){
Is4BitMode=true;
CmWrite(0x20);
mcsdelay(40);
LcdCmd(0x28);
}else{
Is4BitMode=false;
CmWrite(0x38);
mcsdelay(40);
}
//起動後、15ms 待つ
//最初に 8 ビットモードにする
//5ms 待つ
//再度 8 ビットモードにする
//100μs 待つ
//再度 8 ビットモードにする
//100μs 待つ
//4 ビットモードにする
//4BitMode Set,5*7font,1/16Duty
//8BitMode Set,5*7font,1/16Duty
//ここから正規のアクセスになる
LcdDisplayMode(false,false,false); //表示を OFF にする
LcdCls();
LcdCmd(0x06);
//EntryMode Set:アドレスインクリメント、カーソル右移動
mcsdelay(40);
LcdDisplayMode(true,true,true); //表示を ON にする
}
※HD44780 の詳しい使い方は、HD44780 のデータシートを参照してください。
■その他の関数
その他、このサンプルでは、次のような関数を用意しています。詳しい動作は、サンプル
ソースを参照してください。
/*====================================================================================
関数名:
LcdCls
機能:
LCD の表示をクリアする。
====================================================================================*/
void LcdCls();
/*====================================================================================
関数名:
LcdDisplayMode
機能:
LCD の表示モードを設定する
disp:
LCD 全体の表示の ON/OFF
cursor:
カーソル表示の ON/OFF
blink
カーソル位置の文字のブリンクの ON/OFF
====================================================================================*/
void LcdDisplayMode(char disp, char cursor,char blink);
/*====================================================================================
関数名:
LcdInit
機能:
LCD の初期化。起動時に 1 回だけ呼び出す
引数の mode==4 の時、4bit アクセス。それ以外は 8bit アクセス
====================================================================================*/
void LcdInit(char mode);
/*====================================================================================
関数名:
LcdPutc
機能:
現在設定されている LCD の DDRAM アドレスへ 1 文字出力する
====================================================================================*/
157
トレーニングキット
void LcdPutc(char c);
/*====================================================================================
関数名:
LcdPuts
機能:
現在設定されている LCD の DDRAM アドレスへ文字列を出力する
====================================================================================*/
void LcdPuts(char *str);
/*====================================================================================
関数名:
LcdInit
機能:
DDRAM のアドレスをセットする
x:列(0~7)
Y:行(0~1)
====================================================================================*/
void LcdXy(char x,char y);
/*====================================================================================
関数名:
LcdWaitReady
機能:
BUSY な間ポーリングして待機する
====================================================================================*/
LCDWaitReady();
/*====================================================================================
関数名:
LcdPuts
機能:
引数 x,y で示された位置へ文字列 s を表示する
====================================================================================*/
LcdOutXy(x,y,s);
■サンプルの実行
サンプルプログラムを実行すると、LCD モジュールに“PIC16F84A Ready.”という文字列
が表示されます。電源投入直後は、電圧が不安定なため、初期化に失敗して、正しく表示
が出ない場合があります。この場合は、基板上の赤いリセットスイッチを押してみてくだ
さい。
なお、LCD モジュールは、別売の拡張プラグインに、仮想モジュールとして含まれていま
す。このプラグインを使うと、LCD モジュールを使った回路のデバッグも、PC 上で容易
に行う事ができます。
158
トレーニングキット
ストップウォッチの製作
■概要
LCD モジュールを使って、ストップウォッチを作成する
■サンプルプロジェクトの格納フォルダ
StopWatch
■ポイント
・ タイマ割り込みの間隔を、任意の時間にする方法を習得する
■テスト回路
回路と結線図は、LCD モジュールの実験で使用したものを、そのまま利用します。
スイッチは、PIC-P18 トレーナ基板の黒いスイッチを利用します。
■プログラムの動作
このサンプルは、1/100 秒のストップウォッチとして動作します。
最初に起動した時は、表示はリセット状態の”00:00:00”となっています。表示は、分:秒:
10ミリ秒という形式です。
ここで、黒いスイッチを1回押すと、ストップウォッチの計測が開始され、表示がカウン
トアップして行きます。再度スイッチを押すと、計測は停止し、計測時間が表示されます。
もう一度スイッチを押すと、リセットされ、最初の”00:00:00”の状態に戻ります。
このように、このプログラムには、3つの状態があり、リセット状態→計測状態→停止状
態の3つが繰り返されます。
サンプルでは、この状態を、TMode という変数に格納し、上記の3つの状態を、それぞれ、
0,1,2 の数値に割り当てています。
1/100 秒毎のカウントアップは、タイマ割り込みを使用し、1/100 秒毎に、測定値をカウ
ントアップしています。
測定値は、分、秒、10 ミリ秒を表す、3 つの変数を用意しています。変数名は、それぞれ、
mCnt,sCnt,msCnt となっています。1/100 秒毎のカウントアップルーチンでは、msCnt
をカウントアップし、msCnt が 100 を超えたら sCnt をカウントアップし、sCnt が 60 を
超えたら、mCnt をカウントアップしています。時間の表示は、タイマ割り込み中は行わ
ず、メインスレッドの中で行っています。これは、割り込みルーチン内の処理を、できる
だけ軽くするためと、BoostC の制限によるものです。BoostC では、メインスレッドと割
り込みスレッドで、同じ関数を呼び出すことができませんので、別の関数を用意するか、
どちらかのスレッドだけからしか呼び出さないようにしなければなりません。詳しくは、
159
トレーニングキット
BoostC のヘルプの、関数と割り込みの説明を参照してください。
■1/100 秒毎の割り込みの作り方
このストップウォッチでは、1/100 秒の精度ですので、1/100 秒の割り込みが必要になり
ます。
タイマの入力クロックは、動作クロックの 1/4 を基準にしています。このクロックをその
まま使った場合、タイマは、256 カウントでオーバーフロー割り込みを発生しますので、
割り込み周期は次のようになります。
割り込み周期=(1/20MHz/4)×256=3.2μs
この周期は短すぎるので、プリスケーラを使用した方が良いのですが、それよりも問題な
のは、3.2μs という値です。これを基準にすると、1/100 秒、即ち 10ms は、この値の 3125
倍ということになりますが、プリスケーラで使用できる、1:2,1:4,1:8,1:16・・・と言った、
2 のn乗の倍数にはならないため、プリスケーラを使用すると、時間に誤差が出てしまい
ます。かといって、割り込み処理ルーチン内部で 3125 をカウントするとなると、処理が
重すぎて、割り込み周期の間に、処理が完了しない恐れがあります。割り込み周期の間に
割り込み処理が完了できないと、その分、次の割り込みまでの時間がずれてしまうため、
ここでも誤差が発生する原因となってしまいます。
そこで、このような問題を解決するため、タイマのリロードのテクニックを使用します。
タイマは、レジスタに割り当てられていますので、プログラム中から、読出しも書き込み
も行うことができます。タイマのオーバーフロー割り込みは、タイマの値が、FF から 00
に変化するところで発生しますので、割り込み処理ルーチンのなかで、タイマの値を再設
定すると、割り込み周期を自由に帰ることができます。例えば、タイマの値を、F0 にセッ
トするような、割り込み処理ルーチンにすれば、割り込み周期は、16 カウント毎になりま
す。
このサンプルでは、プリスケーラを 1:8 に設定し、タイマの周期を 125 になるようにして
います。
このようにすると、割り込みの周期は、
割り込み周期=(1/20MHz/4)×8×125=200μs
となります。これは、50 回の割り込みで、ちょうど 10ms となる値です。
あるいは、プリスケーラは、1:16 にして、25 回ごとにカウントアップしても良いでしょ
う。
タイマの再設定は、
tmr0=0x83;
と書くよりも、
tmr0=-125;
のように、マイナスの値を書くとわかり易いでしょう。この2つは、8 ビット表記では同
じ値となります。
サンプルプログラムでは、タイマの再設定値に、-125 ではなく、-123 としています。これ
は、タイマの再ロードに、2 クロックのペナルティが発生するためです。この動作は、シ
ミュレータで TickCount の値を調べることで、確認することができます。調べ方は、割り
込みルーチンのところにブレークポイントを設定し、プログラムを実行して、ブレークポ
160
トレーニングキット
イントでとまった時の、TickCount の値を調べます。割り込みの間隔は、TickCount の差
の値に、システムクロックの周期を掛けたものになります。また、別売のストップウォッ
チのプラグインを使うと、時間を直読することができます。
■サンプルの実行
サンプルプログラムを書き込んで、実行してみてください。LCD モジュールのテストと同
様、最初に表示が正しくでない場合は、リセットボタンを押してみてください。
161
株式会社ソリトンウェーブ
〒101-0023 東京都千代田区神田松永町 17-15 大野ビル 4F
URL: http://www.solitonwave.co.jp Mail: [email protected]
Fly UP