Приём байта

_root_
Offline
Зарегистрирован: 18.03.2015

Всем привет!
Подскажите как мне решить такую задачу:
Принимаю на ардуино данные по трем линиям: данные, синхроимпульс, CS. Протокол похож на SPI.
Повесил прерывание на линии синхро и в момент срабатывания считываю значение на линии данных примерно так:

b1 |= (digitalRead(4));
b1 = (b1 << 1);

Проблема в том что данные передаются младшим битом вперед. Никак не могу сообразить как мне затолкать их в переменную в обратном порядке: когда младший бит справа.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

А чем не подходит SPI? Насколько знаю там можно настраивать это.

b1 |= (digitalRead(4) << 7); //на положение бита 8
b1 = (b1 >> 1);

Через 8 бит первый принятый будет первым

_root_
Offline
Зарегистрирован: 18.03.2015

NeiroN пишет:

А чем не подходит SPI? 

Протокол похож на SPI - но есть значительные отличия:

1. в посылке 20 бит;

2. скорость - 20kHz.

В таких условиях аппаратный SPI ничего не принимает.

_root_
Offline
Зарегистрирован: 18.03.2015

А такой вариант не прокатит?





b1 |= (digitalRead(4) << 19); //на положение бита 20
b1 = (b1 >> 1);

можно ли сдвинуть значение полученное digitalRead на 19 влево, при b1 - unsigned long ?