Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 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);
}
/*если стенка перед средним правым */
Поделиться:
Популярные книги
Жена проклятого некроманта
Фантастика:
фэнтези
6.60
рейтинг книги
Сын Тишайшего
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Демон
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
30 сребреников
1. 30 сребреников
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Небо в огне. Штурмовик из будущего
Военно-историческая фантастика
Фантастика:
боевая фантастика
7.42
рейтинг книги
Осознание. Пятый пояс
14. Путь
Фантастика:
героическая фантастика
5.00
рейтинг книги
Камень
1. Камень
Фантастика:
боевая фантастика
6.80
рейтинг книги
Блокада. Знаменитый роман-эпопея в одном томе
Проза:
военная проза
7.00
рейтинг книги
Цикл "Отмороженный". Компиляция. Книги 1-14
Отмороженный
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.00
рейтинг книги
Книга 4. Игра Кота
4. ОДИН ИЗ СЕМИ
Фантастика:
фэнтези
боевая фантастика
рпг
6.68
рейтинг книги
Мастер 2
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Новый Рал 2
2. Рал!
Фантастика:
фэнтези
7.62
рейтинг книги
Низший 2
2. Низший!
Фантастика:
боевая фантастика
7.07
рейтинг книги
Под маской, или Страшилка в академии магии
Фантастика:
юмористическая фантастика
7.78