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

Последовательное зажигание светодиодов по кнопке (ATtiny2313, Cи)

18.04.2015, 16:23. Просмотров 3705. Ответов 58
Метки нет (Все метки)

Здравствуйте.Есть такая проблема.Написал код для подпрограммы последовательного зажигания светодиодов.Вот пример:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*****************************************************
Version : Кнопки и светодиоды                                                 
Chip type           : ATmega16
Clock frequency     : 4,000000 MHz
*****************************************************/              
#include <mega16.h>                                      // библиотека ввода\вывода микроконтроллера
#include <delay.h>                                        // библиотека задержки
void i_miganie()
{
                                                                         PORTС.0=1;
                     delay_ms(600);
                                                                     PORTС.1=1;
                                     delay_ms(600);
                                     PORTС.2=1;
                                     delay_ms(600);
                                     PORTС.3=1;
                                     delay_ms(600);
                                     PORTС.4=1;
                                     delay_ms(600);
                                     PORTС.5=1;
                                     delay_ms(600);
                                     PORTС.6=1;
                                     delay_ms(600);
                                     PORTС.7=1;
                                     delay_ms(600);
                                     PORTС.7=0;
                                     delay_ms(600);
                                     PORTС.6=0;
                                     delay_ms(600);
                                     PORTС.5=0;
                                     delay_ms(600);
                                     PORTС.4=0;
                                     delay_ms(600);
                                     PORTС.3=0;
                                     delay_ms(600);
                                     PORTС.2=0;
                                     delay_ms(600);
                                     PORTС.1=0;
                                     delay_ms(600);
                                     PORTС.0=0;
                                     delay_ms(600);                   
}
Получился очень много кода.Как его можно сократить, а то общая программа получается очень большая.Задание такое:Обеспечить при нажатой кнопке SW1 поочередное засвечивание светодиодов LED0… LED7 на 1с в последовательности LED0, LED1,.., LED7, LED0 и т. д. При нажатой кнопке SW4 зажигание светодиодов должно происходить в обратном порядке. Кнопки подключены к порту B, а светодиоды - к порту C.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2015, 16:23
Ответы с готовыми решениями:

Последовательное зажигание светодиодов по кнопке (ATmega8515, ASM)
Добрый день. Требуется помощь для написания программы на ассемблере под AVR ATmega8515...

Последовательное зажигание светодиодов
Собственно задание: при включении МК светодиоды не горят, через 2 с загораются 1-й, затем...

Зажигание светодиодов AT90S2313
Доброго времени суток. На AVR только начинающий Вот написал программу для циклического зажигания...

Зажигание полос светодиодов на мк AT90S8515
Здравствуйте! Задача такова:написать и отладить программу на ассемблер обрабатывающую прерывание...

Последовательное гашение светодиодов на окружности с интервалом
Помогите пожалуйста! Разработать программу, осуществляющую последовательное гашение светодиодов на...

58
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,366
Завершенные тесты: 1
21.04.2015, 23:53 21
Цитата Сообщение от Витальич Посмотреть сообщение
C++
1
2
3
4
5
6
7
unsigned char KeyGet()
{
unsigned char tmp;
if (PINB.0==0){tmp = 01;}
if (PINB.1==0){tmp = 02;}
return tmp;
}
получается что последняя кнопка будет перебивать остальные
можно сделать так
C++
1
2
3
4
5
6
7
8
unsigned char KeyGet()
{
unsigned char tmp=0;
if (PINB.0==0){tmp| = 01;}
if (PINB.1==0){tmp| = 02;}
if (PINB.2==0){tmp| = 04;}
return tmp;
}
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
22.04.2015, 00:06 22
Цитата Сообщение от ValeryS Посмотреть сообщение
получается что последняя кнопка будет перебивать остальные
В инструкции на девайс просто напишу "две и более кнопок сразу не нажимать. Лишение гарантии"
0
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
22.04.2015, 07:01 23
>получается что последняя кнопка будет перебивать остальные
А ты отслеживай не состояния кнопок, а переходы. Если реагировать у кнопок на переход 1->0 , то любая кнопка будет работать даже если остальные нажаты.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
22.04.2015, 08:16 24
Цитата Сообщение от Ethereal Посмотреть сообщение
А ты отслеживай не состояния кнопок, а переходы. Если реагировать у кнопок на переход 1->0 , то любая кнопка будет работать даже если остальные нажаты.
Цитата Сообщение от Витальич Посмотреть сообщение
В протеусе и иногда в железе работать будет
Но лучше воспользоватся поиском по форуму и найти темы про опрос кнопок. Менее недели назад я приводил простой пример.
В том примере отслеживается переход
0
MS24
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
Завершенные тесты: 1
22.04.2015, 11:20 25
Цитата Сообщение от Витальич Посмотреть сообщение
if (PINB.0==0){tmp = 01;}
короче будет запись
C
1
if(PINB.0) { tmp = 01; }
0
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
22.04.2015, 12:34 26
Только по смыслу станет противоположной.
0
MS24
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
Завершенные тесты: 1
22.04.2015, 13:09 27
Цитата Сообщение от Ethereal Посмотреть сообщение
Только по смыслу станет противоположной.
Упс! Вы же на 0 проверяете, извиняюсь.
C
1
if(!PINB.0) { tmp = 01; }
0
gubilon
1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 25
22.04.2015, 21:30  [ТС] 28
Я как понял,что в 14 строчке мы задаём наши варианты массивов,которые я прописывал в подрограмме?
Цитата Сообщение от Витальич Посмотреть сообщение
static unsigned char count = 0; PORTC = arrLed[count]; count++; if(count >= 8) { count = 0;
Пока вот что получилось:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*****************************************************                        
Chip type           : ATmega16
Clock frequency     : 4,000000 MHz
*****************************************************/              
#include <mega16.h>                                      // библиотека ввода\вывода микроконтроллера
#include <delay.h>                                        // библиотека задержки
unsigned char kR, temp;                           // обьявляем переменные
void i_miganie()
{
 unsigned char arrLedON[]= {b00000001,b00000011,b00000111,b00001111,b00011111,b00111111,b01111111,b11111111,
 b01111111,b00111111,b00011111,b00001111,b00000111,b00000011,b00000001,b00000000};
   int i;
   char port_out = 0;
   for (i =0; i<16;++i)
  {
      port_out = arrLedON[i] 
      PORTC = port_out;
      delay_ms(600);
  }
}           
void i_obmiganie()
{
 unsigned char arrLedOON[]= {b10000000,b11000000,b11100000,b11110000,b11111000,b11111100,b11111110,b11111111,
 b11111110,b11111100,b11111000,b11110000,b11100000,b11000000,b10000000,b00000000};
   int i;
   char port_out = 0;
   for (i =0; i<16;++i)
  {
      port_out = arrLedOON[i] 
      PORTC = port_out;
      delay_ms(600);
  }
}
void i_chmiganie()
{
 unsigned char arrLedCHON[]= {b00000010,b00001010,b00101010,b10101010,b00101010,b00001010,b00000010,b00000000};
   int i;
   char port_out = 0;
   for (i =0; i<8;++i)
  {
      port_out = arrLedCHON[i] 
      PORTC = port_out;
      delay_ms(600);
  }
}
void i_nechmiganie()
{
 unsigned char arrLedNECHON[]= {b00000001,b00000101,b00010101,b01010101,b00010101,b00000101,b00000001,b00000000};
   int i;
   char port_out = 0;
   for (i =0; i<8;++i)
  {
      port_out = arrLedNECHON[i] 
      PORTC = port_out;
      delay_ms(600);
  }                        
}
void i_sbros()
{
                                     PORTС.0=0;
                                     PORTС.1=0;
                                     PORTС.2=0;
                                     PORTС.3=0;
                                     PORTС.4=0;
                                     PORTС.5=0;
                                     PORTС.6=0;
                                     PORTС.7=0;  
}
void i_check()
{
  if(PINB.0==0)
  {
  i_miganie();
  }  
  if(PINB.1==0)
  {
  i_obmiganie();
  }
  if(PINB.2==0)
  {
  i_chmiganie();
  }  
  if(PINB.3==0)
  {
  i_nechmiganie();
  }
  if(PINB.4==0)
  {
  i_sbros();
  }  
}
void main(void)                                             // Declare your global variables here
{       
PORTB=0b01111111;                                   // Port B initialization
 DDRB=0b00000000;                                 
PORTС=0b00000000;                                   // Port С initialization
 DDRС=0b111111111;
 
    while(1)     // бесконечный цикл                           
            {
                                                          
                             if (PINB.0==0)                    // ==== №1 кнопка
                               { 
                                i_miganie();
                                  } 
                              if (PINB.1==0)                   // ==== №2 кнопка
                               { 
                               i_obmiganie();                      
                                 }  
 
                               if (PINB.3==0)                 //  ====    №3  кнопка
                               { 
                               i_chmiganie();                   
                                  } 
                               if (PINB.4==0)                    // ==== №4 кнопка
                               { 
                                i_nechmiganie();
                                  } 
                               if (PINB.5==0)                    // ==== №5 кнопка
                               { 
                                i_sbros();
                                  } 
            };                                                  // закрываем бесконечный цикл
 
  }
Извиняюсь.В шапке не тот микроконтроллер указал.Просто сейчас еще по другой теме с 2313 работаю

Добавлено через 1 час 33 минуты
Цитата Сообщение от Витальич Посмотреть сообщение
Да простит меня MS24
C
1
2
3
4
5
6
7
8
9
10
11
12
13
void i_miganie()
{
 unsigned char arrLed[]= {b00000001,b00000011,b00000111,итд}
   int i;
   char port_out = 0;
 
   for (i =0; i<8;++i)
  {
      port_out = arrLed[i] 
      PORTC = port_out;
      delay_ms(600);
  }
}
В окурат как Вы желаете.
Массив arrLed сами только допишите.
CodeVision выдаёт ошибку при компиляции данного кода.Что делать?
0
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,366
Завершенные тесты: 1
22.04.2015, 21:49 29
Цитата Сообщение от gubilon Посмотреть сообщение
CodeVision выдаёт ошибку при компиляции данного кода.Что делать?
Сообщить об ошибке
удрать из листинга
Цитата Сообщение от gubilon Посмотреть сообщение
итд
0
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
22.04.2015, 22:15 30
Цитата Сообщение от gubilon Посмотреть сообщение
CodeVision выдаёт ошибку при компиляции данного кода.Что делать?
Исправить ошибку. Там явно местами ; не хватает.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
22.04.2015, 23:12 31
Цитата Сообщение от gubilon Посмотреть сообщение
CodeVision выдаёт ошибку
{b00000001,b00000011,b00000111,итд}
В стандарте СИ нет бинарного представления чисел, но некоторые производители компиляторов расширяют стандарт, для CodeVision будет так:
например - Целые числа могут быть записаны :

- в десятичной форме - 1234

- в двоичной форме с префиксом 0b так: 0b101001

- в шестнадцатеричной форме с префиксом 0x так: 0x5А

- в восьмеричной форме с префиксом 0 так: 0775
0
gubilon
1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 25
22.04.2015, 23:21  [ТС] 32
Цитата Сообщение от Витальич Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/* массив вариантов вкл. светотодиодов на порте С */
unsigned char arrLed[]= {b00000001,b00000011,b00000111,итд}
 
/* Установка параметров таймера */
void Timer0Init();
 
/* Опрос кнопок */
unsigned char KeyGet(); 
 
/* Прерывание таймера */
ISR( TIMER0_OVF_vect )
{
 static unsigned char count = 0;
 PORTC = arrLed[count];
 count++;
 if(count >= 8)
 {
   count = 0;
 }
}
 
void main(0)
{
 Timer0Init();
 StartTimer();
 
 while(1)
 {
    if(KeyGet() == 1)
    {
      // действия по нажатой кнопки
    }
 }
}
Настраиваем прерывание таймера на частоту изменения вкл/выкл светодиодов. В функции прерывания таймера ISR( TIMER0_OVF_vect ) происходит изменение состояние (вкл/выкл) светодиодов.
Основная программа постоянно опрашивает кнопки, когда обнаружит нажатую кнопку изменяет порядок вкл/выкл светодиодов. Для этого достаточно переписать данные в arrLed[]
Я как понял,Что это другой вариант исполнения программы.Но вверху получается нужно задавать разные массивы?Если так, то что задавать в прерывании таймера и главной программа при KeyGet.Просто не могу много понять,а сильно по срокам поджимают с программой
0
MS24
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
Завершенные тесты: 1
23.04.2015, 13:16 33
Цитата Сообщение от gubilon Посмотреть сообщение
Я как понял,Что это другой вариант исполнения программы.Но вверху получается нужно задавать разные массивы?Если так, то что задавать в прерывании таймера и главной программа при KeyGet.Просто не могу много понять,а сильно по срокам поджимают с программой
"Вверху" - т.е глобально вы можете задать Ваши массивы. Существует глобальная область видимости и локальная. Если Вы объявите массивы как глобальные - то они будут доступны "во всех Ваших функциях" так сказать...
Так как вы объявили их сейчас - тоже будет работать, просто сейчас их область видимости ограничена функцией которою Вы создаете.

Теперь, если Вы хотите работать через таймер, то работа с ним осуществляется через прерывание. Функция которая отвечает за прерывание - не может принимать никаких параметров, следовательно передать ей что - то можно только с помощью глобальных переменных.

Используя код который написал уважаемый Витальич, Вам остается только глобально определить массивы а выводить их в порт в прерывании.

в данном коде
C
1
   PORTC = arrLed[count];
вы можете вывести только один массив arrLed

Я предлагаю Вам завести глобальные переменные типа bool и выставлять их в функциях обработки кнопок, примерно так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool flag1;
bool flag2;
bool flag3;
....
while(1)
 {
    if(KeyGet() == 1)
    {
         flag1 = true;
         flag2=false;
         flag3=false;   
    }
 
    if(KeyGet() == 2)
    {
         flag1 = false;
         flag2 = true;
         flag3 = false;    // и т.д. сколько Вам массивов надо
    }
 }

а уже в прерывании писать
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* Прерывание таймера */
ISR( TIMER0_OVF_vect )
{
 static unsigned char count = 0;
 if(flag1)
    { 
        PORTC = arrLed1[count];
    }
if(flag2)
    { 
        PORTC = arrLed2[count];
    }
        // и т.д.
 
count++;
 if(count >= 8)
 {
   count = 0;
 }
}
Добавлено через 2 минуты
Только - это мрачный быдлокод )))
0
gubilon
1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 25
23.04.2015, 19:51  [ТС] 34
А почему мрачный?

Добавлено через 2 часа 34 минуты
Написал всё вот так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*****************************************************                        
Chip type           : ATmega16
Clock frequency     : 4,000000 MHz
*****************************************************/              
#include <mega16.h>                                      // библиотека ввода\вывода микроконтроллера
#include <delay.h>                                        // библиотека задержки
 
/* массив вариантов вкл. светотодиодов на порте С */
flash unsigned char arrLed[]= {0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111,
 0b01111111,0b00111111,0b00011111,0b00001111,0b00000111,0b00000011,0b00000001,0b00000000};
flash unsigned char arrLedO[]= {0b10000000,0b11000000,0b11100000,0b11110000,0b11111000,0b11111100,0b11111110,0b11111111,
 0b11111110,0b11111100,0b11111000,0b11110000,0b11100000,0b11000000,0b10000000,0b00000000};
flash unsigned char arrLedCH[]= {0b00000010,0b00001010,0b00101010,0b10101010,0b00101010,0b00001010,0b00000010,0b00000000,
0b00000010,0b00001010,0b00101010,0b10101010,0b00101010,0b00001010,0b00000010,0b00000000};
flash unsigned char arrLedNECH[]= {0b00000001,0b00000101,0b00010101,0b01010101,0b00010101,0b00000101,0b00000001,0b00000000,
0b00000001,0b00000101,0b00010101,0b01010101,0b00010101,0b00000101,0b00000001,0b00000000};
flash unsigned char arrLedS[]= {0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000};
/* Установка параметров таймера */
void Timer0Init()
{
 TCCR0=0x09;
    TCNT0=0x00;
    OCR0=0x64;
    TIMSK=0x02;
} 
/* Опрос кнопок */
unsigned char KeyGet()
{
unsigned char tmp=0;
if (!PINB.0==0){tmp| = 01;}
if (!PINB.1==0){tmp| = 02;}
if (!PINB.2==0){tmp| = 03;}
if (!PINB.3==0){tmp| = 04;}
if (!PINB.4==0){tmp| = 05;}
return tmp;
} 
void presets(void)
   {
   DDRB  = 0b00000000;       
   PORTB = 0b11111111;                                   // Port B initialization
   DDRC  = 0b11111111; 
   PORTC = 0b00000000; 
   } 
/* Прерывание таймера */
ISR ( TIMER0_OVF_vect )
{
 static unsigned char count = 0;
 if(flag1)
    { 
        PORTC = arrLed[count];
    }
if(flag2)
    { 
        PORTC = arrLedO[count];
    }
if(flag3)
    { 
        PORTC = arrLedCH[count];
    }
if(flag4)
    { 
        PORTC = arrLedNECH[count];
    }
if(flag5)
    { 
        PORTC = arrLedS[count];
    } 
count++;
 if(count >= 8)
 {
   count = 0;
 }
} 
void main(0)
{
 Timer0Init()
 StartTimer() 
bool flag1;
bool flag2;
bool flag3;
bool flag4;
bool flag5;
while(1)
 {
    if(KeyGet() == 1)
    {
         flag1 = true;
         flag2=false;
         flag3=false;
         flag4=false;
         flag5=false;
    }
 
    if(KeyGet() == 2)
    {
         flag1 = false;
         flag2 = true;
         flag3 = false;
         flag4=false;
         flag5=false;         
    }
    if(KeyGet() == 3)
    {
         flag1 = false;
         flag2=false;
         flag3=true;
         flag4=false;
         flag5=false;         
    }
 
    if(KeyGet() == 4)
    {
         flag1 = false;
         flag2 = false;
         flag3 = false;
         flag4=true;
         flag5=false;         
    }
    if(KeyGet() == 5)
    {
         flag1 = false;
         flag2=false;
         flag3=false;
         flag4=false;
         flag5=true;         
    }
 }
Ругается CodeVision на строчку 45:ISR ( TIMER0_OVF_vect ) и нас строчки с 30 по 34.Что делать?
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
23.04.2015, 19:56 35
Цитата Сообщение от gubilon Посмотреть сообщение
ISR ( TIMER0_OVF_vect )
Я привел пример для компилятора GCC для своего смотрите в справке.
Цитата Сообщение от gubilon Посмотреть сообщение
нас строчки с 30 по 34
дословно приводите что пишет компилятор
Примерно так:
interrupt [номер вектора] void имя функции обработчика прерывания(void)
0
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
23.04.2015, 20:01 36
Цитата Сообщение от MS24 Посмотреть сообщение
count++;
if(count >= 8)
{
count = 0;
}
Это пишется проще
count++;
count &= 7 ;
0
MS24
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
Завершенные тесты: 1
23.04.2015, 21:06 37
Цитата Сообщение от gubilon Посмотреть сообщение
void main(0)
{
*Timer0Init()
*StartTimer()
bool flag1;
bool flag2;
bool flag3;
bool flag4;
bool flag5;
Надо объявить глобально ( Вверху по вашему )

Добавлено через 1 минуту
Цитата Сообщение от Ethereal Посмотреть сообщение
Это пишется проще
count++;
count &= 7 ;
Можете пояснить?
0
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,366
Завершенные тесты: 1
23.04.2015, 21:15 38
Цитата Сообщение от MS24 Посмотреть сообщение
Можете пояснить?
элементарно
двоичный код 7 это 111
при операции И затираются все байты кроме первых трех
например 8
1000
&
0111
=
0000 0
9
1001
&
0111
=
0001 1
равнозначная замена
C++
1
count%=8;
0
MS24
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
Завершенные тесты: 1
23.04.2015, 22:06 39
Цитата Сообщение от gubilon Посмотреть сообщение
Ругается CodeVision на строчку 45:ISR ( TIMER0_OVF_vect ) и нас строчки с 30 по 34.Что делать?
Сгенерируйте прерывание визард мастером, он сам и таймер настроит и прерывание сделает.

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
равнозначная замена
ооООО Ничоси!
Это я запомню! когда нужно будет еще больше оптимизировать ( запутать ) код - буду применять )))
0
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,366
Завершенные тесты: 1
23.04.2015, 22:16 40
Цитата Сообщение от MS24 Посмотреть сообщение
еще больше оптимизировать
не думаю что удастся оптимизировать, компиляторы давно уже остаток от деления на степень 2 заменяют на "И"
а деление на сдвиг
Цитата Сообщение от MS24 Посмотреть сообщение
запутать
тем более не получится, на это только очень начинающие попадутся
0
23.04.2015, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2015, 22:16

Последовательное плавное управление яркостью светодиодов
Нужно написать программку на Atmega48 в CodevisionAVR Используя PORTD 0 1 2 С начало загорается...

Переключение четырех светодиодов (сдвиг) по кнопке
Добрый день. Требуется помощь в написании кода на Assembler. Задание следующее: Переключение...

Последовательное зажигание Пяти светодиодов
Всем привет! Загорелся идеей собрать световой меч, на пяти светодиодах, их суну в пластиковую пвх...


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

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

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