Такой код в МК живет своей жизнью.
CODE:
// ехать вперед
PORTC |= 0b00100100; // на PINC2 и PINC5 подаем высокий уровень сигнала - 5В
PORTC &= ~0b00011000; // на PINC3 и PINC4 подаем низкий уровень сигнала - 0В
while((PIND & 0b00000100) != 0b100) // пока на PIND2 низкий уровень сигнала
{ // ожидание сигнала логической 1
}
PORTC &= ~0b00111100; // стоп - на PINC2-5 подаем низкий уровень
По идее робот должен ехать пока не поступит сигнал логической 1 на PD2, но получается что он только дернуться успевает как будто сигнал поступает уже(на самом деле на PD2 логический 0).
Если, ничего в схеме не меняя, написать так:
CODE:
// ехать вперед
PORTC |= 0b00100100; // на PINC2 и PINC5 подаем высокий уровень сигнала - 5В
PORTC &= ~0b00011000; // на PINC3 и PINC4 подаем низкий уровень сигнала - 0В
while((PIND & 0b00000100) != 0b100) // пока на PIND2 низкий уровень сигнала
{ // ожидание сигнала логической 1
PORTC |= 0b00000010; // подать лог 1 на PC1
_delay_ms(1); // подождать 1 мс
PORTC &= ~0b00000010; // подать лог 0 на PC1
_delay_ms(1);
}
PORTC &= ~0b00111100; // стоп - на PINC2-5 подаем низкий уровень
то работает нормально: дождавшись логической 1 на PC1 "обнуляет" PC2-5. |