- Форум
- Справка
- Радиокомпоненты и модули
- Статья 9. Микроконтроллеры PIC. Использование разных систем исчисления
×
Радиокомпоненты и модули
Статья 9. Микроконтроллеры PIC. Использование разных систем исчисления
- alex
-
Автор темы
- Не в сети
- Модератор
-
Меньше
Больше
- Сообщений: 189
- Репутация: 12
- Спасибо получено: 8
7 года 8 мес. назад #496
от alex
Все что просто - гениально, а что сложно, то можно разложить на гениальное.
При использовании десятичной системы исчисления, как было раньше,...
Подробнее...
Среда разработки программ для микроконтроллеров mikroC понимает несколько систем исчисления: десятичную, двоичную, шестнадцатеричную. Таким образом, одни и те же числа можно представлять в этих разных системах. Сразу же возникает вопрос: Зачем? Почему бы не использовать знакомую нам с детства десятичную?
Дело в том, что иногда удобнее использование других систем для получения более практичной программы.
Формы записи чисел в различных системах исчисления | |||||||
Десятичная | Двоичная | Шестнадцатеричная | Десятичная | Десятичная | Шестнадцатеричная | ||
00 | 00000000 | 00 | 11 | 00001011 | 0B | ||
01 | 00000001 | 01 | 12 | 00001100 | 0C | ||
02 | 00000010 | 02 | 13 | 00001101 | 0D | ||
03 | 00000011 | 03 | 14 | 00001110 | 0E | ||
04 | 00000100 | 04 | 15 | 00001111 | 0F | ||
05 | 00000101 | 05 | 16 | 00010000 | 10 | ||
06 | 00000110 | 06 | 17 | 00010001 | 11 | ||
07 | 00000111 | 07 | 18 | 00010010 | 12 | ||
08 | 00001000 | 08 | 19 | 00010011 | 13 | ||
09 | 00001001 | 09 | 20 | 00010100 | 14 | ||
10 | 00001010 | 0A |
Рассмотрим использование двоичной и шестнадцатеричной систем вместо десятичной на примере описанных раньше бегущих огнях, задействовав весь порт B, т.е. 8 выводов: RB0, RB1, … , RB7.
Все что просто - гениально, а что сложно, то можно разложить на гениальное.
- wade
- Не в сети
- Новый участник
-
Меньше
Больше
- Сообщений: 7
- Спасибо получено: 0
1 год 5 мес. назад #497
от wade
Проект собрал и все работает, но есть пару вопросов:
1. После того, как гаснет последний светодиод, проходит достасточно времени(порядка 3-4 сек), пока вновь загорится первый светодиод и цикл пойдет по новой. Не могу понять, с чем это связано.
2. Теперь, когда я отпускаю кпонку1, загорается "дежурный" светодиод и продолжает гореть последний светодиод, на котором остановился цикл. Тоже не пойму, в чем дело.
github.com/e-Wade/Lesson9/blob/master/lesson9
1. После того, как гаснет последний светодиод, проходит достасточно времени(порядка 3-4 сек), пока вновь загорится первый светодиод и цикл пойдет по новой. Не могу понять, с чем это связано.
2. Теперь, когда я отпускаю кпонку1, загорается "дежурный" светодиод и продолжает гореть последний светодиод, на котором остановился цикл. Тоже не пойму, в чем дело.
github.com/e-Wade/Lesson9/blob/master/lesson9
- belperson
- Не в сети
- Новый участник
-
Меньше
Больше
- Сообщений: 3
- Спасибо получено: 1
1 год 5 мес. назад - 1 год 5 мес. назад #498
от belperson
1. Не злоупотребляйте сдвигами! Вот вам статья для раздумья:
Я не профессиональный программист, но придерживаюсь правила всегда учитывать даже незначительные моменты и не допускать неопределённостей.
Я бы в функции бегущего огня вместо
написал бы
2.Давайте прочитаем ваш код:
if (knopka1==0) begogon();
else PORTB.F0=1;
if (knopka1==0) begogon(); - если кнопка один нажата, то выполняется функция бегущего огня,
else PORTB.F0=1; - иначе зажигаем светодиод на PB0.
А кто должен гасить светодиод, который зажгла функция "бегущий огонь"?
Я бы в функции бегущего огня вместо
ВНИМАНИЕ: Спойлер!
[ Нажмите, чтобы развернуть ]
[ Нажмите, чтобы скрыть ]
if(temp!=0) // Если temp не равен нулю (0b00000000)
{ // выполняем цикл
PORTB=temp; // Порту B присваиваем значение temp
temp=temp<<1; // Сдвиг temp влево на 1 бит
pause(); // Пауза
}
else temp=0b00000001; // Иначе (если temp=0), присваиваем temp нач. значение
{ // выполняем цикл
PORTB=temp; // Порту B присваиваем значение temp
temp=temp<<1; // Сдвиг temp влево на 1 бит
pause(); // Пауза
}
else temp=0b00000001; // Иначе (если temp=0), присваиваем temp нач. значение
написал бы
ВНИМАНИЕ: Спойлер!
[ Нажмите, чтобы развернуть ]
[ Нажмите, чтобы скрыть ]
PORTB=temp; // Порту B присваиваем значение temp
if(temp == 0b10000000)temp == 0b00000001;
else temp=temp<<1; // Сдвиг temp влево на 1 бит
pause(); // Пауза
if(temp == 0b10000000)temp == 0b00000001;
else temp=temp<<1; // Сдвиг temp влево на 1 бит
pause(); // Пауза
2.Давайте прочитаем ваш код:
ВНИМАНИЕ: Спойлер!
[ Нажмите, чтобы развернуть ]
[ Нажмите, чтобы скрыть ]
if (knopka1==0) begogon();
else PORTB.F0=1;
if (knopka1==0) begogon(); - если кнопка один нажата, то выполняется функция бегущего огня,
else PORTB.F0=1; - иначе зажигаем светодиод на PB0.
А кто должен гасить светодиод, который зажгла функция "бегущий огонь"?
Последнее редактирование: 1 год 5 мес. назад от belperson.
Спасибо сказали: wade
- wade
- Не в сети
- Новый участник
-
Меньше
Больше
- Сообщений: 7
- Спасибо получено: 0
1 год 5 мес. назад #499
от wade
Спасибо за советы! мне они помогли! Статью про сдвиги прочитал, но не все понял из нее.
Код изменил, теперь все работает нормально. А могли бы вы дать какиенить комментарии по коду? Все ли я делаю правильно? мне кажется, что я в некоторых местах использую костыли, когда можно сделать проще. И еще у меня небольшие проблемы в коде из следующей статьи. Вроде все работает, но бывают глюки в переключении кнопок и тоже кажется, что сделал кривовато.
Код изменил, теперь все работает нормально. А могли бы вы дать какиенить комментарии по коду? Все ли я делаю правильно? мне кажется, что я в некоторых местах использую костыли, когда можно сделать проще. И еще у меня небольшие проблемы в коде из следующей статьи. Вроде все работает, но бывают глюки в переключении кнопок и тоже кажется, что сделал кривовато.
- belperson
- Не в сети
- Новый участник
-
Меньше
Больше
- Сообщений: 3
- Спасибо получено: 1
1 год 5 мес. назад #500
от belperson
Все приходит с опытом. Комментариев давать не буду, так как сам программирую исключительно ради хобби. С кнопками большая часть вопросов отпадет, когда освоишь прерывания.
И вот еще: иногда костыль может быть фичей=) Так, что меньше об этом думай. Удачи.
И вот еще: иногда костыль может быть фичей=) Так, что меньше об этом думай. Удачи.
- Форум
- Справка
- Радиокомпоненты и модули
- Статья 9. Микроконтроллеры PIC. Использование разных систем исчисления
Время создания страницы: 0.155 секунд