culibin 100 писал(а):вот так решил реализовать..что скажите?
При сбросе шины, я делаю так: проверяю пин порта шины (если 0 – значит неисправность, выходим) -> если 1, то порт шины на выход -> пауза 480 мкс -> порт шины на вход -> пауза 60 мкс -> проверяю пин порта шины (если 1 – значит нет сигнала присутствия датчика или обрыв шины) -> если 0, значит пауза 280 мкс -> проверяю пин порта шины (если 0 – значит неисправность…), если 1 значит всё нормуль, инициализация датчика прошла успешно. Вот и все дела… датчик ожидает следующих действий…
вот такая функция у меня получилась..все отлично работает мож кому пригодиться.спасибо всем за помощ.
eror_ds() // шина сидит на portc.2
{ #asm("cli") ; по прерыванию работает динамическая индикация поэтому отключаю
if (wire==0){goto eror1;}; // если 0 значит авария замыкание 1 все норм идем дальше
DDRC |= (1 << 2); // порт на вывод
PORTC &= ~ (1 << 2); // 0 на выход
delay_us(490);
PORTC |= (1 << 2); // 1 на выход
DDRC &= ~ (1 << 2); // порт на ввод
delay_us(60);
if (wire==1){goto eror2;}; // если нет ответа на шине 1 авария обрыв
goto next;//если нет повреждений идем на next
eror1: #asm("sei"); (тут нужные действтия и циклим по метке goto eror1) //короткое замыкание разрешим прерывания для отображения на экране ошибки.
eror2: #asm("sei"); (тут нужные действтия и циклим по меткеgoto eror2) //обрыв
next:
};