реклама на сайте
подробности

 
 
> Как опредилить состояние нужного бита в порте в - IAR ?, Нужно сделать несколько кнопок, а не выходит, В WinAVR с этим проще
Denis89
сообщение Apr 10 2009, 11:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 10-04-09
Пользователь №: 47 468



Вобщем стыдно блин, crying.gif как чайник не могу сделать несколько кнопок на Mega32. Вобщем есть программа MMC плеера на AVR, я решил её заюзать в своём проекте. Всё работает, а кнопки которые я от себя добавил не хотят.

Вобщем в WinAVR это очень просто и всегда работает.
Урезанная Часть кода из моего проекта тахометра который я брату в девятку делал

Код
#define leds PD3  //Обзываем кнопки именами
#define lcd PD4
#define regim PD0

//***************************

//Думаем что же там было нажато
volatile uint8_t key (volatile uint8_t s){
   if (!(_SFR_BYTE(PIND) & _BV(s)))    // или аналог  (bit_is_clear(PIND,s))
  {  
        _delay_loop_2(100);
        if (!(_SFR_BYTE(PIND) & _BV(s)))
    {return (0);}
  }
  return (1);
}

//***********************************

void check_keys(){       // Расставляем флаги по нажатым кнопкам
    if ((key(regim)) == 0 ) {key_pr=3;}
    if ((key(lcd)) == 0 ) {key_pr=2;}
    if ((key(leds)) == 0 ) {key_pr=1;}
                        
}


Вообщем как гениально просто это сделать на IAR?

К статье прилагается архив, со схемой и исходниками. Посмотрите пожалуйсто smile3046.gif
Прикрепленные файлы
Прикрепленный файл  MMC_Player_Source_IAR.rar ( 119.37 килобайт ) Кол-во скачиваний: 18
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Denis89
сообщение Apr 10 2009, 13:52
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 10-04-09
Пользователь №: 47 468



Цитата
В Вашем случае '_BV(s)' есть чистый выпендреж, ибо в реальности представляет собой абсолютно узнаваемую, читаемую и переносимую конструкцию '1<<s'


Ну знаете, не я макросы к WinAVR писал. А насчёт узнаваемости и простоты, то вы как думаете, я что, не пробовал различные конструкции кода чтобы определить что там на ноге 0 или 1? smile3046.gif

Насчёт тупого Copy/Paste кода, на данный момент у меня нет никакого времени разбираться с особенностями IAR.

Мне ещё надо сделать очень немало в пректе, Первую часть на которой будет дисплей, кнопки, датчики, и интерфейс RS232 я буду писать на WinAVR, благо проблем с ним никогда небыло.

Посмотрите исходник из архива main.c. Разве это сложно сказать где я не прав и исправить ошибку? 1111493779.gif

P.S. Потом я обязательно буду учить С++ в чистом виде, даже и ASM захвачу, но сейчас я просто прошу помощи с кодом 1111493779.gif


Вообщем пока помощи дождёшься, борода блин отростёт bb-offtopic.gif

Я конечно понимаю, копаться в чужом белье как и программном коде не очень то приятно, но зачем ветку эту тогда назвали "в помощь начинающему" laughing.gif

Проблему решил, не знаю каким мокаром(наверно Кевин, Митник который, благословил меня по интернетуbiggrin.gif )

Код
     if (PINC & (1 << PC7))
       {
        PORTD_Bit0 = 0;
        }else PORTD_Bit0 = 1;


Здесь просто проверял рабочесть кода, помигать светодиодом чтоб. smile3046.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 17:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016