LED点滅作った

マイコンで最初にやることといえば、LEDチカチカですね。
Spin でさくっと書いてみます。

Spin コンパイラは大小文字を区別しませんので書き方は自由ですが、
ブロック宣言とレジスタ名は大文字にしてみました。

PUB mainFunc
  DIRA[16] := 1
  repeat
    OUTA[16] := 1
    waitcnt( CNT + CLKFREQ )
    OUTA[16] := 0
    waitcnt( CNT + CLKFREQ )

これを IDE から実行(F10)すると、LED が一つ点滅するはずです。

ちなみにF11で書き込みを行うと、リセット・電源投入後に自律動作するようになります!
書き込み回数には制限(十万回程度?)がありますので、普段は F10 で実行しましょう。

コード内容の解説は続きへ。


PUB は public 関数の宣言で、最初の PUB ブロックがエントリポイントになります。
その他、コード中の単語の意味は、以下のようになります。

  • DIRA
    I/O ピンの入出力方向の指定
  • repeat
    ループ。条件を省略すると無限に繰り返し
  • OUTA
    出力ピンの High/Low 指定
  • waitcnt
    システムカウンタが指定した値になるまでブロックする関数
  • CNT
    現在のシステムカウンタ値
  • CLKFREQ
    現在の動作クロック周波数

Spin 言語ではインデントがブロックを表しますので、PUB~最後の行までが関数本体、
repeat は最後の waitcnt  までのループになります。

waitcnt( CNT + CLKFREQ ) という文は、システムカウンタが
「現在値+秒間クロック数」になるまで待機、つまり1秒間のウェイト処理です。
これにより、プログラム全体の動作は
「16番ピンの出力が1秒毎に High/Low を繰り返す」というものになります。

結構簡単ですね。
Spin コードは全体的に難しいところはないので、ずっとこんな感じで書いていけます。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。