Чтение онлайн

на главную - закладки

Жанры

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

Пак Дэниэл Дж.

Шрифт:

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 каналов */

while ((ATDSTAT & 0x8000) == 0) {

/* проверить окончание преобразования по*/

/*состоянию флага SCF */

;

}

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

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

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

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

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

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

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

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

code_section = 2; /*update code_section variable */

break;

 case 2:

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

/*датчика Холла(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);

}

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

Поделиться:
Популярные книги

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Граф Суворов 7

Шаман Иван
7. Граф Суворов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Граф Суворов 7

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

Седьмая жена короля

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Седьмая жена короля

Новобрачная

Гарвуд Джулия
1. Невеста
Любовные романы:
исторические любовные романы
9.09
рейтинг книги
Новобрачная

Камень Книга двенадцатая

Минин Станислав
12. Камень
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Камень Книга двенадцатая

Газлайтер. Том 19

Володин Григорий Григорьевич
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 19

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Страж Кодекса. Книга II

Романов Илья Николаевич
2. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга II

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Невеста вне отбора

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
7.33
рейтинг книги
Невеста вне отбора

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Невеста снежного демона

Ардова Алиса
Зимний бал в академии
Фантастика:
фэнтези
6.80
рейтинг книги
Невеста снежного демона