Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:58

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: слетает один бит в порту (глюк компилятора?)
СообщениеДобавлено: 16 фев 2010, 00:43 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 23:30
Сообщения: 2785
есть такое определение пинов
Код:
#define HC595_PORT      PORTC
#define   HC595_DDR      DDRC
#define HC595_PIN_DATA      1
#define HC595_PIN_CLK      0
#define HC595_PIN_STROBE                2
#define HC595_PIN_RESET      3


т.к. сброс у этого регистра активный при 0, то на пин выводим 1
HC595_DDR = (1<<HC595_PIN_DATA)|(1<<HC595_PIN_CLK)|(1<<HC595_PIN_STROBE)|(1<<HC595_PIN_RESET);
HC595_PORT = 1<<HC595_PIN_RESET;
тут все правильно

потом при клоке слетает этот бит
#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 register
+0000004A: B325 IN R18,0x15 In from I/O location
+0000004B: BA15 OUT 0x15,R1 Out to I/O location

я в этом вашем асм мало чего понимаю, это часом не глюк гцц? типа наоптимизировал там с дефайнами как захотел


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: слетает один бит в порту (глюк компилятора?)
СообщениеДобавлено: 16 фев 2010, 01:05 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 26 янв 2010, 23:02
Сообщения: 57
а можно эту строку
Код:
#define HC595_CLK {HC595_PORT|=1<<HC595_PIN_CLK;HC595_PORT&=0<<HC595_PIN_CLK;}

расшифровать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: слетает один бит в порту (глюк компилятора?)
СообщениеДобавлено: 16 фев 2010, 02:25 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Сбрасываете неправильно. Оно туда 0 и выводит.

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

сбрасывать нужно HC595_PORT&=~(1<<HC595_PIN_CLK);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: слетает один бит в порту (глюк компилятора?)
СообщениеДобавлено: 16 фев 2010, 15:08 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 23:30
Сообщения: 2785
Ka3ax писал(а):
а можно эту строку
Код:
#define HC595_CLK {HC595_PORT|=1<<HC595_PIN_CLK;HC595_PORT&=0<<HC595_PIN_CLK;}

расшифровать?

да все просто
макрос формирует перепад с 0 на 1 и потом снова на 0
проще говоря делает импульс тактового сигнала на выводе HC595_PIN_CLK

я попробовал с ~ и оно заработало
а в чем цимес?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: слетает один бит в порту (глюк компилятора?)
СообщениеДобавлено: 16 фев 2010, 15:31 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Когда 0 сдвигаешь в любое место ( 0 << ) - ноль от этого другим не станет.

Нужно взять этот бит (1 << ) и проинвертировать всё значение. то есть 1 << 5 = 0x20, ~ - операция побитовой инверсии. ~(1 << 5) = 0xDF, сброшен 5 бит. Теперь если сделать логическое И, то в исходном сбросится именно 5 бит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: слетает один бит в порту (глюк компилятора?)
СообщениеДобавлено: 16 фев 2010, 19:41 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 18 янв 2010, 22:48
Сообщения: 71
Откуда: Germany
kalobyte писал(а):
а в чем цимес?


Вот тут статейка про битовые операции http://myrobot.ru/stepbystep/pr_mcports.php , там описывается весь этот цимес.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB