Например TDA7294

Форум РадиоКот :: Просмотр темы - Последовательний ввод
Форум РадиоКот
https://radiokot.ru/forum/

Последовательний ввод
https://radiokot.ru/forum/viewtopic.php?f=20&t=52946
Страница 1 из 1

Автор:  Transistor [ Пн авг 15, 2011 21:34:53 ]
Заголовок сообщения:  Последовательний ввод

Подскажите как на СЯх для Пика сделат последовательний ввод даних с одной ножки, те считать 8 бит в одну перемену.
П.С. Лутше кусок кода влепите.

Автор:  Аlex [ Пн авг 15, 2011 22:57:55 ]
Заголовок сообщения:  Re: Последовательний ввод

Как-то примерно так.
Код:
char var=0, i;
for (i=0;i<8;i++){
var <<= 1;
   if( RB0 ) var |=0x01;
}
Циклично двигаем переменную и, в зависимости от состояния порта (в данном случае это RB0), устанавливаем 0-вой бит в переменной.

Автор:  YS [ Пн авг 15, 2011 22:58:44 ]
Заголовок сообщения:  Re: Последовательний ввод

На прерываниях или в цикле? Подразумеваем, что синхронизация есть?

Если поддерживаются прерывания от ножек, то можно сделать так:

Код:

//код в прерывании от ножки синхронизации

bit_count++;

if (bit_count==8)
{
  //если все приняли - обнуляем счетчик бит и уведомляем основную программу, что готово
  bit_count=0;
  byte_received=byte_temp;
  byte_temp=0;
  status|=BYTE_RECEIVED;
}
else
{
  if ([если на приемной ножке "1"])
    byte_temp|=(1<<bit_count);

  bit_count++;
}



В цикле можно так:

Код:

temp_byte=0;
bit_count=0;

while (bit_count<8)
{
  if ([на ножке синхронизации "1"])
    temp_byte|=(1<<bit_count);

  bit_count++;
}

byte_received=byte_temp;
status|=BYTE_RECEIVED;

Автор:  Transistor [ Вт авг 16, 2011 21:15:15 ]
Заголовок сообщения:  Re: Последовательний ввод

Спасибо взял на заметку конструкцию, но повидиму у вас ХАй ТИЧ, а у меня ССЗ компилятор, что та вроде такова:
Код:
for (i=1;i<=7;++i)
 {
output_high (PIN_A1);
output_low (PIN_A1);
if(!input(PIN_A2))
bit_set (kode,i);
 }

Правда ищо сиро, без защити, но работаю над етим.
без вас ненайшолби инструкцию по работе из битами (но можт найшол но очен долго би искал).

Автор:  DX168B [ Вт авг 16, 2011 21:24:48 ]
Заголовок сообщения:  Re: Последовательний ввод

Поинтересуйтесь протоколом 1Wire. Ему для двухстороннего обмена хватает одной ноги МК.
Поищите либы к нему. :)

Автор:  YS [ Вт авг 16, 2011 22:00:05 ]
Заголовок сообщения:  Re: Последовательний ввод

Цитата:
Спасибо взял на заметку конструкцию, но повидиму у вас ХАй ТИЧ, а у меня ССЗ


Это Вы мне? Я писал, вообще не привязываясь к компилятору.

Цитата:
output_high (PIN_A1);
output_low (PIN_A1);


- плохой стиль, ибо компиляторозависимо. Правильнее

Код:
//set bit
var|=bitmask;
//clear bit
var&=~bitmask;
//test bit
if (var & bitmask)
  ...


это будет работать везде без переделок.

Автор:  Transistor [ Вт авг 16, 2011 23:06:19 ]
Заголовок сообщения:  Re: Последовательний ввод

Да я вам. У моево компилятора нету таких операторов в справке от я и сделал вивод что увас другой компилятор. А что чтото не так?

Автор:  YS [ Ср авг 17, 2011 22:46:49 ]
Заголовок сообщения:  Re: Последовательний ввод

Цитата:
У моево компилятора нету таких операторов в справке


Так дело как раз в том, что это (битовые операции) стандарт не компилятора, а самого языка С, потому, естесственно, в справке к компилятору описывать их нет необходимости. И работать это будет везде, потому что это обязаны поддерживать все компиляторы. А вот использовать компиляторо-зависимые конструкции типа output_ххх() - плохой стиль, потому что это будет работать только в одном компиляторе и препятствовать портируемости.

Автор:  DX168B [ Чт авг 18, 2011 13:44:09 ]
Заголовок сообщения:  Re: Последовательний ввод

То есть, стандартные битовые (атомарные) операции не влияют на портируемость кода.
К этому если ещё добавить условную компиляцию и директивы #define для регистров периферии, то такой код можно даже на ARM портировать почти без изменений.

ЗЫ: Если не прав, поправьте.

Автор:  Transistor [ Чт авг 18, 2011 20:58:54 ]
Заголовок сообщения:  Re: Последовательний ввод

А можно какойнибуд хелп по етим операциям для пиков.

Автор:  urry [ Чт авг 18, 2011 21:22:01 ]
Заголовок сообщения:  Re: Последовательний ввод

нет си для пиков, си для авр и си для арм.
Си - он и в африке си, только черный.
Существует отдельный бонус в отдельных компиляторах (хм, уже легче перечислить, где этого бонуса нет :) )
где существует понятие - булевая переменная в принципе и вместо PORTB |=(1<< 3); пишут PORTB.3=1;
Как бы вот
http://electronix.ru/forum/index.php?ac ... t&id=30242
только конкатенация работает не на всех компиляторах, не злоупотребляйте
ага, еще вспомнил
http://www.pic24.ru/doku.php/articles/m ... mic_access
Наслаждайтесь

Автор:  YS [ Пт авг 19, 2011 12:37:01 ]
Заголовок сообщения:  Re: Последовательний ввод

Цитата:
хелп по етим операциям для пиков.


Почитайте про битовые операции в любой книжке по С. Работать они будут и на PIC, и на AVR, и на ARM, и точно так же на x86. Это - стандарт С.

А вот всякие PORTB.3=xxx стухнут при переезде на другой компилятор.

Автор:  DX168B [ Пт авг 19, 2011 16:06:44 ]
Заголовок сообщения:  Re: Последовательний ввод

YS писал(а):
А вот всякие PORTB.3=xxx стухнут при переезде на другой компилятор.

Полностью согласен. Когда я выбирал себе компилятор, то я этот CV AVR сразу же отбросил и остался на WinAVR.
Мне сразу не понравилось это:
Код:
PORTA.2 = 0;

Уж лучше так:
Код:
//C
PORTA&=~(1<<PA2);
//Аналог на АСМе
cbi PORTA, 2

А условия по приёму с пина - вообще красота. :)
Код:
//C
if ((PINA & (1<<PA2)) == 1){...}
//Аналог на АСМе
sbis PINA, 2

Автор:  diehard [ Пт авг 19, 2011 16:30:28 ]
Заголовок сообщения:  Re: Последовательний ввод

var|=bitmask;
y |= (1<<x)
Это будет работать на всех компиляторах, в том числе и на CV

PORTB.3=1;
Это костыль для начинающих и им самим решать, использовать его или нет.

OFFTOP ON
Библиотеки в разных компиляторах разные. И если нужна 100% портируемость, тогда пишите сами все библиотеки. Тогда и не будет проблем при переезде с компилятора на компилятор.
Вспомните так же про прерывания и их объявление. В разных компиляторах разное. и т.д.

Дебаты какой компилятор лучше никогда ни к чему не приводят. Каждый работает на том, на чем нравится/привык.

Если тема про лучший код или полную контролируемость, нужно и асм вспомнить.

На каждом углу кричат Windows must die, а на линуксе редко кого из кричащих увидишь :)))
OFFTOP OFF

Автор:  DX168B [ Пт авг 19, 2011 16:41:05 ]
Заголовок сообщения:  Re: Последовательний ввод

Я вообще стараюсь от языков высокого уровня держаться подальше.
Большая часть проектов у меня на ассемблере. :) На Си у меня только те проекты, которые сложно реализовать на АСМе за короткий срок. :)

Автор:  YS [ Пт авг 19, 2011 18:04:32 ]
Заголовок сообщения:  Re: Последовательний ввод

Цитата:
Дебаты какой компилятор лучше никогда ни к чему не приводят.


Дыг мы не об этом вовсе. :) Мы о том, что фичи всех компиляторов хороши, но стандарт С лучше. :)

Автор:  diehard [ Сб авг 20, 2011 09:57:30 ]
Заголовок сообщения:  Re: Последовательний ввод

+1

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/