Нужна помощь с программой.Вот исходник:
#include <avr/io.h>
/***************** Функция задержки ****************/
void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
{
unsigned short i, j, k; // объявляем переменные
for (i=0; i<ms; i++) // главный цикл формирования задержки
for (j=0; j<185; j++) // вложенный цикл формирования задержки
k++; // произвольное действие
}
/****************************************************/
int main(void) // начало основной программы
{
DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех выводах порта D,
// включаем подтягивающие резисторы
// ------- Основная программа ---------
while (1) {
if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
{
// ------------------ отъезд назад ------------------
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C
delay(5000);
// --------------------------------------------------
// разворот вправо
PORTC &= ~_BV(PC1); // установить "1" на линии 1 порта C
PORTC |= _BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
delay(5000);
// --------------------------------------------------
}
else
{
// -------------- включаем моторы вперед ---------------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
// -----------------------------------------------------
}
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы
Так вот объясните пожалуйста почему у меня программа начинает роботу со строчек выделенных красным? Робот при включение выполняет сначало эту команду,
а потом уже работает по программе(едит вперёд, если мк получает сигнал от фотодиода, то робот делает отъезд и разварачивается).
И ещё, если я добовляю вот такие строки (выделенные синим), то фотодиоды воспринимают сигнал ни сразу, а через несколько секунд, а без этих строк сразу. Почему так?
#include <avr/io.h>
/***************** Функция задержки ****************/
void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
{
unsigned short i, j, k; // объявляем переменные
for (i=0; i<ms; i++) // главный цикл формирования задержки
for (j=0; j<185; j++) // вложенный цикл формирования задержки
k++; // произвольное действие
}
/****************************************************/
int main(void) // начало основной программы
{
DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех выводах порта D,
// включаем подтягивающие резисторы
// ------- Основная программа ---------
{
DDRD |= _BV(PD0); // Установить линию 0 порта D в "1" т.е. на вывод[/color]
while(1) { // Бесконечный цикл
PORTD &= ~_BV(PD0); // Сбросить бит PD0 в "0" = 0V, светодиод включен
delay(500); // Ждем 0.5 сек.
PORTD |= _BV(PD0); // Установить бит PD0 в "1" = 5V, светодиод выключен
delay(500); // Ждем 0.5 сек.
{
if (!(PIND ^ (1<<PIND1))) // проверить "0" на линии 1 порта D
{
// ------------------ отъезд назад ------------------
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C
delay(5000);
// --------------------------------------------------
// разворот вправо
PORTC &= ~_BV(PC1); // установить "1" на линии 1 порта C
PORTC |= _BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
delay(5000);
// --------------------------------------------------
}
else
{
// -------------- включаем моторы вперед ---------------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
// -----------------------------------------------------
}
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы