Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
06.01.2011, 19:24
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помогите с массивами в WinAvr
Уважаемые нужна помощь)) Atmega8, WINAvr, Proteus 7.6 SP2
Нужно сделать с помощью 2-ух 4-х разрядных индикаторов, 2 дешифраторов и 3-х кнопок устройство ввода/вывода (на индикаторы) 8-ми разрядного числа. Т.е. при нажатии соответствующей кнопки меняется разряд/величина числа, записывается в массив, а из него все это хоз-во выводится на индикатор))
На пинах PD5, PD6, PD7 расположены кнопки, осуществляющие сдвиг разряда и увелечение/уменьшение числа на 1. 2 дешифратора - один на число, другой на позицию (УРА! динамическая индикация). Все записывается в массив step и выводится на порт C.
Проблема: с порта С ничего нет, наверное я не правильно работаю с массивом.
Прилагается: проект в WinAvr и проект в Proteus (извините за корявость, все делалось за 5 минут)
|
|
|
|
06.01.2011, 20:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
|
Re: Помогите с массивами в WinAvr
Как минимум разрешить Timer-у 0 прерывание
TIMSK=(1‹‹TOIE0);
|
|
|
Сказали "Спасибо" andries5
|
|
|
06.01.2011, 20:25
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите с массивами в WinAvr
Бьюсь головой об стол, как не заметил(((
Последний раз редактировалось Sho_otnik; 06.01.2011 в 20:48.
|
|
|
|
06.01.2011, 21:16
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Помогите с массивами в WinAvr
Сообщение от Sho_otnik
|
Бьюсь головой об стол, как не заметил(((
|
бывает))) Ещё, оч не советую вам взводить/сбрасывать биты просто присваиванием, ибо когда вы делаете вот так TIMSK = (1‹‹TOIE0) , то в регистре у вас не только бит TOIE0 устанавливается в 1 , а ещё и все остальные биты сбрасываются в 0. Т.е. все предыдущие настройки этого регистра, реальные или пусть даже потенциально возможные в будущем, вы просто затираете, а это грабли ещё те. ![Улыбка](images/smilies/icon_smile.gif) Пользуйтесь |= , чтобы установить бит(ы) и &=
, чтобы бит(ы) сбросить.
|
|
|
|
07.01.2011, 00:16
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите с массивами в WinAvr
т.е. вместо TIMSK=(1‹‹TOIE0); пишем TIMSK|=_BV(TOIE0); я правильно понял?
|
|
|
|
07.01.2011, 00:23
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Помогите с массивами в WinAvr
Правильно! ![Улыбка](images/smilies/icon_smile.gif) Посмотрите статьи Сергея Рюмика в журналах Радиохлбби и радиоаматор, там это очень подробно расписано, как раз об этих конструкциях
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
Сказали "Спасибо" serb-radio
|
|
|
07.01.2011, 01:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.10.2010
Сообщений: 1,752
Сказал спасибо: 158
Сказали Спасибо 640 раз(а) в 364 сообщении(ях)
|
Re: Помогите с массивами в WinAvr
Сообщение от Sho_otnik
|
т.е. вместо TIMSK=(1‹‹TOIE0); пишем TIMSK|=_BV(TOIE0); я правильно понял?
|
Мне больше нравится такой стиль записи:
// Установить бит в 1
TIMSK |= (1‹‹TOIE0)
// Сбросить бит в 0
TIMSK &= ~(1‹‹TOIE0)
|
|
|
Сказали "Спасибо" Ar-Gen-Tum
|
|
|
07.01.2011, 11:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
|
Re: Помогите с массивами в WinAvr
А я предпочитаю
#define set_bit_0(reg, bit) (reg &= ~(1‹‹bit)) //PORT
#define set_bit_1(reg, bit) (reg |= (1‹‹bit)) //PORT
#define bit_is_1(reg, bit) (reg & (1‹‹(bit))) //PIN
#define bit_is_0(reg, bit) (!(reg & (1‹‹(bit)))) //PIN
и тогда:
TIMSK |= (1‹‹TOIE0);
пишу:
set_bit_1 (TIMSK,TOIE0);
и с портов читаю
if (bit_is_0 (PINB,5)) {};
или
#define BUTT_RST bit_is_0(PINB,5)
if (BUTT_RST) {};
Последний раз редактировалось andries5; 07.01.2011 в 12:03.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо andries5 за это сообщение:
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:50.
|
|