■■■ 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の授業ではソースコードのモジュール化,再利用を目指して次のように記述します。
内容はまったく同じ。

<sample2>

#include "..\libs\My16F88.h"
#include "led2.h"

void main(void)
{
    setup_oscillator(OSC_8MHZ);

    InitPort();
    while(1){ // 無限ループ
        output_high(PIN_B0);
        delay_ms(500);
        output_low(PIN_B0);
        delay_ms(500);
    }
}

void InitPort(void)
{
    set_tris_a(0b00000011);
    output_B(0b00000000);
}

違いは? その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 間隔で制御
    }
}