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

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

1 28 99

Ошибочно запостил. Удалено.

 

picmaniac, а как в задании 3 должны быть распределены входы - выходы по портам? Ну, в смысле, где светодиоды, где кнопки, где выходы. Можно конечно самому раскидать, но для единообразия задайте.
И еще. По поводу бегущего огня. Допустима ли пауза между загоранием шестого с/д и первого? Ну как-бы расчитываем на 8, а подключаем 6. Либо после зажигания шестого регистр устанавливаем в единицу и продолжаем сдвигать по новой?
Да, ну и защиту от дребезга пока не делаем? Или делаем, но потом?

 

Zandy: а как в задании 3 должны быть распределены входы
Задачка на сообразительность. Я специально не стал указывать. Ваши предложения?

Пауза по техзаданию недопустима. Насчёт защиты от дребезга - читайте ТЗ внимательно.

 

Предлагаю на RA0-RA5 светодиоды, RA6, RA7 - выходы на внешние ус-ва. RB0 - кнопка "L". RB1 - кнопка "R".
По поводу дребезга думаю так. При однократном нажатии, наверное, ничего делать не надо, т. к. циклы опроса кнопок будут идти быстро, рано или поздно "наткнутся" на нажатую кнопку и основная программа перемигивания начнет выполняться. Но вот при удержании немного не понятно. Здесь опрос кнопок будет редкий, с паузами на время пробегания бегущего огня. И если вдруг проскочит фальшивая 1 (ослабится давление на кнопку) и это событие совпадет по времени с опросом кнопок, основная программа перестанет выполняться и опять зациклится в малое кольцо опроса кнопок. Фальшивая 1 пропадет, и программа пойдет выполняться далее, как и положено. Все бы ничего, но в момент попадания в малое кольцо опроса кнопок, на выходе L (R) может кратковременно проскочить 0, а это противоречит заданию.
И еще - одновременное нажатие двух кнопок? Здесь тоже как-то неясно с дребезгом при удерживании кнопок. Ну в смысле, моргания светодиода мы не заметим, но вот на выходах то может быть коротенький импульс. Не, не так. При появлении фальшивой 1 программа уйдет в пп бегущего огня, выполнится, по крайней мере один цикл этой пп.
Вообще, дребезг для меня всегда был "камнем преткновения".

Все. Прошу тайм-аут. Меня берут "в оборот".

 

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

 

picmaniac: Хорошо подумали???
Соображения только такие. Легче один порт на вход, другой - на выход, чем разбивать один порт: часть разрядов на вход, часть на выход. Ну и на В можно подключить подтягивающие резисторы, значит - вход.

 

picmaniac: Если нет - пришлю мэйлом.
Лучше мэйлом, если можно. С файлообменником пока не разбирался.

 

Отправил.

Я бы сделал RB6, RB7 кнопки; RB0-RB5 светодиоды; RA0, RA1 выходы. RA5/_MCLR не очень хочется трогать, к тому же он без выходного буфера (см. даташит). RB6, RB7 имеют подтягивающие резисторы, а также предусмотрено соответствующее прерывание. Поэтому кнопки - к ним. А уж PORTA пусть с внешним миром общается.

 

Да будет так! :\)+

 

С интересом читаю все ветки по ликбезу. Практика, конечно, хорошо, но нельзя-ли и немного теории. Хочется, что бы кто-нибудь из "старых и опытных" растолковал основы двоичной арифметики. Так сказать, "тип энд трикс". Вот ув. picmaniac упоминул немного о "маскировании" битов, но ведь есть и другие, не вполне очевидные, для начинающих вещи. Например, подсказка номер один - что бы проинвертировать конкретный бит, достаточно отксорить (XOR) его с единичкой. Если позволите, небольшой список "хотелок":
- для чего используется команда SWAP, т.е. что она делает я понимаю, не понимаю для чего это можно применить.
- биты переноса. Как, например, организовать двухбайтный счетчик?
- как сравнить два числа (больше - меньше)?
Ну и т.д., вам видней. Думаю, это будет интересно не только мне.