/*
  uarttest program
*/

#include <io2313.h>
#include <interrupt.h>
#include <signal.h>
#include <iso646.h>

/* led utilize routine */
#define LedOn() cbi(PORTD,PD2)
#define LedOff() sbi(PORTD,PD2)

unsigned char LedState = 0;
unsigned long num = 1;
unsigned long tempNum = 1;


SIGNAL(SIG_OVERFLOW0){
  num = num + 1;

}
SIGNAL(SIG_INTERRUPT0)
{
  if(num - tempNum > 1000){
    outp('g',UDR);
    tempNum = num;
  }
}

void TMR0Init(void)
{
  outp(156,TCNT0);
  outp(2,TCCR0);
  outp(inp(TIMSK)|BV(TOIE0),TIMSK);	/* enable TMR0 interrupt */
}
void MCUCRInit(void){
  /*外部割込みの初期化*/
  outp((1<<INT0),GIMSK); /*たち下がりエッジで割り込み*/
  outp((1<<INT0),GIMSK); /*外部割込み許可*/
}
void UARTInit(void)
/* initialize uart */
{
  outp((1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN),UCR);
  outp(25, UBRR);
}
void PortInit(void)
{
  outp(0xfb,DDRD); /* PD2を入力に設定 */
  outp(0xff,DDRB); /* PB0-PB1 PortB for input */
  outp(0x04,PORTB); /* PD2の内部プルアップ抵抗を有効に設定 */
  outp(0x01,PORTD); /*PD1のLEDを光らす */
}
int main(void)
{
  PortInit();
  UARTInit();
  MCUCRInit();
  TMR0Init();
  sei();                 /* enable interrupts */
  
  for (;;) {             /* loop forever */


    if((inp(PIND)&0x04)!=0x00){
      outp(0xff,PORTB);
    }else{
      outp(0x00,PORTB);
    }
    
  }
}