組み込みマイコン初歩の初歩 本文へジャンプ
簡単なプログラミング

マイコンボード回路図はこちらからダウンロードできます。


マイコンボードに使用しているATMEL社 ATmega168のデータシートはこちら(PDF 容量約3MB)

■LEDの点灯

I/Oポートを使用してLEDを点灯します。

【プログラム例】
#include <avr/io.h>

main()
{
//DDRCレジスタを出力に設定します。
// 各ビット 0が入力 1が出力
// 全部出力設定なので
// 128+64+32+16+8+4+2+1=255
DDRC=255;   

//ポートCに出力したい値をかきこみ、出力します。
//緑のLEDだけ点灯させます。
PORTC=16+4+1;   
}



■スイッチ入力
I/OポートでINPUT動作を行います。

(ハードの準備)
基板の左側にあるS1にスイッチをつけます。
R14にプルアップ抵抗を4.7kΩとりつけます。

【プログラム例】
#include <avr/io.h>

main()
{
 int i;      //
 
 DDRC=255;   //C ポートを出力設定
 PORTC=0;    //LED消去

 DDRD=0;     //D ポートを入力に設定
 PORTD=255;   //ポートD プルアップ抵抗をON
 
 for(; ;)    //無限に繰り返す
 {
  i=PIND;  //ポートDの状態を変数iに代入
  PORTC=i;
 }
}

このプログラムを実行すると、
Dポートに接続したスイッチを押すと対応したビットのCポートのLEDがON/OFFします。
(S1の場合D3のLEDがON/OFFします)

スイッチONでLEDがOFF、スイッチOFFでLEDがONします。なぜ、そうなるかは検討してみてください。
また、スイッチONでLEDがON、スイッチOFFでLEDがOFFになるようなプログラムにチャレンジしてみてください。

■LEDの順次点灯
ウエイトを入れて点灯間隔を調整してます。

#include <avr/io.h>
void wait(int x);

main()
{
 DDRB=255;
 DDRC=255;
 DDRD=255;

while(1)
{
 PORTB=2;
 wait(10);
 PORTB=4;
 wait(10);
 PORTB=8;
 wait(10);
 PORTB=0;
 wait(10);
 PORTB=255;
 wait(10);

 PORTC=1;
 wait(4);
 PORTC=2;
 wait(4);
 PORTC=4;
 wait(4);
 PORTC=8;
 wait(4);
 PORTC=16;
 wait(4);
 PORTC=32;
 wait(4);

 PORTD=255;
 wait(10);
 PORTD=0;
 wait(10);
 }
}

void wait(int x)
{
int i,j;
int a;

 for(i = 0;i < x;i++)
 {
  for(j = 0;j < 1000;j++)
  {
  a=1; //wait用にダミーの命令
  }

 }
}


◎プログラム例の募集をしております。皆様の執筆をお願いします。