Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 4 99

Левон: Кроме всего прочего должен быть так называемый «код администратора»,
А кроме всего должен быть "код набора под принуждением". Это, когда " ошибаешься" нечайно при наборе и набираешь цифру на единицу, отличающуюся от правильной. При этом передается "тихое" извещение на ПЦН ментовки. Светодиод на кодовой панели показывает "доступ разрешен" и дверь открывается. Пошел читать далее
Да! замолкаю и внимаю.

 

picmaniac:Или хотите использовать прерывание по изменению уровня? Если нет - сразу проверяем №1...№4 по очереди, затем возвращаемся на "ожидание ввода".

Я предположил что раз кнопки мы подключили к RB4-RB7, то будем использовать прерывание по внешнему событию.

picmaniac: И зачем многократно давать команду на включение светодиодов при нажатой кнопке? Один раз записали в защелку порта требуемую комбинацию, и просто ждем отпускания кнопки.

Имелось в виду что при нажатой кнопке с/д должен гореть, после отпускания - погаснуть система должна перейти в режим ожидания ввода (прерывания по внешнему событию). Алгоритм изменю в этой части.

Andy: Проще сразу на основании значения полубайта (четыре бита, по одному на кнопку) выдать еще четыре бита — по одному на светодиод

Хорошая мысль! Но я предполагал использовать прерывания по внешнему событию. В принципе можно выбрать любой вариант или, как предлагает picmaniac, сделать оба варианта.

 

Skit, имеется ввиду не "набор кода для открывания замка, чтобы выйти", а "набор кода изнутри помещения для удобства постановки на охрану, после чего свободно выходим и система сама включает охранный режим".

Splav56, годится ли предложенная схема?

Левон, что-то Вы исчезли?

 

По поводу кнопок: предлагаю оформить для каждой кнопки и светодиода (шаблон, или как его правильно назвать?).
Например:

#define LED1pin PORTB,0 ; ножка 1го светодиода
#define LED2pin PORTB,1 ; ножка 2го светодиода
#define LED3pin PORTB,2 ; ножка 3го светодиода
#define LED4pin PORTB,3 ; ножка 4го светодиода

т.е. командой #define мы присваиваем последовательности символов PORTB,1 более удобное в использовании метку LED2pin. Во время компиляции, компилятор автоматически выполнит замену LED2pin на PORTB,1.
Это свойство полезно еще тем, что для того чтобы управлять светодиодом на другой ножке, достаточно будет в самом начале программы просто модифицировать указанную строчку.
А работать с этими шаблонами можно как и с обычной записью. Например:
bsf LED1pin ; Включение 1го светодиода.

 

Очень хорошая мысль. Надеюсь, скоро начнем написание исходника. Предлагаю назвать проект likbez01.pjt
Замечание: нежелательно применение команд bsf и bcf к регистрам портов PORTA, PORTB. Или, по крайней мере, требуется повышенное внимание. Операции с портами выполняются по принципу "чтение-модификация-запись", а при чтении порта мы получаем именно те значения, которые РЕАЛЬНО имеются на выводах микросхемы, независимо от состояния защелок. Об этом упоминается и в даташите. Лучше сразу записывать заранее сформированный байт в регистр порта.

 

У меня вот такая схема получилась (см. вложение). Пока рисовал, Splav56 свою прислал, и сразу вопросы появились:
1) почему у меня, т.е. моей схеме "Конца" нету? Я не вижу где его там лепить! Пусть работает по циклу. Или я чо-то не понял?
2) это, блок-схема алгоритма - порядок действий МК, как я понимаю. А зачем тогда ГРАФ нужен? Предусмотреть всевозможные варианты? так это в ТЗ может быть сделано.

Просьба ко всем: по возможности не сильно поропиться: не каждый день получается на форум заглянуть. Хочется книгу, справчник поматрять, потом уже вопрос задать а тут за день на куратора "надавили" ТЗ обсудили-утвердили... Чувствую скоро до самих программаторов дойдем . Договаривались разжовувать - идти медленно и уверено.
А может это я один от сильных заморозков еще не отошол .

35062.doc

 

lolo2: почему в моей схеме "Конца" нету?
Потому что схема женского рода
Алгоритм, насколько я понимаю, должен быть закольцован. Контроллер выполняет инструкции непрерывно, если только он не в режиме sleep. Проверили кнопки - ничего не нажато - возврат к началу, снова проверяем, и т.д. Нажато что-то - выполняем действие - опять возврат к началу. И еще - зажигать светодиоды, конечно, приятно, но ведь гасить тоже приходится, не забывайте! А граф нужен, чтобы глядя на него было легче алгоритм составить.
Предлагаю "железо" программаторов в этой ветке не затрагивать! Лучше отдельную создать. А то винегрет получится.

 

Алгоритмы, в которых выполняется больше одной проверки состояния каждой клавиши — кощунство Они порочны даже не издевательством над микроконтроллером, а сложностью масштабирования. Когда захочется добавить пятую кнопку, потребуется добавить еще с десяток проверок.

Уж если хочется обязательно пройтись по всем кнопкам, то можно обойтись вчего четырьмя проверками состояния клавиш и одним сравнением с нулем на каждую клавишу (кроме первой). Причем фрагменты «сравнить с нулем, установить значение» функционально одинаковые. И сложность алгоритма не вылезла из линейной: O (n).

До окочания цикла вместо порта B можно использовать переменную (регистр).

 

Пока я пытался нарисовать граф (плод трудов - присоединен), Andy уже и алгоритм предложил.
Кстати, Andy, светодиоды-то по ТЗ к "плюсу" подключены

 

Рассказать, что нужно изменить?