Последовательний ввод
-
Transistor
- Прорезались зубы
- Сообщения: 209
- Зарегистрирован: Пт авг 27, 2010 18:05:09
Последовательний ввод
Подскажите как на СЯх для Пика сделат последовательний ввод даних с одной ножки, те считать 8 бит в одну перемену.
П.С. Лутше кусок кода влепите.
П.С. Лутше кусок кода влепите.
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Последовательний ввод
Как-то примерно так.Циклично двигаем переменную и, в зависимости от состояния порта (в данном случае это RB0), устанавливаем 0-вой бит в переменной.
Код: Выделить всё
char var=0, i;
for (i=0;i<8;i++){
var <<= 1;
if( RB0 ) var |=0x01;
}
Последний раз редактировалось Аlex Пн авг 15, 2011 22:58:47, всего редактировалось 1 раз.
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
- Прорезались зубы
- Сообщения: 209
- Зарегистрирован: Пт авг 27, 2010 18:05:09
Re: Последовательний ввод
Спасибо взял на заметку конструкцию, но повидиму у вас ХАй ТИЧ, а у меня ССЗ компилятор, что та вроде такова:
Правда ищо сиро, без защити, но работаю над етим.
без вас ненайшолби инструкцию по работе из битами (но можт найшол но очен долго би искал).
Код: Выделить всё
for (i=1;i<=7;++i)
{
output_high (PIN_A1);
output_low (PIN_A1);
if(!input(PIN_A2))
bit_set (kode,i);
}
без вас ненайшолби инструкцию по работе из битами (но можт найшол но очен долго би искал).
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Последовательний ввод
Поинтересуйтесь протоколом 1Wire. Ему для двухстороннего обмена хватает одной ноги МК.
Поищите либы к нему.
Поищите либы к нему.
I am DX168B and this is my favourite forum on internet!
- Реклама
Re: Последовательний ввод
Это Вы мне? Я писал, вообще не привязываясь к компилятору.Спасибо взял на заметку конструкцию, но повидиму у вас ХАй ТИЧ, а у меня ССЗ
- плохой стиль, ибо компиляторозависимо. Правильнееoutput_high (PIN_A1);
output_low (PIN_A1);
Код: Выделить всё
//set bit
var|=bitmask;
//clear bit
var&=~bitmask;
//test bit
if (var & bitmask)
...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
-
Transistor
- Прорезались зубы
- Сообщения: 209
- Зарегистрирован: Пт авг 27, 2010 18:05:09
Re: Последовательний ввод
Да я вам. У моево компилятора нету таких операторов в справке от я и сделал вивод что увас другой компилятор. А что чтото не так?
Re: Последовательний ввод
Так дело как раз в том, что это (битовые операции) стандарт не компилятора, а самого языка С, потому, естесственно, в справке к компилятору описывать их нет необходимости. И работать это будет везде, потому что это обязаны поддерживать все компиляторы. А вот использовать компиляторо-зависимые конструкции типа output_ххх() - плохой стиль, потому что это будет работать только в одном компиляторе и препятствовать портируемости.У моево компилятора нету таких операторов в справке
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Последовательний ввод
То есть, стандартные битовые (атомарные) операции не влияют на портируемость кода.
К этому если ещё добавить условную компиляцию и директивы #define для регистров периферии, то такой код можно даже на ARM портировать почти без изменений.
ЗЫ: Если не прав, поправьте.
К этому если ещё добавить условную компиляцию и директивы #define для регистров периферии, то такой код можно даже на ARM портировать почти без изменений.
ЗЫ: Если не прав, поправьте.
I am DX168B and this is my favourite forum on internet!
-
Transistor
- Прорезались зубы
- Сообщения: 209
- Зарегистрирован: Пт авг 27, 2010 18:05:09
Re: Последовательний ввод
А можно какойнибуд хелп по етим операциям для пиков.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
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
Наслаждайтесь
Си - он и в африке си, только черный.
Существует отдельный бонус в отдельных компиляторах (хм, уже легче перечислить, где этого бонуса нет
где существует понятие - булевая переменная в принципе и вместо 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
Наслаждайтесь
Re: Последовательний ввод
Почитайте про битовые операции в любой книжке по С. Работать они будут и на PIC, и на AVR, и на ARM, и точно так же на x86. Это - стандарт С.хелп по етим операциям для пиков.
А вот всякие PORTB.3=xxx стухнут при переезде на другой компилятор.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Последовательний ввод
Полностью согласен. Когда я выбирал себе компилятор, то я этот CV AVR сразу же отбросил и остался на WinAVR.YS писал(а):А вот всякие PORTB.3=xxx стухнут при переезде на другой компилятор.
Мне сразу не понравилось это:
Код: Выделить всё
PORTA.2 = 0;
Код: Выделить всё
//C
PORTA&=~(1<<PA2);
//Аналог на АСМе
cbi PORTA, 2
Код: Выделить всё
//C
if ((PINA & (1<<PA2)) == 1){...}
//Аналог на АСМе
sbis PINA, 2
I am DX168B and this is my favourite forum on internet!
-
diehard
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Вт дек 05, 2006 23:17:02
- Откуда: Краснодарский край
Re: Последовательний ввод
var|=bitmask;
y |= (1<<x)
Это будет работать на всех компиляторах, в том числе и на CV
PORTB.3=1;
Это костыль для начинающих и им самим решать, использовать его или нет.
OFFTOP ON
Библиотеки в разных компиляторах разные. И если нужна 100% портируемость, тогда пишите сами все библиотеки. Тогда и не будет проблем при переезде с компилятора на компилятор.
Вспомните так же про прерывания и их объявление. В разных компиляторах разное. и т.д.
Дебаты какой компилятор лучше никогда ни к чему не приводят. Каждый работает на том, на чем нравится/привык.
Если тема про лучший код или полную контролируемость, нужно и асм вспомнить.
На каждом углу кричат Windows must die, а на линуксе редко кого из кричащих увидишь
OFFTOP OFF
y |= (1<<x)
Это будет работать на всех компиляторах, в том числе и на CV
PORTB.3=1;
Это костыль для начинающих и им самим решать, использовать его или нет.
OFFTOP ON
Библиотеки в разных компиляторах разные. И если нужна 100% портируемость, тогда пишите сами все библиотеки. Тогда и не будет проблем при переезде с компилятора на компилятор.
Вспомните так же про прерывания и их объявление. В разных компиляторах разное. и т.д.
Дебаты какой компилятор лучше никогда ни к чему не приводят. Каждый работает на том, на чем нравится/привык.
Если тема про лучший код или полную контролируемость, нужно и асм вспомнить.
На каждом углу кричат Windows must die, а на линуксе редко кого из кричащих увидишь
OFFTOP OFF
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Последовательний ввод
Я вообще стараюсь от языков высокого уровня держаться подальше.
Большая часть проектов у меня на ассемблере.
На Си у меня только те проекты, которые сложно реализовать на АСМе за короткий срок. 
Большая часть проектов у меня на ассемблере.
I am DX168B and this is my favourite forum on internet!
Re: Последовательний ввод
Дыг мы не об этом вовсе.Дебаты какой компилятор лучше никогда ни к чему не приводят.
Разница между теорией и практикой на практике гораздо больше, чем в теории.


