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

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

1 17 99

Далее в принципе все понятно, примерно то же самое хотел соорудить и я. Просьба откорректировать теперь мой исходник, где у меня баги?

 

Насчет задержки. Задержка необходима если мы хотим прочитать из порта то, что только что записали туда, но нас не интересует текущее состояние светодиодов, а значение битов клавиш во время записи в порт не менялось. Я могу ошибиться, но думаю, что задержка в данном случае не требуется. Надо бы прогнать на железе для проверки.

 

Повтор вопроса №2:

В комментариях следует дополнить то, что раз в программе не используется таймер TMR0 и в слове конфигурации отключен WDT и не надо конфигурировать предделитель, то вместо установки в ноль только бита 7 (-RBPU) мы можем использовать байт-ориентированную команду загрузки 8-битной константы:

movlw B'00000000' movwf OPTION_REG ; Подтягивающие резисторы вкл (бит7 := 0)

 

А вдруг мы решим использовать этот фрагмент в другой программе и данная установка перекроет ранее заданные значения битов. Тогда найти ошибку будет трудно. Кроме того Ваш вариант имеет 2 команды, а изменение одного бита делается одной.

 

SAK: А вдруг мы решим использовать этот фрагмент в другой программе и данная установка перекроет ранее заданные значения битов. Тогда найти ошибку будет трудно. Кроме того Ваш вариант имеет 2 команды, а изменение одного бита делается одной.

Это цитата из программы picmaniac'a . Я наоборот, за использование бит-ориентированной команды, как у меня в исходнике.
Всем спасибо, имея на руках два таких исходника, как picmaniac'a и SAK'a плюс комменты gan'a, думаю в своих каракулях разберусь.

До завтра!

 

Splav56: Это цитата из программы picmaniac'a
Прошу прощения, когда за короткий промежуток времени сваливается сразу столько информации уже не упомнишь кто конкретно чего написал

 

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

 

К вопросу номер 2 (я тут уезжал по делу на пару часов, поэтому не сразу).
Использованный мной вариант загрузки байта в OPTION_REG универсален, т.к. позволяет сразу задать режимы работы WDT, предделителя, вкл/откл резисторов и т.п. Я стремился к наглядности. Вот он байт - виден, специально в двоичной форме. Загрузили его в OPTION_REG - это тоже чётко видно. А в данном случае вариант, который предложил Splav56, вполне хорош. Насчет перекрытия ранее заданных значений битов - предложенная загрузка данных может осуществляться один раз в самом начале программы. А потом можем и бит-ориентированние команды применить.
Насчет задержки. В общем случае она необходима, а в данном конкретном случае не нужна, я лишь специально заострил внимание на этой особенности. Так лучше запомнится
Программы, которую предложил SAK и предложенная мной очень похожи, разница в основном в особенностях написания кода.
Теперь не спеша посмотрю программу Splav56 и сравню со своей.

 

Дополнение по замечаниям от 20:36 и 20:43. При инициализации в порт специально заносится заданный байт. Потому что предложенная инициализация может быть подходящей и для других проектов.
Вот последующая команда movlw - действительно в данном случае лишняя, не грех её и удалить.
А затем начинается цикл, и команда
Cycle_label movwf PORTB ; PORTB := W
выполняется уже при каждом проходе цикла, многократно. При этом в порт каждый раз загружается комбинация, соответствующая текущему состоянию кнопок. Удалять эту команду никак нельзя, см. алгоритм.
И еще пожелание, как и по программаторам. Предлагаю создание проектов в PROTEUS в этой ветке не затрагивать. Лучше создадим отдельную. А сюда выкладывать только уже сделанные и проверенные проекты. Один уже есть.

 

picmaniac: А сюда выкладывать только уже сделанные и проверенные проекты
Я бы предложил создавать для каждого проекта новую ветку, это облегчит поиск информации.
А насчет последовательности команд спорить не буду, это дело вкуса, а как известно "на вкус и цвет товарищей нет"