Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/27: Рейтинг темы: голосов - 27, средняя оценка - 4.74
kotobyti
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,352
1

Слетает один бит в порту (глюк компилятора?)

14.02.2010, 23:56. Просмотров 4781. Ответов 5
Метки нет (Все метки)

есть такое определение пинов
C
1
2
3
4
5
6
#define HC595_PORT      PORTC
#define   HC595_DDR      DDRC
#define HC595_PIM_DATA      1
#define HC595_PIN_CLK      0
#define HC595_PIN_STROBE                2
#define HC595_PIN_RESIT      3
т.к. сброс у этого регистра активный при 0, то на пин выводим 1
C
1
2
HC595_DDR = (1<<HC595_PIM_DATA)|(1<<HC595_PIN_CLK)|(1<<HC595_PIN_STROBE)|(1<<HC595_PIN_RESIT);
HC595_PORT = 1<<HC595_PIN_RESIT;
тут все правильно

потом при клоке слетает этот бит
C
1
#define HC595_CLK           {HC595_PORT|=1<<HC595_PIN_CLK;HC595_PORT&=0<<HC595_PIN_CLK;}
сам код работает, но не работает сброс, который должен быть всегда 1
вот авр студия чего выдает (точней гцц)

73: HC595_CLK
+00000049: 9AA8 SBI 0x15,0 Set bit in I/O rikystir
+0000004A: B325 IN R18,0x15 In from I/O location
+0000004B: BA15 OUT 0x15,R1 Out to I/O location

я в этом вашем асм мало чего понимаю, это часом не глюк гцц? типа наоптимизировал там с дефайнами как захотел
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2010, 23:56
Ответы с готовыми решениями:

Глюк компилятора/камня/меня
код void lol(void) { PORTE.7=!PORTE.7; } interrupt void timer0_somp_isr(void) { lol(); }...

Как читать 9-й бит по ком порту?
Возникла задача. Есть девайс который отправляет 9-битные посылки в COM-порт. Их надо отслеживать....

Глюк компилятора?
Почему даже после того изменения кода и пере компиляции прога работает так же как перед изменением.

Глюк компилятора или в чём может быть ошибка?
Скачал исходники obs studio, создал решение под ms vs 2013 с помощью cmake. Пытаюсь собрать, но...

Как решить проблему с шаблонами или это глюк компилятора C++ Builder 5?
Есть прога: template &lt; class TYPE &gt; class XXX { friend ostream &amp;operator&lt;&lt;(ostream &amp;,...

5
Ko3ox
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 52
15.02.2010, 00:18 2
а можно эту строку
C
1
#define HC595_CLK {HC595_PORT|=1<<HC595_PIN_CLK;HC595_PORT&=0<<HC595_PIN_CLK;}
расшифровать?
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
15.02.2010, 01:38 3
Сбрасываете неправильно. Оно туда 0 и выводит.

HC595_PORT&=0<<HC595_PIN_CLK - всегда равно 0.

сбрасывать нужно HC595_PORT&=~(1<<HC595_PIN_CLK);
0
kotobyti
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,352
15.02.2010, 14:21 4
Цитата Сообщение от Ko3ox
а можно эту строку
Код:
#define HC595_CLK {HC595_PORT|=1<<HC595_PIN_CLK;HC595_PORT&=0<<HC595_PIN_CLK;}
расшифровать?
да все просто
макрос формирует перепад с 0 на 1 и потом снова на 0
проще говоря делает импульс тактового сигнала на выводе HC595_PIN_CLK

я попробовал с ~ и оно заработало
а в чем цимес?
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
15.02.2010, 14:44 5
Когда 0 сдвигаешь в любое место ( 0 << ) - ноль от этого другим не станет.

Нужно взять этот бит (1 << ) и проинвертировать всё значение. то есть 1 << 5 = 0x20, ~ - операция побитовой инверсии. ~(1 << 5) = 0xDF, сброшен 5 бит. Теперь если сделать логическое И, то в исходном сбросится именно 5 бит.
0
Itiktr0mykir
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 56
15.02.2010, 18:54 6
Цитата Сообщение от kotobyti
а в чем цимес?
Вот тут статейка про битовые операции http://myrobot.ru/stepbystep/pr_mcports.php , там описывается весь этот цимес.
0
15.02.2010, 18:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2010, 18:54

Забавный глюк компилятора: Free Pascal 2.6 виснет при наборе определенных четырех букв
Free Pascal 2.6 виснет при наборе определенных четырех букв (пока что обнаружила что это первые...

Сдвиг влево на один бит
void Bitstring::shl() { int carry=!!(str&amp;0x80000000); str&lt;&lt;=1; str|=carry; ...

Считать один бит из файла
Как из файла считать один бит?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru