|
|
|
|
Zandy: Не укажете номера? Если кто-нибудь не опередит, то посмотрю вечером (они у меня дома) и отпишу.
|
|
|
1. А. Долгий Разработка и отладка устройств на МК (МИКРОПРОЦЕССОРНАЯ ТЕХНИКА) — 2001, № 5, c. 17 2. А. Долгий Разработка и отладка устройств на МК (МИКРОПРОЦЕССОРНАЯ ТЕХНИКА) — 2001, № 6, c. 24 3. А. Долгий Разработка и отладка устройств на МК (МИКРОПРОЦЕССОРНАЯ ТЕХНИКА) — 2001, № 7, c. 19 4. А. Долгий Разработка и отладка устройств на МК (МИКРОПРОЦЕССОРНАЯ ТЕХНИКА) — 2001, № 8, c. 28 5. А. Долгий Разработка и отладка устройств на МК (МИКРОПРОЦЕССОРНАЯ ТЕХНИКА) — 2001, № 9, c. 22 6. А. Долгий Разработка и отладка устройств на МК (МИКРОПРОЦЕССОРНАЯ ТЕХНИКА) — 2001, № 10, c. 14 7. А. Долгий Разработка и отладка устройств на МК (МИКРОПРОЦЕССОРНАЯ ТЕХНИКА) — 2001, № 11, c. 19 8. А. Долгий. Радработка и отладка устройств на МК (Микропроцессокрная техника) — 2001, № 12, c. 23 9. А. Долгий Разработка и отладка устройств на МК (Микропроцессорная техника) — 2002, № 1, c. 18
|
|
|
Zandy, см. почту. Левон, а у Вас есть эти журналы? Названия всех спецрегистров, а также их битов, и условные аббревиатуры для конфигурации содержатся в стандартном файле заголовка MPLAB с расширением .inc (например p16f628.inc). Можете его открыть и посмотреть. Подробнее - в статьях ASD очень хорошо расписано ("Радио № 9 - 2001, стр.23). В самом начале нашей программы мы подключаем его директивой #include <p16f628.inc>. Т.е. как бы вставляем содержащийся в этом файле текст в нашу программу. О конфигурации я подробно рассказывал выше в этой же ветке, желающие могут поискать. Пример достаточно сложной программы с подробнейшими комментариями и описанием - это, например, моя "поющая ёлка": http://www.pic16.nm.ru/PIC_elka_full.zip Allex jnz MACRO metka1 ; условный переход, btfss STATUS,Z ; если не 0 goto metka1 endm Допустим, мы используем её три траза, значит в тексте будет три "metka1", или как? Компилятор это в ступор не введет? Не введёт. Потому что при каждом применении этой макрокоманды мы будем указывать реально существующую в программе метку вместо локального обозначения "metka1". Например: movf MYREG,F ; Проверка регистра на ноль jnz Label01 ; Если не ноль - переход на метку Label1 |
|
|
picmaniac: а у Вас есть эти журналы? есть, конечно же.... P.S я пока не дома... приду- посмотрю обязательно СПАСИБО за ответы!!! |
|
|
Zandy: "Левон: org 0 - почему "0", а не скажем 100h.., и что значит "org"? " Это директива асма, означает, с какого адреса начинается выполнение программы. Верно, но не совсем. Директива ORG указывает по какому адресу нужно разместить следующую за ней команду. Т. е. если написано org 0 goto Start org 4 goto Int То это значит, что по нулевому адресу разместится команда goto Start, адреса 1, 2 и 3 останутся незапрограммированными, а по адресу 4 будет находиться команда goto Int. |
|
|
picmaniac: Zandy, см. почту. Спасибо за статью. Чем будем дальше заниматься? |
|
|
Тестировать девайс в железе. Только что я это проделал. Всё работает нормально. Замечание выявил лишь одно - по конфигурации. Режим низковольтного программирования в слове конфигурации должен быть отключен, т.к. вывод RB4 у нас задействован. Поэтому 3F70. См. стр.104 даташита. Вот и схема, которую сделал Zandy - отныне он почётный учаснег ветки Ликбез. Названия кнопок я уж сам написал. http://www.pic16.nm.ru/likbez1/schema03.gif
В аттаче - программа Zandy с исправленным мной словом конфигурации. Ну и тип контроллера я там без "А" поставил, потому что у меня такой для экспериментов. Как вариант дальнейших дествий предлагаю переделать программу по предложенному Vlad_Petr принципу - с опросом кнопок и выявлением результата в прерывании по таймеру. "Бегущие огни" оформить в виде отдельных подпрограмм. Предлагаю использовать при написании программы предложенные мной выше макрокоманды. На стр.13 я рассказывал о рекомендованной "шапке" для программ. Повторно заглянуть туда будет совсем нелишне. 61117.asm |
|
|
picmaniac: Как вариант дальнейших дествий предлагаю переделать программу по предложенному Vlad_Petr принципу - с опросом кнопок и выявлением результата в прерывании по таймеру. Т. е. как бы совместить две учебные программы? Но ведь тогда несколько нарушится логика работы задания №3? Бог с ней? |
|
|
Почему она нарушится? Работа устройства для пользователя должна остаться такой же. А уж сколько раз кнопки проверять и как - это забота программиста. Мы пока реализовали простой, но далеко не оптимальный вариант. Много ресурсов расходуется впустую, МК крутится как белка в колесе, или ожидая нажатия кнопки, или бесцельно тратя время на паузу. А ведь в это время он мог бы решать другие задачи. Допустим, прерывание от таймера будет происходить с периодом 50 мс [1000000/(128*157) = 49,76 ~= 50]. Таймер должен будет считать не от нуля, а от скорректированного начального значения, которое мы будем заносить в регистр TMR0 при каждой обработке прерывания. Так, чтоб получалось 157 инкрементов TMR0 до переполнения, а не 256. Тогда решение о положении кнопок будет приниматься по трём проверкам (0, 50, 100 мс). Если при выходе из обработчика будет получен результат "кнопка нажата" - это будет уже отфильтрованный результат! И можно сразу запускать бегущий огонь и устанавливать 1 на выходе. Запрещать ли прерывания на время "бегущего огня" - подумаем. Если результат "обе нажаты" - зажигаем 2 средних светодиода. Если результат "обе отпущены" - гасим светодиоды и обнуляем выходы. Всё - ждём следующего прерывания (как вариант - просто зацикливаемся на месте). Все эти действия займут очень немного времени (кроме самого "бегущего огня", но и его можно сделать через прерывания, с минимальными затратами ресурсов). Освободившиеся ресурсы МК можно направить на решение других задач. Вот такое предложение. |
|
|
picmaniac: прерывание от таймера будет происходить с периодом 50 мс [1000000/(128*157) = 49,76 ~= 50] Не понял расчет. 1000000 - это что? Если это 4МГц/4 то получим не 50 мс, а 50 Гц. А 50 мс - это 20 Гц. Этот расчет я проводил в посте от 31 октября, 22:52, там получался коэффициент предделителя 256, а для счетчика 195. |
|
|
|
|