Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Въпрос за CCS команда
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14783
Страница 1 от 1

Автор:  E1 [ Съб Сеп 17, 2016 2:03 pm ]
Заглавие:  Въпрос за CCS команда

Какво вършат следните CCS команди:
bit_set(data[2-j],7-i);
bit_clear(data[2-j],7-i);

Командите са в тялото на цикъл, но в случая мисля, че това няма особено значение.

Някой може ли да даде заместващ код?
Адаптирам CCS програма към моя компилатор и само тази част ми остана като бяло петно.

Автор:  Цецо [ Съб Сеп 17, 2016 2:07 pm ]
Заглавие:  Re: Въпрос за CCS команда

data[2-j] |= 1 << (7-i);
data[2-j] &= ~(1 << (7-i));

примерно. Но ако си фен, ще си напишеш макрос и ще оставиш старите редове :)

Автор:  E1 [ Съб Сеп 17, 2016 2:10 pm ]
Заглавие:  Re: Въпрос за CCS команда

Благодаря!
Е, вика се един-единствен път в програмата. Ще спестя няколко реда с директно внасяне.
Значи, едната сетва, а другата нулира съответния бит на data[]?

Автор:  E1 [ Съб Сеп 17, 2016 2:26 pm ]
Заглавие:  Re: Въпрос за CCS команда

A loadvalue има ли някакво специално значение? Използва се в програмата без да е дефинирано никъде и при мен дава грешка по тази причина.

Автор:  slav4o.com [ Съб Сеп 17, 2016 4:50 pm ]
Заглавие:  Re: Въпрос за CCS команда

и аз съм правил програма по този начин. Сам си ги дефинирах тогава тези двете bit_set и bit_clear, даже и bit_check бях сложил. Просто тия стрелкички ветропоказателните ме побъркват. Се едно перфокарта чета после, не програма....
А това loadvalue какво е ? По принцип така както са написани data[2-j] е байт от някакъв масив с индекс 2 - нещоси(j), a бита който се манипулира е седми минус i т.е. не е седми а някой по-малък, примерно ако 5ти ако i = 2

Автор:  syscop [ Съб Сеп 17, 2016 7:17 pm ]
Заглавие:  Re: Въпрос за CCS команда

slav4o.com написа:
... Просто тия стрелкички ветропоказателните ме побъркват. Се едно перфокарта чета после, не програма...

Нарисувай си го.
На Цецо първият ред - местиш наляво 1 7-i пъти, след това правиш ИЛИ със стойонстта, т.е. установяваш в 1 битчето намиращо се на позиция 7-i.
На Цецо вторият ред - местенето наляво по-горе, след това инвертиране, т.е. битчето на позиция 7-i става 0, след това И -> нулира се бит 7-i.
Отделяш няколко минути за мислене и voila ;)

Автор:  E1 [ Съб Сеп 17, 2016 9:05 pm ]
Заглавие:  Re: Въпрос за CCS команда

slav4o.com написа:
и аз съм правил програма по този начин...


Смях се от сърце за "ветропоказателните стрелкички". :D Наистина, ако подпрограмата се извиква поне два пъти, по-добре е да се отдели. В случая е безсмислено - само излишно писане.
По програмата всичко е ясно. Контролерът подава тактови импулси и за всеки тактов импулс чете какъв бит връща подчиненото устройство(слейвът). Отговорът е три байта(0-2) и затова се налага местене и на байтовете с данни. bit_set и bit_clear са в телата на if-else и проверяват какво е състоянието на линията за данни, като създават масив от трите байта data[3]. Аз лично ще направя четене на 24 последователни бита. Не виждам защо трябва да се създават байтове, а после да се "опаковат" заедно... ако не ме домързи да си играя, разбира се.

Автор:  slav4o.com [ Нед Сеп 18, 2016 2:16 am ]
Заглавие:  Re: Въпрос за CCS команда

Мене лично за някои работи ми е удобно направо на асемблер да работя. Например имам PLL синтезатор TSA5511 и за да го запусна в определен режим трябва да се сетнат еди си кои си битове. По принцип "C" е измислено за писане на програми на компютри, донякъде математици, а не за "щракачи на битове". На асеблер обаче е трудно да направиш пресмятането за деленето на честотата върху опорната честота и така да се пресметне делителя. При тебе може да се направи цикъл 24 пъти да прочете входния пин на процесора. Думата "байт" даже да не я знаеш какво значи. Не случайно на PICовете има структури един си кой регистрър, примерно ТMR1CONbits.нещоси (нещо си е номер на бит в регистъра) и трябва да се щракне, за да тръгне таймера. Чисто и просто някакъв бит, групиран с други седем, защото паметта е 8 битова, не че образуват някакво смислено число.

Автор:  E1 [ Нед Сеп 18, 2016 12:27 pm ]
Заглавие:  Re: Въпрос за CCS команда

Така де. Точно това имам предвид. ;)

Автор:  stoyanoff [ Нед Сеп 18, 2016 1:27 pm ]
Заглавие:  Re: Въпрос за CCS команда

Ами за такива случаи има структури от данни! Правиш си една структура от променливи с необходимия брой битове всяка и готово! Сетваш си ги, както се решиш! Ако не прекалявате с размера на самата структура работи прилично бързо! Конкретно за CCS има 3-4 начина да се работи с битове освен структури. Въпрос на предпочитание! Аз лично не съм поглеждал асемблер от години! Просто не си заслужава главоболията.
Поздрави!

Автор:  MYXATA [ Пон Сеп 26, 2016 11:31 pm ]
Заглавие:  Re: Въпрос за CCS команда

slav4o.com написа:
.... По принцип "C" е измислено за писане на програми на компютри, донякъде математици, а не за "щракачи на битове". На асеблер обаче е трудно да направиш пресмятането за деленето на честотата върху опорната честота и така да се пресметне делителя. .....
. Думата "байт" даже да не я знаеш какво значи........
Чисто и просто някакъв бит, групиран с други седем, защото паметта е 8 битова, не че образуват някакво смислено число.

Мъка мъка.
Какво сложно нещо е това байтът рабираш ли....

Автор:  Цецо [ Вто Сеп 27, 2016 8:58 am ]
Заглавие:  Re: Въпрос за CCS команда

Детската градина. И ние сме били такива, айде....

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/