レッスンTOPへ

//*****************************************************************************
// タイトル : LesssonC_10
// 作者 : ioio
// 目的 : if文でスイッチをテストし、オンする毎にLEDを点灯/消灯させます。
// 移植 : sec
// マイコン: AT90S2313
// クロック: 10MHz
// Compiler: gcc winAVR
// :
//*****************************************************************************
// 変更履歴
// 2007.05.27(日) 作成
//
//*****************************************************************************
#include "io.h" // デバイス関連の定義を展開

void delay_msec(unsigned int);

void main(void)
{
int sw_chat; // スイッチのチャタリング処理用

DDRB = 0xFE; // PortB b0=Out. b1,b2,b3,b4,b5,b6,b7=In
DDRD = 0x0F; // PortD b0,b1,b2,b3=In

while(1){
if (bit_is_set (PIND, PIND0)){
// スイッチHなら

// if (bit_is_clear (PIND, PIND0)){
// スイッチLなら

// LED出力を排他的論理和でビット反転
PORTB = PORTB ^= _BV(PB0); //PB0ピンをLED ON/OFF

// スイッチのオフ確定待ち。チャタリング処理
sw_chat = 0; // チャタリング処理クリア
while(1){
delay_msec(1); // 1msecの遅延
if (bit_is_set (PIND, PIND0)){
// スイッチHなら sw_chat = 0; // チャタリング処理クリア
}else{
if(++sw_chat == 10){
// スイッチオフで10msec経過したら
break; // while文を終了
}
}
}
}
}
}


//-----------------------------------------------------------------------------
// タイトル : msec単位の遅延関数
// 作成 :2007.05.04(金)
//-----------------------------------------------------------------------------
#define D1MSEC 500
void delay_msec(unsigned int msec)
{
unsigned int cnt;
while(msec--){
cnt = D1MSEC;
while(cnt--);
}
}

//*****************************************************************************
//*****************************************************************************

2ループ経過後

データダウンロード・・・圧縮ファイル














































inserted by FC2 system