プログラム


//Clock: 8.0MHz 内蔵発振器使用
//Devvice Flags:
//_CP_OFF _CCP1_RB3 _DEBUG_OFF _WRT_ENABLE_OFF
//_CPD_OFF _LVP_OFF _BODEN_OFF _MCLR_ON _PWRTE_ON
//_WDT_OFF _INTRC_IO _IESO_ON__CFG2 _FCMEN_ON__CFG2

void main()
{
  //使用変数の定義
  unsigned int temp;
  unsigned int flag=0,flag2=0,flag3=0;
  unsigned float data;

  //内臓クロック8MHzに設定
  OSCCON.IRCF2=1;
  OSCCON.IRCF1=1;
  OSCCON.IRCF0=1;

  //A/D変換clock設定
  ADCON1.ADCS2=1;
  ADCON0.ADCS1=0;
  ADCON0.ADCS0=1;

  ANSEL = 0b00001000; //RA3のみアナログ使用

  PORTA = 0b00000000; //PORTAを初期化
  TRISA = 0b00001100; //RA3,RA2は入力に設定、他は出力
  PORTB = 0b00000000; //PORTBを初期化
  TRISB = 0b00000000; //ポートBは全出力に設定

  do
  {
    if(PORTA.F2==0)
    {
      PORTB.F3 = 1;
      Delay_ms(100);
      flag=1;
    }
  }while(flag==0);

  do
  {
    //アナログデータの取得 10bit(0~1023)
    temp = ADC_Read(3); //RA3(AN3)アナログ入力
    data=(temp*5.0)/1024;
    if(data>1.4)
    {
      PORTA.F7 = 0;
      PORTA.F6 = 0;
      PORTB.F3 = 0;
      flag2=1;
    }
    else if(data>1.0)
    {
      PORTA.F7 = 1;
      PORTA.F6 = 1;
    }
    else
    {
      PORTA.F7 = 1;
      PORTA.F6 = 0;
      Delay_ms(30);
      PORTA.F7 = 0;
      PORTA.F6 = 0;
      Delay_ms(30);
    }
  }while(flag2==0);

  do
  {
    //アナログデータの取得 10bit(0~1023)
    temp = ADC_Read(3); //RA3(AN3)アナログ入力
    data=(temp*5.0)/1024;
    if(data>=1.45)
    {
      PORTA.F7 = 0;
      PORTA.F6 = 1;
      Delay_ms(20);
      PORTA.F7 = 0;
      PORTA.F6 = 0;
      Delay_ms(40);
    }
    else if(data<1.43)
    {
      PORTA.F7 = 1;
      PORTA.F6 = 0;
      Delay_ms(20);
      PORTA.F7 = 0;
      PORTA.F6 = 0;
      Delay_ms(40);
    }
    else
    {
      PORTA.F7 = 0;
      PORTA.F6 = 0;
      flag3=1;
    }
  }while(flag3==0);
}