Доброго времени суток,Коты! Решил освоить контроллеры, нашел несколько самоучителей в сети (По ассемблеру), книги, примеры и т.д. Все самообучение было привязано в основном к контроллеру PIC16F84A. К сожалению программатора пока нет (буду делать сам, детальки уже идут, правда пока не определился какой делать), и компутер для этого дела не подходит пока, в общем есть желание на практике проверить свои знания, да нет возможности пока . В общем решил попробовать написать прошивку, для начала простенькую, помигать светодиодами. Прошивку писал на ассемблере, в программке MPLAB 5.70 (в сети говорилось что она работает хорошо, так же скачал 7.50, правда еще не разбирался с нет), так же скачал ПониПрог... Хочу попросить Вас проверить правильность написания программки, будет ли работать, может можно что то поменять для компактности или это просто бред из набора команд. Все номера ячеек брал из описания 16F84A, так как нет пока ни пика ни программатора (о чем уже говорил) Схема нарисована на скорую руку, для того что бы было видно чего хотел изобразить в прошивке... Алгоритм задумывался такой: Подаем питание. Загораются через 1 светодиоды на 1 секунду Затем пока не нажмем кнопку, светодиоды не горят. Нажали кнопку и держим- загорелись все светодиоды на 2 секунды - затем светодиоды мигают против часовой стрелки - 3 секунды, потом против часовой стрелки - 3 секунды, потом опять зажигаются все и так по кругу пока нажата кнопка. Если кнопку нажать и отпустить, то будет только 1 цикл, если держать, то циклы будут повторяться пока не отпустишь кнопку. Схема конечно ужасная, но я еще не рисовал красивую, пока только наброски. В архиве файл ASM & HEX
Вложение:
мигание светодиодов.zip
При первой компиляции мплаб много ругался, устранил все замечания (в основном опечатки и неправильные ригистры в названиях), после чего написанное было скомпилировано без ошибок, мплаб "сказал типа все хорошо". Прошелся по тексту программы пошагово, вроде все отрабатывается как задумано... Посмотрите пожалуйста, критике, объяснениям и поправкам буду только рад, буду исправляться, работать над ошибками и языком. Программка не полная пока, эффектов будет больше, просто пока нет смысла писать не зная правильно ли я вообще мыслю. Заранее спасибо.
Последний раз редактировалось Gudd-Head Вс фев 09, 2014 15:32:13, всего редактировалось 2 раз(а).
Вы совершаете грубейшую ошибку, воспринимая информацию из различных источников, как аксиому, не пропуская её через мозговой фильтр. Ну, в какой "сети" такое говорилось? Такое только утверждал г-н Корабельников, хотя, даже когда он писАл свой постулат, версия была уже далеко не актуальна, поскольку предназначена для ОС типа W-95. На данный момент, последняя версия MPLAB IDE - 8.92. Находится здесь. Конечно, некоторая полезная информация в в/у многотомнике и содержится, но всё, что качается построения программ, оформления текстов, программирования, и т.п, боже упаси! Что бы посмотреть работу программы, без программирования МК, есть программный симулятор Proteus. Надо только помнить, что это - большая программа, и как все подобные программы, имеет некоторые особенности, и требует некоторых навыков работы. Более того. Данный симулятор прекрасно стыкуется с МПЛАБ ИДЕ, что позволяет повысить удобство отладки программы. Для программирования, если собираетесь изготавливать программатор самостоятельно, вобщем-то альтернатив нет. Если для ком-порта, то доработанный Extra-PIC, если для USB, PICkit2. Про используемый софт, там же. С различными ПониПрогами, и другими JDM'ами, есть большая вероятность получения огромного геморроя, вместо работы. Однако, если руки растут не из плечевых суставов, то вы его всё-равно получите.
NikolayZ писал(а):
будет ли работать, может можно что то поменять для компактности
Работать, возможно и будет, а поменять надо ВСЁ, начиная с оформления. Посмотрите примеры в директории МПЛАБа \MPASM Suite\Template\Code. Файлы процессорTEMP.ASM. ВременнЫе задержки грамотнее использовать через прерывания от таймера. И вообще, аппаратные модули МК надо использовать "по максимуму". Старайтесь делать так, чтоб, если вдруг Вам захочется изменить вывод порта, или константу, не надо было перелопачивать всю программу в поисках нужных строк, а достаточно изменить значение в одном месте. Это, например, можно сделать при помощи той же директивы EQU, в шапке.
да, г-на Каробельникова тоже читал, после чего осталось много вопросов, после прочтения другого самоуяителя вопросов осталось меньше... протеус скачал, пока еще не разобрался что да как... Так же качал мплаб последний с сайта микрочипа, да только после установки он полез в нет и предложил купить какое то дополнение... так же есть скачаный 7,5 кажется мрлаб... по поводу прошивки, сидел отлаживал, нашел нестыковки, поправляю... подскажите, есть какая нить программка для счета времени исполнения ПП? а то мплаб 10 секунд отсчитывал почти час... ((
По поводу менять все в оформлении, эт да... Буду стараться, это ж моя первая прошивка У меня пока еще бардак в голове, вот пишу (со шпаргалками) и запоминаю что к чему. Сразу наврядли получится все компактно написать ((
Последний", это какой? Не путайте MPLAB и MPLAB-X. А что бы программы зря в Инет не лазили, надо, при установке, выбирать ручной режим (это опять к вопросу о мозговом фильтре). Подозреваю, что Вы ставили именно MPLAB-X и он Вам предложил купить сишный компилятор.
NikolayZ писал(а):
мплаб 10 секунд отсчитывал почти час...
Это Вы просто отладчиком пользоваться не умеете. Видимо использовали "автоматически-пошаговый" режим, а надо "автоматический", и точки останова ставить. А программа такая есть в самом МПЛАБе. Называется Stopwatch (посмотрите в менюхах). Доступна не со всеми отладчиками. Например с MPLAB SIM доступна, а с Proteus VSM - нет. Зато в Proteus VSM это видно в самом вьюере. Только, что б Stopwatch правильно время считал, сперва надо задать тактовую частоту в настройках.
NikolayZ писал(а):
Сразу наврядли получится все компактно написать
Дело как-раз не в компактности, а в логике, и понимании.
_________________ ICQ нет, и, в ближайшее время, не будет.
да вроде делал как надо, поставил точку остановки, F7 дошел до нужной мне подпрограммы, открыл таймер, поставил в нем 0 и запустил в автомате... можно Вас попросить посмотреть шапку програмы и подготовку, с этим у меня явно недопонимание гляжу на нее и такое чувство что там косяк, а где не могу понять... видимо мозг уже не хочет сообрать... Да, Вы правы, мплаб -х скачал...
Никак невозможно, ввиду отсутствия таковой. Нету у Вас шапки. Всё, что написано, есть в файле *.inc (в каталоге \MPASM Suite, не стесняйтесь посмотреть) и это можно было бы и не писАть. Только для этого, нужно подключить этот самый *.inc к проекту. Выше давал ссылку на примеры оформления, где про это сказано. И там как-раз можно шапку посмотреть. Так же давал ссылку на мануал MPASM'а. Там же есть куча документации на русском (учтите, что не без огрехов). Так что, как говорил дедушка Вова: "Читать, читать, и ещё раз читать".
Ещё совет. Не оставляйте настройки "по умолчанию", всегда задавайте их явно. Т.е. в самом начале программы, прописываете настройки для всех регистров SFR. Лично у меня это выглядит так:
Код:
clrf ANSEL ; Регистр конфигурации входов порта A (цифровой-аналоговый) bsf ANSEL,ANS0 ; Analog input ; bsf ANSEL,ANS1 ; Analog input ; bsf ANSEL,ANS2 ; Analog input ; bsf ANSEL,ANS3 ; Analog input ; bsf ANSEL,ANS4 ; Analog input
Таким образом, настройка сводится к "закоментированию"/"раскоментированию" необходимых строк.
_________________ ICQ нет, и, в ближайшее время, не будет.
Еще вопрос такой, если мне не нужно управление каждым портом в отдельности, переключать какой то порт во время выполнения программы из выхода на вход например. Я могу не расписывать порты, а обойтись PORTB EQU 06H, и потом обрашаться к нему через PORTB / CLR PORTB ИЛИ MOVWF 01010101 MOVWF ROPTB И еще вопрос, если я напишу CLP PORTB,01h - очищу же только 2-ю ножку порта Б? Извините, если вопросы глупые, что то я уже путаться стал, видимо надо отдохнуть...
Доброго времени суток, эт опять я.... В общем кое что переписал, не знаю правда насколько правильно... При компиляции выдается 2 предупреждения, но компиляция проходит без ошибок, пишет вот такую штуку; _____ Debug build of project `C:\Program Files\Microchip\Pic\brelok\Brelok.mcp' started. Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49 Preprocessor symbol `__DEBUG' is defined. Sun Feb 02 16:08:49 2014 ---------- Make: The target "C:\Program Files\Microchip\Pic\brelok\Brelok.o" is out of date. Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84A "Brelok.asm" /l"Brelok.lst" /e"Brelok.err" /d__DEBUG=1 Message[302] C:\PROGRAM FILES\MICROCHIP\PIC\BRELOK\BRELOK.ASM 19 : Register in operand not in bank 0. Ensure that bank bits are correct. Message[302] C:\PROGRAM FILES\MICROCHIP\PIC\BRELOK\BRELOK.ASM 20 : Register in operand not in bank 0. Ensure that bank bits are correct. Make: The target "C:\Program Files\Microchip\Pic\brelok\Brelok.cof" is out of date. Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" /p16F84A "Brelok.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"Brelok.cof" /M"Brelok.map" /W /x MPLINK 4.49, Linker Device Database Version 1.14 Copyright (c) 1998-2011 Microchip Technology Inc. Errors : 0
Loaded C:\Program Files\Microchip\Pic\brelok\Brelok.cof. ---------- Debug build of project `C:\Program Files\Microchip\Pic\brelok\Brelok.mcp' succeeded. Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49 Preprocessor symbol `__DEBUG' is defined. Sun Feb 02 16:08:51 2014 ---------- BUILD SUCCEEDED _____ Саму программку прогнал в МПлабе, весь алгоритм отрабатывается как задумано (Подаем питание, светодиоды через 1 мигнут 1 раз и будут ждать нажатия кнопки, после нажатия будут мигать по кругу, попутно отслеживая нажатие кнопки) В общем хочу вас попросить о 2-х вещах: 1- что за предупреждения выдает мплаб (описание этого кода нашел, но нему понять что нужно изменить) 2- посмотрите пожалуйста программу на предмет правильного использования команд, я понимаю что в плане компактности и грамотности оформления там хаос, мне бы понять правильно написано, в дальнейшем буду стараться сделать компактно и красиво... Заранее спасибо за помощь. З.Ы. Сильно собак не спускайте, я пока только учусь Вот ASM файл
Ура!!! Разобрался с протеусом, собрал в нем схему, подключил прошивку, и первые 2 алгоритма раьотают потом мигают но хаотично, буду копать прошивку:)))
Мля! Вы уже, наконец посмотрите в/у файлы из МПЛАБа, или так и будете одни и те же вопросы задавать? В чём причина, видно в листинге. Происходит потому, что МПАСМ умеет работать только с нулевым банком. Почему так сделано, не знаю. Программу Вашу смотреть, сорри, сейчас некогда. P.S.: И не думайте, что уровень Ваших знаний будет прямо пропорционален количеству постов на форуме. Ссылок Вам достаточно дадено. Читайте, "переваривайте". Это - довольно длительный процесс, так что запаситесь терпением.
_________________ ICQ нет, и, в ближайшее время, не будет.
NikolayZ Нормально написано для первого раза. Если не хочеш видеть 302 , то для банка1 пиши reg^80 (PORTB^80) На будующие вопросы выкладывай проект MPLAB. Быстрее ответ получиш.
спасибо смоделировал в протеусе устройство, работает как задуманно. сейчас работаю над программатором, буду пробовать собирать и прошивать. сейчас изучаю 12f675, дается сложнее,нежели 84А, с самоучителями изучать намного легче было.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения