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

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

1 43 99

Zandy, а если вот так: (см. аттач)?
И константы я в самом начале расположил, так удобнее - их сразу видно и легко поменять.
А ещё, похоже, возможно обойтись без SecR, SecL. Если состояние TEMP1 проверять. Это так, идея навскидку.
регистры после включения питания и так имеют нулевое значение
Нет. См. стр. 16-18 даташита. В регистрах ОЗУ (кроме SFR) и портов после сброса произвольные значения (кроме младших четырех битов PORTA). Для симуляции этого и есть "Power on reset" в MPLAB. См. также в статье ASD, "Радио" №10-2001, стр.16.

61497.asm

 

picmaniac: А ещё, похоже, возможно обойтись без SecR, SecL. Если состояние TEMP1 проверять.
Проверять TEMP1 конечно можно, выкинув SecR, SecL, но как мы узнаем, куда направлять программу, если идет бегущий огонь? Т. е. должен быть какой-то критерий распознавания направления бегущего огня. В данном случае это
movf SecL,f ; Проверка, идет ли в данное время бегущий
jnz L1 ; огонь влево. Если идет, переходим на L1
movf SecR,f ; Проверка, идет ли в данное время бегущий
jnz R1 ; огонь вправо. Если идет, переходим на R1
Еще вопрос. Почему хранилища
W_Temp equ 07Fh ; временные хранилища
STAT_Temp equ 07Eh ; для W и STATUS
мы прописываем отдельно, а не там, скопом со всеми остальными регистрами?
picmaniac: Для симуляции этого и есть "Power on reset" в MPLAB.
Это где такое?
Еще по поводу оформления. Почему-то, когда загружаю ваш .asm файл, строчки разбегаются. Я их выравниваю. Выкладываю. Смотрю, как выложился. Разбегаются. Когда вы корректируете, у вас та же история. Корректируете. Выкладываете. Разбежались. Я загрузил, некоторые разбегаются, некоторые нормально. Чепуха, одним словом. Наверное это из-за разных настроек размера табуляции? Я табуляцией вообще не пользуюсь. Тупо и методично забиваю пробелами.

 

Zandy: критерий распознавания направления бегущего огня Тут я ещё подумаю. Идея была "навскидку".
из-за разных настроек размера табуляции Вполне возможно.
Почему хранилища мы прописываем отдельно Чтоб не было проблем в случае, если при возникновении прерывания активен не нулевой банк ОЗУ. Мало ли, допустим разместили мы свои регистры пользователя в банке 2, да и работаем с ними. И вдруг прерывание. А регистры 070h-07Fh доступны из любого банка (см. карту памяти на стр.15 даташита). Так, небольшая перестраховка, которая будет очень полезна в будущем. По хорошему следует после сохранения контекста в обработчике явно указывать - в какой банк ОЗУ перейти для дальнейшей обработки прерывания.

Кстати, подробно о прерываниях я писал здесь: http://www.pro-radio.ru/controllers/2220-14/

 

Прочитал я вот тут http://www.radio.ru/ubb/Forum4/HTML/000769.html
Понял, что это страшно замороченная штука. И то, чем мы тут занимаемся - детский лепет. Может что-то посерьезнее сделаем, но не сильно, а чуть-чуть.

 

Zandy , а что если для различения направлений использовать Secpause (эх, непривычно мне так, привык уже все регистры заглавными буквами обозначать). Так вот, что если в одном случае (когда идём влево) его декрементировать (как сделано сейчас). А в другом случае (вправо) - инкрементировать (incfsz опять же до нуля, например 251,252,253,254,255,0). Тогда (по идее) по числу в регистре Secpause можно будет различать направления.
Это опять же навскидку, пища для размышлений.

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

Может что-то посерьезнее сделаем
Может и сделаем, только уж по полной программе:
1. Формулировка техзадания на словах.
2. Обсуждение и корректировка техзадания.
3. Построение графа конечного автомата.
4. Анализ графа.
5. Построение алгоритма графически.
6. Анализ алгоритма.
7. Написание кода.
8. Отладка в симуляторе.
9. Проверка и отладка в железе.

Причём - желательно не на ассемблере.

Как вам такой вариант, уважаемые участники?

 

Можно, но в этом регистре, в зависимости от момента (пауза длится 12 тактов прерывания) могут быть разные числа. Т. е. отличие только в диапазонах счета. Тогда придется делать subwf или sublw, контролировать флаг С и потом "расползаться" на сценарии. Или что-то подобное? А потом ведь по состоянию этого регистра нельзя сделать вывод о том, кончился бегущий огонь или нет. Т. е. он может быть 12 (255-12), т. е. установлен в начало, а бегущий огонь все еще идет. Просто это может быть момент переключения на соседний светодиод.

 

picmaniac: 3. Построение графа конечного автомата.
4. Анализ графа.

При этих словах я сразу выпадаю "в осадок" и настроение портится.

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

 

picmaniac: Как вам такой вариант, уважаемые участники?
По моему повторяется вариант с Splav56 и Zandy. Это я по поводу "участникИ". Активности все-таки маловато. Может свистнуть на других форумах и позвать сюда? Или нам и так хорошо?

 

Zandy: Активности все-таки маловато.
Я, думаю также как и остальные - в режиме "read only" Читаю и завидую... белой!

 

Левон: Я, думаю также как и остальные - в режиме "read only"
А чего так? Догоняйте и вперед. Я тоже подключился сюда позже и в обсуждении первого задания участия не принимал. Но внимательно все прочитал и даже возникли какие-то собственные мысли, в результате чего написал свой вариант решения того же задания. Загружайте .asm в MPLAB и по шажкам, по шажкам...