Микроконтроллеры | Ликбез по программированию PIC |
|
---|---|---|
Вроде уже догадался (см) |
|
|
|
|
|
Прочитав все, резюмирую: 1. Имеем утвержденное ТЗ. |
|
|
Итак, схема утверждена эта: |
|
|
По графу picmaniac'a: отсутствует устойчивое состояние, когда нажато более одной кнопки. Вот мой граф (см. приложение) |
|
|
Вопросы к Andy: 1) в чем нарисован алгоритм? Не могу никак подобрать оптимальную программу для рисования блок-схем. Exel неудобен. |
|
|
Извините, забыл зациклить вершины графа. Исправленный вариант прилагаю. |
|
|
Splav56: в чем нарисован алгоритм? Разумеется, во FreeHand'е. Хотя подобные промежуточные решения можно было и руками нарисовать и сфотографировать |
|
|
Splav56: алгоритм требует письменных пояснений Звери! Ну раз уж взялся нарисовать... Все просто. Тут показано тело бесконечного цикла. Идея: получить в конце цикла байт с выставленными битами, соответствующими включенным светодиодам. Например, если нужно зажечь первые три, записываем в этот байт число 7 (двоичное 00000111). На схеме алгоритма этим байтом сразу считается порт B (хотя как тут говорят, читать из него без особой надобности не следует, поэтому пусть это будет любая регистровая переменная). В начале обнуляем весь байт, а потом начинаем устанавливать биты в единицы, зажигая светодиоды. С первой кнопкой просто: если она нажата, записываем в порт B значение 1 и идем дальше. Если нажата вторая кнопка, смотрим, есть ли в порте В какое-то отличное от нуля значение. Если есть (а это значит, что какой-то светодиод уже включен), обнуляем порт и заканчиваем цикл. Если нет (т. е. port B == 0), записываем туда двоичное 00000011 (зажгли два светодиода) и переходим к третьей кнопке. Повторяем почти один в один предыдущий абзац для всех остальных кнопок. Если выясняется, что пора включать свет, записываем в порт 0000111 или 00001111 при нажатой третьей или четвертой кнопках. Если на предыдущих шагах какой-то светодиод уже включен, сбрасываем в нуль байт и заканчиваем цикл, не интересуясь тем, нажаты или нет остальные кнопки. Теперь выдаем сформированные биты на выход, где сидят светодиоды. И наконец, как правильно заметил Picmaniac, раз мы подключаем светодиоды к +Uпит, то полученный байт должен быть проинвертирован. Это можно сделать либо в конце цикла, либо проинвертировав сразу все значения в алгоритме (то есть вместо 1 пишем 255, вместо 00000111 — 11111000 и т. д.). Но я бы предпочел добавить одно действие в конце, потому что сравнивать с нулем проще, чем сравнивать со значением 11111111. |
|
|
Crot2: Начинающему гораздо проще понять, что идёт ПРОСТОЙ процесс чтения нужного регистра, изменения полученного КОДА с помощью допустимых команд и выдача управляющего КОДА опять же в нужный регистр, т.е. ячейку памяти со своим индивидуальным адресом. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |