Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Правильно у Леонида Ивановича. Неправильно, но довольно ясно и понятно внутри (EM / КИБИ001):

Отправлено Гудвин (178.204.189.19) 22 марта 2011, г. 13:52
В ответ на: ничего готового на Си по декодированию манчестер-кода в RFID системах я не нашел ,и поєтому решил писать сам. Вот такой планирую алгоритм: отправлено Двоешник 22 марта 2011, г. 12:42


define IC PINB.0 // вход с компаратора


unsigned long Card; // номер карты
unsigned char Group;// групповой код
unsigned char r_buffer[12];

char getbit(void)
{
char tmp_inp;
char b;
tmp_inp=IC;
while (tmp_inp==IC) delay_us(1);
b=IC;
delay_us(354);// 0.75 T 384

if (b==1) b=0;
else b=1;
return (b);
}

unsigned int get_rfid1(void)
{
unsigned char parity=0;
unsigned char in=0;
unsigned char r_n=0;
unsigned char i=0;
unsigned char cnt_rx=0;
unsigned char data=0;
unsigned char state=1;

for (;;)
{
if (state) // здесь ловим преамбулу 9 единиц
{
if(getbit()) cnt_rx++;
else cnt_rx=0;
if (cnt_rx ==9 )
{
cnt_rx =0;
state=0;
}
}
else // принимаем пакет
{
in= getbit(); // примем бит
cnt_rx++;
if (cnt_rx==55) // принят последний бит
{
if (in) return 2; // если не STOP бит - ошибка
data = data >>1;
// здесь проверяем паритет столбцов
r_n=1; // mask
parity=0;
for(in=0;in<4;in++)
{
for(i=0;i<10;i++) parity^= (r_buffer[i]&r_n); // columns
parity^=(data & r_n);
if (parity) return 2;// ошибка паритета column[in]
r_n=r_n<<1;
}

Group=r_buffer[0]; // групповой код
Group=Group <<4;
Group=Group + r_buffer[1];

for(i=2;i<10;i++) // считаем номер карты в перемменную типа UNSIGNED LONG
{
Card=Card <<4;
Card=Card + r_buffer[i];
}
return 1; //OK
}
parity^=in; // вычисляем паритет row[i]
if (r_n==4) // пятый бит
{
if (parity) return 2;// ошибка паритета row[i]
data = data >>1;
r_buffer[i]= data;
i++;
r_n=0; //
data=0;
}
else
{
data=data | in; // принятый бит в младший разряд
data=data << 1; // сдвигаем в старшие разряды
r_n++;
}
}
if (fl_esc != 0) return(0);
}
}

unsigned int get_card(void)
{
while (get_rfid1()==2);
if (fl_esc != 0) return(0);
return(1);
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 63:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru