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

 
 
> 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 2 2006, 19:11
Сообщение #2


Местный
***

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



to Алёхин!

спасибо Вам что не оставляете в беде cheers.gif

Но я сам не пойму, почему у меня такие глюки - толи getchar()(uVison2) глючит, толи контроллер??? по идее достаточно:
Код
unsigned char cmd;
for(xTemp = 0; xTemp<8; xTemp++)
{
cmd = getchar();
if(cmd==0xff){ temp2[i]=cmd; break;}
temp1[count]=cmd;        
}

но у меня????? getchar постоянно возвращает 0xff, т.е. постоянно в режиме high??????? Flag read UART постоянно 1 - т.е. принят байт(убираю программно - но опять, при заходе в цикл, включает 1. p.s. на buse тишина??? )!!!!!! Я думаю. может кирдык ему(контроллеру) пришёл, но проблема, что их два(борта) и у обоих эта заноза!
Сегодня, опять же бился с другой проблемой - 16 битным Timer'ом! Ну никак правильно тикать не хочет - дурдом(p.s. использовал алгортитм с silabs - example)!!
Не знаю, может у меня опыта с 8051 от silaba нету? Хотя, вроде бы с ихней paging разобрался, в принципе как и все 8051'е!
Go to the top of the page
 
+Quote Post
SSerge
сообщение Mar 3 2006, 10:11
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(andron86 @ Mar 3 2006, 01:11) *
Но я сам не пойму, почему у меня такие глюки - толи getchar()(uVison2) глючит, толи контроллер??? по идее достаточно:
Код
unsigned char cmd;
for(xTemp = 0; xTemp<8; xTemp++)
{
cmd = getchar();
if(cmd==0xff){ temp2[i]=cmd; break;}
temp1[count]=cmd;        
}

Вы в stdio.h давно не заглядывали?
Там можно найти строчки, которые заставят задуматься:

#ifndef EOF
#define EOF (-1)
#endif
...........
int getchar(void);

Это значит, что функция getchar() возвращает значение типа int, ну так опишите свою переменную как int и используйте символическое имя EOF чтобы не морочить себе голову тонкостями преобразования типов и способов представления отрицательных чисел.
Ещё полезно почитать какой-нибудь учебник по языку С, да вот хотя-бы K&R, в первой-же главе (цитата):

Основная проблема заключается в том, чтобы зафиксировать конец файла ввода. Обычно, когда функция getchar наталкивается на конец файла ввода, она возвращает значение, не являющееся действительным символом; таким образом, программа может установить, что файл ввода исчерпан. Единственное осложнение, являющееся значительным неудобством, заключается в существовании двух общеупотребительных соглашений о том, какое значение фактически является признаком конца файла. Мы отсрочим решение этого вопроса, использовав символическое имя EOF для этого значения, каким бы оно ни было.
...................

Использование символической константы EOF для представления значения, возвращаемого функцией getchar при выходе на конец файла, гарантирует, что только одна величина в программе зависит от конкретного численного значения.

Мы также описали переменную 'c' как int, а не char, с тем чтобы она могла хранить значение, возвращаемое getchar . Как мы увидим в главе 2, эта величина действительно int, так как она должна быть в состоянии в дополнение ко всем возможным символам представлять и EOF .


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post



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

 


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


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