/* Система управления роботом, движущимся в лабиринте: это система */
/* состоящих из излучателя и приемника, чтобы определять свое положение*/
/* относительно стенок лабиринта. */
/* опорного напряжения, то стенка находится в непосредственной близости*/
/* от робота.Основываясь на информации, получаемой от пяти датчиков,*/
/* робот может определять, какое направление дальнейшего движения */
/* избрать, чтобы избежать столкновения со стенками лабиринта. */
/* Датчик Холла позволяет роботу обнаружить магниты или "скрытые мины",*/
/* установленные под полом лабиринта. Робот имеет также ЖК дисплей */
/* для сообщения информации пользователю. Программа использует метод*/
/* полинга для считывания результатов АЦП.Сигнал модуля ШИМ */
/* управляет драйвером двигателей колес робота. */
/*Автор: Томас Шеи. Дата создания: 18 октября 2002 */
/*Последняя редакция: 4 декабря 2002 */
/********************************************************************/
/* Включенные файлы*/
#include 912b32.h
#include stdio.h
/*Пороги датчиков были определены экспериментально*/
#define opto_threshold 0x50 /* порог оптического датчика */
#define hes_threshold 0x80 /* порог датчика Холла */
#define forward 0
#define half_left 1
#define half_right 2
#define left_turn 3
#define right_turn 4
#define back_up 5
/*глобальные переменные*/
unsigned int i=0,j=0; /*переменные для программной задержки */
unsigned char sens[6]={0, 0, 0, 0, 0, 0};/*массив результатов АЦП */
/*прототипы функций*/
void init_adc(void); /*инициализация АЦП */
void read_adc(void); /*считывание значений АЦП */
void decision(void); /*передача решения о повороте, основанного на */
/*данных АЦП* /
void init_pwm(void); /*инициализация ШИМ */
void pwm_motors(const char a); */активация ШИМ для пересылки */
void lcd_init(void); /* инициализация дисплея */
int putchar(char c); /*вывод символа на дисплей */
int putcommand(char с); /*вывод команды на дисплей */
void delay_25(void); /*подпрограмма задержки на 2,5 с */
void lcd_print(char *string); /*вывод строки на ЖК дисплей */
void main {
asm(".area vectors(abs)\n" /*инициализация вектора сброса МК */
" org 0xFFF8\n"
" .word 0x8000, 0x8000, 0x8000, 0x8000\n"
".text");
lcd_init; /*инициализация ЖК дисплея */
lcd_print("LCD initialized");
void delay_25(void); /* задержки на 2,5 с */
init_adc; /*инициализация АЦП */
lcd_print("ADC initialized");
void delay_25(void); /* задержки на 2,5 с */