19.05.2012 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
_GEN_GOTOBOTTOM Ответить

TOPIC: 2x AT89C2051 через UART

#7038
AlexNike (Пользователь)
Новичок
Постов: 3
graphgraph
2x AT89C2051 через UART 09.01.2012 20:55 Репутация: 0  
Здравствуйте!
Подскажите новичку, как арганизавать связь двух МК. А точнее нужно передать пакет из 3ех байт с одного, другому. Конфигурировать порт, настраивать скорость и передавать один байт я умею. То что получилось у меня приведу в листинге. К сожалению мой код прямолинейный, хотелось бы научится писать правильный (красивый) код. Пояснение: все завязано на бите четности, если он = 0, то этот байт первый.
Code:

 ;-----Подпрограмма RS-232----- UART:    JNB    RI,endU     Jnb    RB8,U0        Если бит четности (RB8) = 0 принять как первый байт ;пакета     mov    R0,#0        ; R0 - Счетчик байтов пакета U0:    Cjne    R0,#0,U1     MOV    Byte1,SBUF     inc    R0     jmp    EndU U1:    Cjne    R0,#1,U2     mov    Byte2,SBUF     inc    R0     jmp    EndU U2:    Cjne    R0,#2,Endu     mov    Byte3,SBUF     inc    R0 endU:    Clr    RI     reti

  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7039
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: 2x AT89C2051 через UART 10.01.2012 21:56 Репутация: 167  
красивый и быстрый могут оказаться взаимоисключающими требованиями. ваш код почти нормальный, его можно ускорить, исключив напрасный анализ в том случае, если бит четкности нулевой - в этом случае анализировать R0 не нужно, можно сразу сохранять, куда надо.

а вот сохранение регистра состояния PSW в обработчике прерывания просто необходимо - а у вас его нету.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7040
AlexNike (Пользователь)
Новичок
Постов: 3
graphgraph
В ответ на: 2x AT89C2051 через UART 11.01.2012 09:23 Репутация: 0  
Понял, спасибо за коменарий!
Хотелось бы узнать, как еще можно принимать пакеты (несколько байт).
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7041
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: 2x AT89C2051 через UART 11.01.2012 10:18 Репутация: 167  
пакет потому и называется пакетом, что помимо самих данных соедржит еще и "обертку": стартовые байты, стоповые байты, контрольную сумму и т.п. служебные поля. все это служит для обеспечения надежной доставки данных. например, мне приходилось работать с пакетами следующего формата:
2 байта FFFF - стартовая последовательность
N байт данных (с байтстаффингом)
1 байт контрольной суммы
2 байта FFFE - стоповая последовательность.
пока не получен старт - все принятые данные игнорируются. после получения старта начинается прием данных и подсчет контрольной суммы. как только получен стоп - проверяется контрольная сумма (алгоритм расчета должен быть таким, чтобы КС всех байтов данных вместе с байтом контрольной суммы в пакете была равна нулю). если КС неверная - все принятые данные игнорируются, а если верная - обрабатываются.

теперь важное: байтстаффинг. т.к. старт и стоп у нас начинаются с FF, то надо как-то уметь отличать старт-стоп от просто FF внутри данных. для этого используется следующее правило: если внутри данных есть FF, то после этого байта обязательно передается байт 00, который не несет полезной информации, в расчете контрольной суммы не участвует и служит только для отличия FF в данных от FF в старте или стопе.

разумеется, вместо указанных последовательностей старта, стопа и символа байтстаффинга можно использовать любые иные - главное общая логика.

кроме сказанного есть и стандартные протоколы передачи данных пакетами, от простого WAKE до TCP.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7042
AlexNike (Пользователь)
Новичок
Постов: 3
graphgraph
В ответ на: 2x AT89C2051 через UART 11.01.2012 19:13 Репутация: 0  
Возьму на заметку. Особенно понравился этот момент FF-00.
Спасибо за информацию!
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол