Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Atmega AVR микроконтроллер Проблема с TWI (ds1307) http://www.cyberforum.ru/avr/thread2085987.html
Вот решил я поработать с TWI на atmega88p. Переделал для начала часть Ардуиновского кода для себя (twi.c/h), запилил простой пример по работе с ds1307 и проект в Proteus. Но что то пошло не так, и...
Atmega AVR микроконтроллер Настройка Timer1 на ATtiny2313
Стараюсь настроить Timer1 на время 0.01секунды при частоте 4Мгц , но при моделировании в Proteus при частоте 4Мгц время совсем иное , намного больше. Прерывания по совпадению с регистром OCR1A . Ниже...
Atmega128 самый дешевый из мег? Atmega AVR микроконтроллер
Сравнивал цены, удивило 1.4$ за штуку http://www.otyexpress.com/item/Frii-Shi ... 43818.html примерно столько же стоят atmega8, otmyko48, иногда дешевле 0.9$ иногда дороже 2$. Atmega256 уже в...
Atmega AVR микроконтроллер Есть ли у кого примеры применения датчика давления bm085? с I2C не очень силен, пока читаю даташит как китайскую грамоту) примеров найти не смог, есть только для ардуино http://www.cyberforum.ru/avr/thread2085984.html
Atmega AVR микроконтроллер Вопрос по энкодеру http://www.cyberforum.ru/avr/thread2085983.html
Здравствуйте! У меня вопрос по энкодеру. Есть энкодер, 24 щелчка/ положения на один оборот, подключил к ардуино. При вращении должна изменяться яркость. Вопрос такой: это нормально что приращение...
Atmega AVR микроконтроллер Keil компилятор
подскажите какой пакет работает с AVR--чего-то на офсайте так и непонял(или не нашёл)
Как считать показания датчика Atmega AVR микроконтроллер
Есть ИК датчик дальномер,есть мега8 с портами АЦП как мне посмотреть получаемые параметры, например в ардуино я мог мониторить порт, а здесь как-то можно, или вариант через AVR Studyo.
Atmega AVR микроконтроллер Датчик DHT21 + AtTiny2313. Доброго времени суток :) Задался я тут целью соединить датчик температуры/влажности DHT21 с AtTiny2313. Начал читать даташит, Написано, что интерфейс 1-Wire, не совместимый с Daltos. Далее... http://www.cyberforum.ru/avr/thread2085980.html
Atmega AVR микроконтроллер DHT11 + avr http://www.cyberforum.ru/avr/thread2085979.html
Моделирую в proteus. При моделировании датчик не отвечает (не выставляет низкий уровень на шине) Код: .include "m16def.yms" .def count=r18 .def temperat=r20; risit:
Atmega AVR микроконтроллер Прошить ATMEGA128 Народ, ни разу не работал со 128 и 256 мегами. Все МК с чем приходилось работать, прошивал STK-500 либо в панельку ставил, либо ISP. Сейчас нужно прошить мегу 128. На руках только STK-500. Получится... http://www.cyberforum.ru/avr/thread2085978.html
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
19.02.2014, 15:39 0

Оптимизация кода, Си

19.02.2014, 15:39. Просмотров 9391. Ответов 30
Метки (Все метки)

Ответ

Я делал опрос многих кнопок как то так:
Код
//#######################################################################################################################
//#
//# ФУНКЦИИ РАБОТЫ С КЛАВОЙ
//#   Подключение кнопок на общий
//#
//#######################################################################################################################

//настройки библиотеки
#define BTN_LOCK_TIME       30               /*время обработки дребезга в милисекундах (10-100)*/

#define BTN1_PORT         PORTC            /*настройки кнопки 1*/
#define BTN1_PIN          PINC
#define BTN1_LINE          (1<<0)

#define BTN2_PORT         PORTC            /*настройки кнопки 2*/
#define BTN2_PIN          PINC
#define BTN2_LINE          (1<<1)

#define BTN3_PORT         PORTC            /*настройки кнопки 3*/
#define BTN3_PIN          PINC
#define BTN3_LINE          (1<<2)

#define BTN4_PORT         PORTC            /*настройки кнопки 4*/
#define BTN4_PIN          PINC
#define BTN4_LINE          (1<<3)

#define BTN5_PORT         PORTC            /*настройки кнопки 5*/
#define BTN5_PIN          PINC
#define BTN5_LINE          (1<<4)

#define BTN6_PORT         PORTC            /*настройки кнопки 6*/
#define BTN6_PIN          PINC
#define BTN6_LINE          (1<<5)

#define BTN7_PORT         PORTC            /*настройки кнопки 7*/
#define BTN7_PIN          PINC
#define BTN7_LINE          (1<<6)

#define BTN8_PORT         PORTC            /*настройки кнопки 8*/
#define BTN8_PIN          PINC
#define BTN8_LINE          (1<<7)

#define BTN9_PORT         PORTB            /*настройки кнопки 9*/
#define BTN9_PIN          PINB
#define BTN9_LINE          (1<<0)

#define BTN10_PORT         PORTB            /*настройки кнопки 10*/
#define BTN10_PIN          PINB
#define BTN10_LINE          (1<<1)

#define BTN11_PORT         PORTB            /*настройки кнопки 11*/
#define BTN11_PIN          PINB
#define BTN11_LINE          (1<<2)

#define BTN12_PORT         PORTB            /*настройки кнопки 12*/
#define BTN12_PIN          PINB
#define BTN12_LINE          (1<<3)

#define BTN13_PORT         PORTB            /*настройки кнопки 13*/
#define BTN13_PIN          PINB
#define BTN13_LINE          (1<<4)

#define BTN14_PORT         PORTB            /*настройки кнопки 14*/
#define BTN14_PIN          PINB
#define BTN14_LINE          (1<<5)

#define BTN15_PORT         PORTB            /*настройки кнопки 15*/
#define BTN15_PIN          PINB
#define BTN15_LINE          (1<<6)

#define BTN16_PORT         PORTB            /*настройки кнопки 16*/
#define BTN16_PIN          PINB
#define BTN16_LINE          (1<<7)

//#######################################################################################################################
//#
//#   ФУНКЦИИ РАБОТЫ С КНОПКАМИ
//#
//#######################################################################################################################

//глобальные переменные
volatile uint16_t BtnFlags;
#define BTN1         (1<<0)            /*флагов нажатия кнопки1*/
#define BTN2         (1<<1)            /*флагов нажатия кнопки2*/
#define BTN3         (1<<2)            /*флагов нажатия кнопки3*/
#define BTN4         (1<<3)            /*флагов нажатия кнопки4*/
#define BTN5         (1<<4)            /*флагов нажатия кнопки5*/
#define BTN6         (1<<5)            /*флагов нажатия кнопки6*/
#define BTN7         (1<<6)            /*флагов нажатия кнопки7*/
#define BTN8         (1<<7)            /*флагов нажатия кнопки8*/
#define BTN9         (1<<8)            /*флагов нажатия кнопки9*/
#define BTN10         (1<<9)            /*флагов нажатия кнопки10*/
#define BTN11         (1<<10)            /*флагов нажатия кнопки11*/
#define BTN12         (1<<11)            /*флагов нажатия кнопки12*/
#define BTN13         (1<<12)            /*флагов нажатия кнопки13*/
#define BTN14         (1<<13)            /*флагов нажатия кнопки14*/
#define BTN15         (1<<14)            /*флагов нажатия кнопки15*/
#define BTN16         (1<<15)            /*флагов нажатия кнопки16*/

//-----------------------------------------------------------------------------------------------------------------------
//ФУНКЦИЯ настройки работы библиотеки дисплея
void ButtonInit (void)
{
BTN1_PORT |= BTN1_LINE;                  //включаем подтяжку
BTN2_PORT |= BTN2_LINE;
BTN3_PORT |= BTN3_LINE;
BTN4_PORT |= BTN4_LINE;
BTN5_PORT |= BTN5_LINE;
BTN6_PORT |= BTN6_LINE;
BTN7_PORT |= BTN7_LINE;
BTN8_PORT |= BTN8_LINE;
BTN9_PORT |= BTN9_LINE;
BTN10_PORT |= BTN10_LINE;
BTN11_PORT |= BTN11_LINE;
BTN12_PORT |= BTN12_LINE;
BTN13_PORT |= BTN13_LINE;
BTN14_PORT |= BTN14_LINE;
BTN15_PORT |= BTN15_LINE;
BTN16_PORT |= BTN16_LINE;
}

//-----------------------------------------------------------------------------------------------------------------------
//функция чтения данных о нажатии кнопок
//ЗНАЧЕНИЕ - код нажатой кнопки (если кнопка не нажималась, возвращает 0)
uint16_t BtnGet (void)
{
cli ();
uint16_t temp = BtnFlags;
BtnFlags = 0;
sei ();
return temp;
}

//-----------------------------------------------------------------------------------------------------------------------
//ФУНКЦИЯ ОБРАБОТКИ КЛАВИШ (вызывать в регулярном прерывании с частотой 100 Гц)
//нажатие устанавливает бит глобальной переменной BtnFlags
static void BtnExe (void)
{
static uint8_t ToskByt;                  //защелка (защита от дребезга)
static uint8_t ToskCoun;               //счетчик защелки (защита от дребезга)
static uint16_t LastState;               //запоминание последней нажатой кнопки

uint16_t mask = 0;
if (! (BTN1_PIN & BTN1_LINE))      mask = BTN1;
if (! (BTN2_PIN & BTN2_LINE))      mask = BTN2;
if (! (BTN3_PIN & BTN3_LINE))      mask = BTN3;
if (! (BTN4_PIN & BTN4_LINE))      mask = BTN4;
if (! (BTN5_PIN & BTN5_LINE))      mask = BTN5;
if (! (BTN6_PIN & BTN6_LINE))      mask = BTN6;
if (! (BTN7_PIN & BTN7_LINE))      mask = BTN7;
if (! (BTN8_PIN & BTN8_LINE))      mask = BTN8;
if (! (BTN9_PIN & BTN9_LINE))      mask = BTN9;
if (! (BTN10_PIN & BTN10_LINE))   mask = BTN10;
if (! (BTN11_PIN & BTN11_LINE))   mask = BTN11;
if (! (BTN12_PIN & BTN12_LINE))   mask = BTN12;
if (! (BTN13_PIN & BTN13_LINE))   mask = BTN13;
if (! (BTN14_PIN & BTN14_LINE))   mask = BTN14;
if (! (BTN15_PIN & BTN15_LINE))   mask = BTN15;
if (! (BTN16_PIN & BTN16_LINE))   mask = BTN16;

if (mask){                           //анализ состояния кнопки
if (ToskCoun < (BTN_LOCK_TIME/10)){   //клавиша нажата
ToskCoun++;
return;                        //защелка еще не дощитала - возврат
}

LastState = mask;
ToskByt =1;                        //нажатие зафиксировано

}
else{                              //клавиша отжата
if (ToskCoun){
ToskCoun --;
return;                        //защелка еще не обнулилась - возврат
}

if (! ToskByt)                     //СТАТИЧЕСКИЙ ВОЗВРАТ
return;

ToskByt =0;                        //отжатие зафиксировано
BtnFlags |= LastState;               //установка бита нажатия
}

}

//#######################################################################################################################
//#
//# THE END
//#
//#######################################################################################################################
Потом проверка так:

Код
while (1){
uint16_t Button = BtnGet ();

if (Button == BTN1) {/*выполняемый код*/}
if (Button == BTN2) {/*выполняемый код*/}
if (Button == BTN3) {/*выполняемый код*/}
if (Button == BTN4) {/*выполняемый код*/}
.....
.....

.....
.....
}


Вернуться к обсуждению:
Оптимизация кода, Си
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2014, 15:39
Готовые ответы и решения:

Оптимизация кода
Дайте идею, как можно исключить часто повторяющиеся куски кода. У меня пока идей нет. ...

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона...

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был...

Оптимизация кода
Вот код var a,b,c,d:integer; begin a:=random(30000); b:=random(30000); c:=random(30000);...

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