Доброго времени суток, коллеги!
Ситуация следующая, имеется некий девайс ТЫК, от которого есть возможность принимать данные по UART (TTL уровни).
Для того, чтоб девайс передал данные - необходимо послать ему запрос 0xAA (в hex), в ответ он присылает блок информации размером 15 байт.
запрос делаю следующим образом:
Код:$regfile = "m8def.dat" $crystal = 8000000 $baud = 38400 dim Otvet as string*15 do Print Chr(170)
Chr(170) применил как раз для инициализации отправки данных с девайса (в HEX это 0xAA)/
Вопрос теперь такой, все 15 байт отправляются сразу в UART, а как их от туда считывать?
Смысл такой, что необходимо принять данные с девайса, обработать их и использовать в дальнейшем.
Подскажите, как можно принять 15 байт по UART и запихать их в переменную Otvet?!
конкретно про передачу данных из девайса сказано
Интерфейс обмена данными по UART
Предлагаемый прибор имеет возможность выдачи результатов измерений через стандартный последовательный интерфейс UART. Т.о. можно использовать его в составе более сложных устройств либо подключать его к компьютеру для автоматизированного сбора информации.
Параметры обмена данными – 38400, 8N1.
Протокол обмена очень прост – по однобайтовой команде 0xAA контроллер выдаёт блок информации размером 15 байт следующего формата – табл. 1.Таблица 1.
Смещение, байт Длина, байт Назначение
0 2 Напряжение, В
2 2 Ток lo, мА
4 2 Ток hi, мА
6 1 Признак канала: 0 – low, 1 - hi
7 2 S, ВА
9 2 P, Вт
11 2 Q, Вар
13 1 cos (φ) * 100
14 1 φ, градусы
Следует отметить следующую особенность протокола – все величины передаются в целочисленном формате (токи в миллиамперах, косинус, который всегда меньше 1, умноженным на 100). Это сделано по следующим причинам:
- целые числа занимают меньше места – 1 или 2 байта. Числа с плавающей точкой в используемом диалекте языка Си – всегда 4 байта. Кроме того, все выдаваемые величины укладываются в целочисленный формат без каких-либо значимых потерь точности.
- т.к. заранее неизвестно, вычислительная система какой архитектуры будет подключена к прибору, то формат плавающих чисел может оказаться совершенно иным, чем применяемый в приборе, что внесёт дополнительные сложности в декодирование блока данных.Двухбайтовые числа передаются в формате т.н. маленького индейца – т.е. сперва идёт младший байт, затем старший.
Также имеют место особенности:
- возможность калибровки и считывания калибровочной информации через UART отсутствует;
- в режиме калибровки интерфейс UART недоступен (МК не реагирует на него). Запросы данных, присланные в то время, пока шла калибровка теряются;
- МК может отсылать информацию примерно раз в секунду (после оконцания замеров и вычисления всех измеряемых величин), это следует учитывать при разработке системы опроса прибора. Поэтому не стоит «заваливать» его запросами данных, это может помешать работе измеряющего модуля.
