Читаем Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С полностью

 init_pwm; /*инициализация ШИМ */

 lcd_print("PWM initialized");

 void delay_25(void); /* задержки на 2,5 с */

 while(1) / *непрерывный цикл */

 {

  read_adc; /* считать текущее значение из АЦП */

  decision; /* принять решение о направлении движения */

 }

} /*конец программы main*/

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

/*initialize_adc: инициализация АЦП контроллера 68HC12             */

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

void init_adc {

 ATDCTL2 = 0x80; /*Установить бит ADPU для подачи питания на АЦП */

 ATDCTL3 = 0x00;

 ATDCTL4 = 0x7F; /* частоту P_CLK установить на 125 кГц */

 /* время преобразования: 32 ATD CLK, */

 /*1 считывание каждые 256 мкс /*

 for(i=0; i67; i++) /*задержка 100 мкс при 8 МГц E_CLK */

 {

  ;

 }

}

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

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

/*read_adc: считывание результатов из АЦП                           */

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

void read_adc {

 ATDCTL5 = 0x50; /*Установить АЦП на режим многоканального,*/

                 /* преобразования 8 каналов */

 while((ATDSTAT 0x8000) == 0)/* проверка бита SCF для окончания */

                               /*преобразования */

 {

  ;

 }

 /* сохранения результата в глобальном массиве */

 sens[0] = ADR7H; /*дальний левый датчик */

 sens[l] = ADR6H; /*средний правый датчик */

 sens[2] = ADR5H; /*центральный датчик */

 sens[3] = ADR4H; /* средний правый датчик */

 sens[4] = ADR3H; /* дальний правый датчик */

 sens[5] = ADR2H; /*датчик Холла*/

}

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

/*decision: решение о повороте основано на информации, полученной от*/

/* пяти датчиков. Порог датчика Холла (hes_threshold) и порог       */

/* оптического датчика (opto_threshold) определяются экспериментально.*/

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

void decision {

 if (sens[5] hes_threshold) { /* датчик Холла нашел "мину", */

  pwm_motors(back_up); /* робот движется назад и определяются */

  /* дальнейшие действия/*

  if (sens[0] opto_threshold) pwm_motors(right_turn);

  else pwm_motors(left_turn);

  for(i=0; i0xFFFF; i++){ /*задержка вращения двигателя */

   for(j=0; j15; j++) {

    ;

   }

  }

 }

 /*если обнаруживает три стенки (тупик), то движется назад */

 else if((sens[2]opto_threshold) (sens[0]opto_threshold)

  (sens[4]opto_threshold)) {

  pwm_motors(back_up);

 }

 /*если стенки спереди и слева, поворачивает направо */

 else if((sens[0]opto_threshold)(sens[2]opto_threshold)) {

  pwm_motors(right_turn);

 }

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже