マクロの仕様

gs2.inc

このマクロを読み込むと初期化とマクロの定義を行います。 初期化部分はアセンブル時にリストに表れますが、マクロ定義は隠されます。

初期化の内容

  1. 使用プロセッサを PIC 16F628A に指定
  2. PIC 16F628A 用のシステム定数を読み込む
  3. PIC の動作設定
    1. Brown-out Reset(電圧変動時にリセット) 不可
    2. DATA Copy Protect 不可
    3. Power Up Timer(Brown-out Reset 時の起動遅延) 不可
    4. Watch Dog Timer(定期的なクリアを怠った時のシステムリセット)不可
    5. Low Voltage Programing(低電圧プログラミングモード)不可
    6. RA5 を Master Clear として使わない
    7. 内部クロック(4MHz)とし、クロックを出力しない
  4. 変数の割り当て領域を 0x20 からとする

マクロ

意味マクロ名引数機能使用法
出力ピンの設定enable_PBなし PORT B を全て出力に割り当て、0 クリアする プログラムの冒頭で使用
出力ピンの設定enable_PAPBなし PORT A のコンパレータを無効にした後、 RA5 以外とPORT B を全て出力に割り当て、0 クリアする (RA5 は出力できないポート) プログラムの冒頭で使用
RA5 のスイッチを監視し、押された度にサブルーチンを呼ぶ sw_init なし 変数を宣言し、初期化する プログラムの冒頭で使用
sw_prg サブルーチン名 RA5 を監視し、スイッチが ON の時、直前のスイッチの状態が OFF の時 だけ引数で指定されたサブルーチンを呼ぶ 無限ループなので、主プログラムに割り当てる
ビジーウェイト bwait_init 待ち時間 変数を初期化し、指定された待ち時間を定義する プログラムの冒頭で使用
bwait_prg なし 指定された待ち時間だけ nop を繰返し、 return する 外部から bwait を call する
カウンター counter_init なし カウンタ変数を宣言し、初期化し、初期状態を表示するため dispcounter を呼んでいる プログラム冒頭で使用
counter_prg 上限値 カウンターを進め表示する inccounter と表示するだけの dispcounter の二つのプログラムを展開する。 外部から、 inccounter , dispcounter を呼ぶ。 counter 値に応じて表示パターンを返す getpat サブルーチンが必要
表示パターン getpat_bit_prg なし W レジスタに値を入れて呼ぶと、その値に応じた表示パターン(下位から 値の数分だけ 1 が埋まったビットパターン)を返す 外部から W レジスタに値を入れた後、 getpat を呼び出す。 パターン数は pat_end - pat_start で与えられる。
表示パターン getpat_num_prg なし W レジスタに値を入れて呼ぶと、その値に応じた表示パターン(7 セグメ ント表示器に対する 16 進数のビットパターン)を返す 外部から W レジスタに値を入れた後、 getpat を呼び出す。 パターン数は pat_end - pat_start で与えられる。
タイマー割り込み timer0_init プリスケーラのモード TIMER0 割り込みを有効にする。 プリスケーラの値を引数に与え、プログラムの冒頭で使う
timer0_prg サブルーチン名 TIMER0 により割り込みが発生するとサブルーチンを呼び出す。 0004h の割り込みベクタに goto timer0 を記述する。 呼び出されたサブルーチンは通常の return で返す。
ポストスケーラ postscale_init 呼び出し頻度 変数を宣言し初期化する。呼び出し頻度を宣言する。 プログラムの冒頭で使う。
postscale_prg サブルーチン名 呼び出し頻度で指定された回数だけ呼び出されたら、一回サブルーチンを 呼び出す。 外部から postscale を呼び出す。
デューティ duty_init なし 変数の初期化 プログラムの冒頭で使う。 このマクロを展開した後、 duty_ratio, duty_period には、それぞれ頻度と周期を入れておく。
duty_prg OFF 時のサブルーチン名, ON 時のサブルーチン名 呼び出される度に、ON 時のサブルーチンか、 OFF 時のサブルーチンかの どちらか一方だけ呼び出す。但し、duty_period 回中、 duty_ratio 回だけ ON 時のサブルーチンを呼び、 その他は OFF 時のサブルーチンを呼び出す。 外部から duty を呼び出す
set_rate_by_counter_prg なし counter レジスタの値を元に getduty で得た値を duty_rate に入れる 外部から set_rate_by_counter を呼び出す。 getduty サブルーチンが必要。
デューティ比パターン getduty_prg なし W レジスタに値を入れて呼ぶと、その値に応じたデューティ比を返す。 W レジスタが 0 の時は最大周期を返す 外部から W レジスタに値を入れた後、 getduty を呼び出す。 パターン数は startduty - endduty で与えられる。 なお、初期化時に 0 を入れて呼び出し、得られた値を duty_period に入れて おく。
PORTA の ON, OFF porta_init なし 変数を宣言 プログラムの冒頭で使用。初期値を patterna に入れる。
porta_prg なし porta_on を呼び出すと patterna の値が PORTA に入る。 porta_off を呼び出すと PORTA は全て OFF になる。 外部から porta_on, porta_off を呼び出す。

坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科