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

 /* сохранить результаты ATD-преобразования*/

 /* в глобальном массиве char*/

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

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

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

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

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

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

 /*анализ информации датчиков для решения о повороте. Примечание: пороги для*/

 /*датчика Холла(hes_threshold) и для ИК-датчиков (opto_threshold)являются*/

 /* глобальными переменными и определены экспериментально*/

 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; i<0xFFFF; i++) { /*задержка перед вращением двигателя */

   for(j=0; j<15; 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);

 }

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

 /*поворот робота налево */

 else if((sens[2]>opto_threshold) && (sens[4]>opto_threshold)) {

  pwm_motors(left_turn);

 }

 /*если стенка перед средним правым */

 /* датчиком, то полуповорот направо */

 else if (sens[1] > opto_threshold) {

  pwm_motors(half_right);

 }

 /*если стенка перед средним левым */

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

 else if (sens[3]>opto_threshold) {

  pwm_motors(half_left);

 }

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

 else {

  pwm_motors(forward);

 }

}

Если мы хотим подразделить этот код на три части обрабатываемые ОСРВ без прерывания, мы можем вставить точки прерывания после последовательности инициализации ATD и после последовательности записи данных с ATD. Это позволит функции без проблем прерывать и восстанавливать управление процессором. Чтобы выполнять эти изменения, мы должны ввести переменную, которую мы назовем code_section. Эта переменная позволит нам проследить, какая из трех частей кода должна быть выполнена при очередной активности задачи.

int process_turn(int code_section) {

 switch(code_section) {

 case 0:

  /*Инициализация системы ATD */

  ATDCTL2 = 0x80; /*включение ATD */

  ATDCTL3 = 0x00; /*игнорировать доступ при отладке системы */

  ATDCTL4 = 0x7F; /*Снижение частоты таймера P до 125 кГц */

  /*выборка, время преобразования = 32 ATD цикла */

  /* 1 выборка за каждые 256 мкс */

  for (i=0; i<67; i++) {

   /* ожидание 100 мкс при 8 МГц ECLK*/

   ;

  }

  code_section = 1; /*update code_section variable */

  break;

 case 1:

  /*Инициализация ATD-преобразования */

  ATDCTL5 = 0x50; /*Начать многоканальное ATD-преобразование*/

  /* для 8 каналов */

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных