■■■ Cソースコードの書き方 ■■■
PICの教科書によってはCのソースコードを次のように書いてあるものがあります。
このスタイルは結構多いですね。
<sample1>
#include <16f88.h> #device ADC=10 #use delay(clock = 8000000) #fuses INTRC_IO, NOWDT, PUT, NOPROTECT, NOMCLR, NOLVP, CCPB0 #use fast_io(a) #use fast_io(b) void main(void) { set_tris_a(0b00000011); set_tris_b(0b00000000); output_B(0b00000000); setup_oscillator(OSC_8MHZ); InitPort(); while(1){ // 無限ループ output_high(PIN_B0); delay_ms(500); output_low(PIN_B0); delay_ms(500); } } |
st2-2の授業ではソースコードのモジュール化,再利用を目指して次のように記述します。
内容はまったく同じ。
#include "..\libs\My16F88.h" |
違いは? その1
sample1の次の箇所が
#include <16f88.h> #device ADC=10 #use delay(clock = 8000000) #fuses INTRC_IO, NOWDT, PUT, NOPROTECT, NOMCLR, NOLVP, CCPB0 #use fast_io(a) #use fast_io(b) |
#include "..\libs\My16F88.h" で置き換えられてあります。コレって何処にある?
PICフォルダのlibsフォルダの中にあります。
#include 読み込みなさいという命令。
「..\」はひとつ上のフォルダのという意味。
つまり,ひとつ上のフォルダに移ったlibsフォルダにあるMy16F88.hファイルの内容を
読み込むということ。
#include "..\libs\My16F88.h"の場所にMy16F88.hファイルの内容を書いたのと同じ
ことになります。
見やすいし,よく使うものなのでソースコードを書くときに再利用できるのです。
違いは? その2
set_tris_a(0b00000011); set_tris_b(0b00000000); output_B(0b00000000); |
この部分をユーザー関数にしていること。これも見やすさのため。
ユーザー関数なし300行のプログラムのmain()がこんなかんじになります。
先頭大文字の関数がユーザー関数です。
void main(void) { long lDuty; //デューティ値 SetAccelIntervalSec(kAccelIntervalSec); // 加速時間の設定 SetDecelIntervalSec(kDecelIntervalSec); // 減速時間の設定 SetMiniDuty(kMiniDuty); InitPort(); // IOの設定 InitParam(); // グローバル変数の初期化 InitPWM(); // PWMの設定 while(1){ //無限ループ lDuty = GetDuty(); // デューティを得る set_pwm1_duty(lDuty); //デューティ出力 delay_ms(kIntervalMs); //kIntervalMs 間隔で制御 } } |