|
Поддержи наш сайт! |
Через WebMoney
R785211844650
Z210696637574
E368177590409
|
|  | | | |
2x AT89C2051 через UART (1 просматривает)
|
|
TOPIC: 2x AT89C2051 через UART
|
AlexNike (Пользователь)
Новичок
Постов: 3
|
| 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
|
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 2027
|
| В ответ на: 2x AT89C2051 через UART 10.01.2012 21:56 |
Репутация: 167   |
|
красивый и быстрый могут оказаться взаимоисключающими требованиями. ваш код почти нормальный, его можно ускорить, исключив напрасный анализ в том случае, если бит четкности нулевой - в этом случае анализировать R0 не нужно, можно сразу сохранять, куда надо.
а вот сохранение регистра состояния PSW в обработчике прерывания просто необходимо - а у вас его нету.
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
AlexNike (Пользователь)
Новичок
Постов: 3
|
| В ответ на: 2x AT89C2051 через UART 11.01.2012 09:23 |
Репутация: 0   |
|
Понял, спасибо за коменарий! Хотелось бы узнать, как еще можно принимать пакеты (несколько байт).
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 2027
|
| В ответ на: 2x AT89C2051 через UART 11.01.2012 10:18 |
Репутация: 167   |
|
пакет потому и называется пакетом, что помимо самих данных соедржит еще и "обертку": стартовые байты, стоповые байты, контрольную сумму и т.п. служебные поля. все это служит для обеспечения надежной доставки данных. например, мне приходилось работать с пакетами следующего формата: 2 байта FFFF - стартовая последовательность N байт данных (с байтстаффингом) 1 байт контрольной суммы 2 байта FFFE - стоповая последовательность. пока не получен старт - все принятые данные игнорируются. после получения старта начинается прием данных и подсчет контрольной суммы. как только получен стоп - проверяется контрольная сумма (алгоритм расчета должен быть таким, чтобы КС всех байтов данных вместе с байтом контрольной суммы в пакете была равна нулю). если КС неверная - все принятые данные игнорируются, а если верная - обрабатываются.
теперь важное: байтстаффинг. т.к. старт и стоп у нас начинаются с FF, то надо как-то уметь отличать старт-стоп от просто FF внутри данных. для этого используется следующее правило: если внутри данных есть FF, то после этого байта обязательно передается байт 00, который не несет полезной информации, в расчете контрольной суммы не участвует и служит только для отличия FF в данных от FF в старте или стопе.
разумеется, вместо указанных последовательностей старта, стопа и символа байтстаффинга можно использовать любые иные - главное общая логика.
кроме сказанного есть и стандартные протоколы передачи данных пакетами, от простого WAKE до TCP.
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
AlexNike (Пользователь)
Новичок
Постов: 3
|
| В ответ на: 2x AT89C2051 через UART 11.01.2012 19:13 |
Репутация: 0   |
|
Возьму на заметку. Особенно понравился этот момент FF-00. Спасибо за информацию!
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
|
|
|
| | |  |
|