Перейти к содержанию
    

Простой протокол для UART на 8051 чтобы послать/принять 10 переменных

Как вариант, использовать 9 бит, для первого байта посылки выставлять его

Упд. Извините, пропустил... Уже так и есть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Arlleex said:

А у ТС с памятью напряг (с ПЗУ, а учитывая это, предполагаю, с ОЗУ еще хуже дела).

Народ, какой буфер? Это 8051-ый - у меня от силы 500 байт ПЗУ, да пара байт ОЗУ на это дело дело осталось. Да и то в стеке. 

Наверное, не буду много придумывать - первый байт 0x80, как идентификатор начала пакета, да и все. А остальные байты буду в 7 бит ограничивать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 минуты назад, syoma сказал:

Народ, какой буфер? Это 8051-ый - у меня от силы 500 байт ПЗУ, да пара байт ОЗУ на это дело дело осталось. Да и то в стеке. 

Неужто программа из десятка строк не влезет в 500 байт???  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jcxz said:

Неужто программа из десятка строк не влезет в 500 байт???  :unknw:

Надеюсь, что влезет, конечно.

Но десятком строк точно не ограничится - пока полазил по коду, оказалось, что не все переменные так легко достать. Это тоже надо будет переделывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уж всяко в 500 байтов можно засунуть обработчик запроса чтения памяти с произвольного адреса произвольной длины и передачу ответа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для передачи 10 байт = 80 бит, без всяких протоколов можно 6 старших бит отвести под "адрес", 2 младших под данные и с диким оверхэдом по количеству передаваемых данных (в 4 раза) слать по два бита в байте, но зато каждый отдельный байт получается вполне "самодостаточным" без каких-либо протоколов.

для передачи массива до 16 байт: for (char i = 0; i < 16*4; i++) uart_send((i<<2) | ((data[i>>4]>>((i<<1)&6)) & 3));

для приёма data[rxbyte>>4] = data[rxbyte>>4] & (~(3 << ((rxbyte>>1)&6))) | ((rxbyte&3) << ((rxbyte>>1)&6));

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно глянуть на бинарный протокол обмена GPS-приёмников Trimble - TSIP: самое оно для 8051 по требуемым ресурсам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...