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

 
 
> 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, 12:43
Сообщение #2


Местный
***

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



Цитата(Shamil_Yusupov @ Mar 1 2006, 09:20) *
Это ничего не меняет, значение 0xFF в ней
будет соответствовать -1, при сравнении.

Для того чтобы твой код работал,
cmd надо объявить как short (т.е. двухбайтовую знаковую переменную)

Да нет Шамиль, мне кажется, что это одно и тоже! Ведь состояние сом порта в режиме ожидания 0xff т.е -1!! Даже если я объявлю cmd как short, то прерывание цикла будет при 0xffff -т.е. одно и тоже. Выход я нашел - меня спасло то, что 0xff находится не в начале телеграммы! То есть:
Код

unsigned char cmd;
for(xTemp = 0; xTemp<8; xTemp++)
{
while(cmd = getchar())
        if(cmd != -1 && xTemp == 0) break;

        if(cmd==0xff){ temp2[i]=cmd; break;}

temp1[count]=cmd;        
}
Go to the top of the page
 
+Quote Post
Shamil
сообщение Mar 1 2006, 15:11
Сообщение #3


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

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(andron86 @ Mar 1 2006, 17:43) *
Цитата(Shamil_Yusupov @ Mar 1 2006, 09:20) *

Для того чтобы твой код работал,
cmd надо объявить как short (т.е. двухбайтовую знаковую переменную)

Да нет Шамиль, мне кажется, что это одно и тоже! Ведь состояние сом порта в режиме ожидания 0xff т.е -1!! Даже если я объявлю cmd как short, то прерывание цикла будет при 0xffff -т.е. одно и тоже.

Да, каюсь, не посмотрел описание функции getchar() в Keil.
Я решил, что эта функция описана как int,
и возвращает -1 при отсутствии принятых байтов,
поэтому в цикле while ты ожидаешь поступления байта.
Но судя по описанию эта функция сама дожидается
приема очередного байта.

Зачем же тогда у тебя стоит цикл while ???

Цитата(andron86 @ Mar 1 2006, 17:43) *
Выход я нашел - меня спасло то, что 0xff находится не в начале телеграммы! То есть:

Да это не выход, а затычка.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 08:09
Рейтинг@Mail.ru


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