Страница 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 мс - это очень долго по меркам МК, а я говорил, что в цикле ожидания надо все делать быстро.