#include "ioport.h"
#define OFF 0
#define ON 1
#define NEG 2
void putc(char ch) {
while ((SSR1 & 0x80)==0);
TDR1 = (unsigned char)ch;
SSR1 &= 0x7f;
}
void print(char *str) {
while (*str != 0) putc(*str++);
}
// ================================================================
// IG_BUZZER : ブザーのON/OFF
// ------------------------------------------------------------
// 第1引数> 音階(小さいほど高い)
// 第2引数> ON/OFFフラグ
// ================================================================
void IG_BUZZER(unsigned char snd,unsigned char flag) {
if (flag==0) {
MSTPCRH |= 0x10; // タイマモジュール電源Cut
} else {
// Buzzer P44:TMO1
MSTPCRH &= 0xEF;
TCORA1 = snd; // タイムコンスタントA
TCONRO = 0x00;
TCSR1_ = 0x03; // コンペアマッチAで反転
TCR1 = 0x0B;
STCR = 0x00;
TCNT1 = 0;
}
}
// ================================================================
// IG_KEY : ボタン状態の読み込み
// ------------------------------------------------------------
// 返値> 0:押されていない 1:押されている
// ================================================================
int IG_KEY() {
return ((~P9DR) & 0x01);
}
// ================================================================
// IG_WAITKEY : ボタンが押されるまで待つ
// ================================================================
void IG_WAITKEY() {
while (IG_KEY()!=0);
while (IG_KEY()==0);
}
// ================================================================
// IG_LED : LEDの点灯/消灯
// ------------------------------------------------------------
// 第1引数> ON/OFFフラグ (NEG:状態反転)
// ================================================================
void IG_LED(unsigned char flag) {
if (flag==OFF) {
P9DR |= 0x80;
} else if (flag==ON) {
P9DR &= 0x7F;
} else {
P9DR ^= 0x80;
}
}
int main() {
int i;
// Initialize SCI1
MSTPCRL &= 0xBF; // モジュールストップレジスタ: SCI1動作
SMR1 = 0;
BRR1 = 11; // 19200bps
SCR1 = 0x30;
i = SSR1; // dummy read
SSR1 = 0x80;
// ボタン:P90
// LED : P97 (0:LED ON 1:LED OFF)
P9DDR = 0x80;
print("IrGEAR Hack Hack Hack!!\r\n");
EnableINT;
while(1) {
IG_WAITKEY();
IG_BUZZER(5,ON);
IG_LED(ON);
IG_WAITKEY();
IG_BUZZER(5,OFF);
IG_LED(OFF);
IG_WAITKEY();
IG_BUZZER(8,ON);
IG_LED(ON);
IG_WAITKEY();
IG_BUZZER(8,OFF);
IG_LED(OFF);
}
}
|