реклама на сайте
подробности

 
 
> UART 0xFF проблема, считывание 0xff
andron86
сообщение Mar 1 2006, 06:34
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Привет всем, помогите пожалуйста с проблемой!

Никак не могу считать 0xff. Конкретнее:c СОМ порта пытаюсь считать телеграмму с конечным байтом 0xff - все, кроме этого, байты, принимаются без проблем. help.gif

Использую в C8051F124,Keil c51, UART0 38400/1stopbit и такой алгоритм:

Код
  for(Temp = 0; Temp<8; Temp++)
{
while(cmd = getchar())
        if(cmd != -1) break;
          if(cmd==0xff){ temp2[i]=cmd; break;}
temp1[count]=cmd;        
}


помогите студенту, плиз!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andron86
сообщение Mar 1 2006, 16:33
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Цитата(Alechin @ Mar 1 2006, 13:57) *
Советую посмотреть листинг (в котором ассемблерный код - включить такую опцию в компиляторе) и посмотреть, что с чем сравнивается. На самом деле не очень понятно, что вообще Вы хотели сказать, разделив -1 и 0xff - это одно и тоже (для байтовой переменной).

Я и не разделял -1 и 0xff, естественно это одно и тоже!
Цитата
И как понять "состояние порта в режиме ожидания"? Разве getchar возвращает что-либо, если нет принятого символа? Вы что то не допоняли.

Состояние порта - я ожидаю прихода фреймом и подсчитываю их колличесво по 0xff(конечный байт фрейма), а состояние порта high т.е. у меня fffff... Естественно можно также на прямую с SBUF регистра считывать, не используя getchar(), но как есть так есть!
Цитата
Вы что то не допоняли.

Может и верно, чего то не допонимаю!
Цитата
Да это не выход, а затычка.

согласен Шамиль на 100%, но тестовал в течении часа - вроде идёт! glare.gif
Go to the top of the page
 
+Quote Post
Alechin
сообщение Mar 2 2006, 12:54
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Цитата
Состояние порта - я ожидаю прихода фреймом и подсчитываю их колличесво по 0xff(конечный байт фрейма), а состояние порта high т.е. у меня fffff... Естественно можно также на прямую с SBUF регистра считывать, не используя getchar(), но как есть так есть!

Я все равно не понял что такое состояние порта high = ffff - это что, состояние линии приема когда нет передачи? Тогда к флагу завершения пакета 0xff это не имеет отношения. Когда линия приема в "1" getchar будет ждать приема - появления стартового бита, 8 битов данных, стопового бита и т.п.
Или когда нет приема по порту все время передается байт-заполнитель 0xff?

Если же вы ждете пакета, оканчивающего на 0xff - то надо сделать так:
while((*pBuf++ = getchar()) != 0xff) ;
Все - при выходе из цикла буфер содержит принятый пакет.
Но учтите - если порта нет (устройство на другой стороне не отвечает) - цикл будет бесконечны.
Правильнее делать все обработчиком прерывания - принимать байты, сохранять в буфере, по приему признака конца пакета выставлять основной программе флаг готовности.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 03:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016