Страница 1 из 1
codevison avr и uart
Добавлено: Вс авг 07, 2011 20:56:16
sawaer
здравствуйте, помогите пожалуйста, второй день мучаюсь.....
Код: Выделить всё
while (1){
putsf("start") ;
if (getchar()=='1'){
putsf("a") ;
}
};
putsf("start") ;
}
в общем с контроллера приходит один раз код "start" и все.... зависает контроллер, ждет пока не придет "1" на него... в общем а мне нужно чтоб он выполнял дальше команды, а не останавливался и ждал "1"
Re: codevison avr и uart
Добавлено: Вс авг 07, 2011 21:08:37
Мастер Ломастер
а чего же вы хотели? вы обращаетесь к функции "ждать символ и вернуть его" - вот МК и ждет прихода символа. не ждите символа - вот и будет вам счастье. не ждать можно двумя способами: используя прерывания, проверяя флаг...
Re: codevison avr и uart
Добавлено: Вс авг 07, 2011 21:11:51
sawaer
а как сделать проверяя флаг?
Re: codevison avr и uart
Добавлено: Вс авг 07, 2011 21:26:39
Мастер Ломастер
Код: Выделить всё
while(!(UCSRA & (1<<RXC))){
// тут делаете свои черные дела, пока НЕ ПРИШЕЛ символ
// разумеется, делаете недолго, маленькими порциями
}
// а вот здесь уже можно считывать символ - он уже пришел и getchar() выполнится мгновенно
Re: codevison avr и uart
Добавлено: Вс авг 07, 2011 21:42:07
sawaer
while(!(UCSRA & (1<<RXC))){
putsf("start") ;
delay_ms(10);
}
if (getchar()=='1'){
putsf("aaaaa") ;
delay_ms(100);}
так ????
Re: codevison avr и uart
Добавлено: Пн авг 08, 2011 07:35:30
Мастер Ломастер
я не знаю, так или не так - вы сами-то представляете, что будет делать ваш код? каждые 10 мс посылать "start", а когда придет в ответ 1 - пошлет "aaaa". если это как раз то, что вам надо - так и есть. причем обратите внимание, что 10 мс - это очень долго по меркам МК, а я говорил, что в цикле ожидания надо все делать быстро.