Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 03:28:06

Доброго времени суток,Коты! Решил освоить контроллеры, нашел несколько самоучителей в сети (По ассемблеру), книги, примеры и т.д. Все самообучение было привязано в основном к контроллеру PIC16F84A. К сожалению программатора пока нет (буду делать сам, детальки уже идут, правда пока не определился какой делать), и компутер для этого дела не подходит пока, в общем есть желание на практике проверить свои знания, да нет возможности пока :cry:.
В общем решил попробовать написать прошивку, для начала простенькую, помигать светодиодами. Прошивку писал на ассемблере, в программке MPLAB 5.70 (в сети говорилось что она работает хорошо, так же скачал 7.50, правда еще не разбирался с нет), так же скачал ПониПрог...
Хочу попросить Вас проверить правильность написания программки, будет ли работать, может можно что то поменять для компактности или это просто бред из набора команд. Все номера ячеек брал из описания 16F84A, так как нет пока ни пика ни программатора (о чем уже говорил)
Схема нарисована на скорую руку, для того что бы было видно чего хотел изобразить в прошивке...
Алгоритм задумывался такой:
Подаем питание.
Загораются через 1 светодиоды на 1 секунду
Затем пока не нажмем кнопку, светодиоды не горят.
Нажали кнопку и держим- загорелись все светодиоды на 2 секунды - затем светодиоды мигают против часовой стрелки - 3 секунды, потом против часовой стрелки - 3 секунды, потом опять зажигаются все и так по кругу пока нажата кнопка.
Если кнопку нажать и отпустить, то будет только 1 цикл, если держать, то циклы будут повторяться пока не отпустишь кнопку.
Схема конечно ужасная, но я еще не рисовал красивую, пока только наброски.
Изображение
В архиве файл ASM & HEX
мигание светодиодов.zip

При первой компиляции мплаб много ругался, устранил все замечания (в основном опечатки и неправильные ригистры в названиях), после чего написанное было скомпилировано без ошибок, мплаб "сказал типа все хорошо". Прошелся по тексту программы пошагово, вроде все отрабатывается как задумано...
Посмотрите пожалуйста, критике, объяснениям и поправкам буду только рад, буду исправляться, работать над ошибками и языком.
Программка не полная пока, эффектов будет больше, просто пока нет смысла писать не зная правильно ли я вообще мыслю.
Заранее спасибо. :))
Последний раз редактировалось Gudd-Head Вс фев 09, 2014 15:32:13, всего редактировалось 2 раз(а).
Причина: Сюда перенёс

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 05:50:16

Нашел ошибку с счетчиками, недоглядел и присвоил разным счетчикам одни и те же ячейки хранения, переписал, файлы ниже
мигание светодиодов.zip

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 07:55:30

Команды goto закомментены для отладки?

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 08:34:02

Да, забыл снять. Для перехода в следующую ПП metka2, минуя счетчика в пп metka1. Смотрел сколько времени намотает счетчик в ПП metka2.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 12:38:48

NikolayZ писал(а):в сети говорилось что она работает хорошо
Вы совершаете грубейшую ошибку, воспринимая информацию из различных источников, как аксиому, не пропуская её через мозговой фильтр.
Ну, в какой "сети" такое говорилось?
Такое только утверждал г-н Корабельников, хотя, даже когда он писАл свой постулат, версия была уже далеко не актуальна, поскольку предназначена для ОС типа W-95. На данный момент, последняя версия MPLAB IDE - 8.92. Находится здесь.
Конечно, некоторая полезная информация в в/у многотомнике и содержится, но всё, что качается построения программ, оформления текстов, программирования, и т.п, боже упаси!
Что бы посмотреть работу программы, без программирования МК, есть программный симулятор Proteus. Надо только помнить, что это - большая программа, и как все подобные программы, имеет некоторые особенности, и требует некоторых навыков работы.
Более того. Данный симулятор прекрасно стыкуется с МПЛАБ ИДЕ, что позволяет повысить удобство отладки программы.
Для программирования, если собираетесь изготавливать программатор самостоятельно, вобщем-то альтернатив нет. Если для ком-порта, то доработанный Extra-PIC, если для USB, PICkit2. Про используемый софт, там же.
С различными ПониПрогами, и другими JDM'ами, есть большая вероятность получения огромного геморроя, вместо работы.
Однако, если руки растут не из плечевых суставов, то вы его всё-равно получите. :)



NikolayZ писал(а):будет ли работать, может можно что то поменять для компактности
Работать, возможно и будет, а поменять надо ВСЁ, начиная с оформления. Посмотрите примеры в директории МПЛАБа \MPASM Suite\Template\Code. Файлы процессорTEMP.ASM.
ВременнЫе задержки грамотнее использовать через прерывания от таймера. И вообще, аппаратные модули МК надо использовать "по максимуму".
Старайтесь делать так, чтоб, если вдруг Вам захочется изменить вывод порта, или константу, не надо было перелопачивать всю программу в поисках нужных строк, а достаточно изменить значение в одном месте. Это, например, можно сделать при помощи той же директивы EQU, в шапке.
Код:
Например:
PORTOUT       EQU      PORTB

Или:
PINO             EQU       B5

Вот описание других директив MPASM'а.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 13:16:08

да, г-на Каробельникова тоже читал, после чего осталось много вопросов, после прочтения другого самоуяителя вопросов осталось меньше... протеус скачал, пока еще не разобрался что да как... Так же качал мплаб последний с сайта микрочипа, да только после установки он полез в нет и предложил купить какое то дополнение...
так же есть скачаный 7,5 кажется мрлаб...
по поводу прошивки, сидел отлаживал, нашел нестыковки, поправляю... подскажите, есть какая нить программка для счета времени исполнения ПП? а то мплаб 10 секунд отсчитывал почти час... :(((

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 13:16:53

По поводу менять все в оформлении, эт да... Буду стараться, это ж моя первая прошивка :))) У меня пока еще бардак в голове, вот пишу (со шпаргалками) и запоминаю что к чему. Сразу наврядли получится все компактно написать :(((

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 14:01:29

NikolayZ писал(а):качал мплаб последний с сайта микрочипа"
Последний", это какой? Не путайте MPLAB и MPLAB-X.
А что бы программы зря в Инет не лазили, надо, при установке, выбирать ручной режим (это опять к вопросу о мозговом фильтре).
Подозреваю, что Вы ставили именно MPLAB-X и он Вам предложил купить сишный компилятор.

NikolayZ писал(а):мплаб 10 секунд отсчитывал почти час...
Это Вы просто отладчиком пользоваться не умеете. Видимо использовали "автоматически-пошаговый" режим, а надо "автоматический", и точки останова ставить.
А программа такая есть в самом МПЛАБе. Называется Stopwatch (посмотрите в менюхах). Доступна не со всеми отладчиками. Например с MPLAB SIM доступна, а с Proteus VSM - нет. Зато в Proteus VSM это видно в самом вьюере.
Только, что б Stopwatch правильно время считал, сперва надо задать тактовую частоту в настройках.

NikolayZ писал(а):Сразу наврядли получится все компактно написать
Дело как-раз не в компактности, а в логике, и понимании.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 15:48:13

да вроде делал как надо, поставил точку остановки, F7 дошел до нужной мне подпрограммы, открыл таймер, поставил в нем 0 и запустил в автомате... можно Вас попросить посмотреть шапку програмы и подготовку, с этим у меня явно недопонимание :( гляжу на нее и такое чувство что там косяк, а где не могу понять... видимо мозг уже не хочет сообрать...
Да, Вы правы, мплаб -х скачал...

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пт янв 31, 2014 18:22:36

NikolayZ писал(а):запустил в автомате
Какой кнопкой?
Надо было F9.

NikolayZ писал(а):можно Вас попросить посмотреть шапку програмы
Никак невозможно, ввиду отсутствия таковой. Нету у Вас шапки.
Всё, что написано, есть в файле *.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
Таким образом, настройка сводится к "закоментированию"/"раскоментированию" необходимых строк.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Сб фев 01, 2014 09:40:28

Доброго времени суток!!!! Сейчас в правильном направлении двигаюсь??? :oops:
Изображение
Безымянный.jpg
(58.19 KiB) Скачиваний: 1405

Re: Самообучение ассембреру, проверьте пожалуйста знания

Сб фев 01, 2014 11:12:55

Еще вопрос такой, если мне не нужно управление каждым портом в отдельности, переключать какой то порт во время выполнения программы из выхода на вход например. Я могу не расписывать порты, а обойтись PORTB EQU 06H, и потом обрашаться к нему через PORTB / CLR PORTB ИЛИ MOVWF 01010101
MOVWF ROPTB
И еще вопрос, если я напишу CLP PORTB,01h - очищу же только 2-ю ножку порта Б?
Извините, если вопросы глупые, что то я уже путаться стал, видимо надо отдохнуть...

Re: Самообучение ассембреру, проверьте пожалуйста знания

Вс фев 02, 2014 00:08:31

NikolayZ писал(а):видимо надо отдохнуть...
Это точно.
NikolayZ писал(а):если я напишу CLP PORTB,01h - очищу же только 2-ю ножку порта Б?
Видимо речь о команде clrf?
Посмотрите в даташите описание её работы.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Вс фев 02, 2014 09:27:54

Доброго времени суток, эт опять я....
В общем кое что переписал, не знаю правда насколько правильно... При компиляции выдается 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- посмотрите пожалуйста программу на предмет правильного использования команд, я понимаю что в плане компактности и грамотности оформления там хаос, мне бы понять правильно написано, в дальнейшем буду стараться сделать компактно и красиво...
Заранее спасибо за помощь.
З.Ы. Сильно собак не спускайте, я пока только учусь :oops:
Вот ASM файл
Brelok.asm
(5.19 KiB) Скачиваний: 291

Re: Самообучение ассембреру, проверьте пожалуйста знания

Вс фев 02, 2014 11:28:12

Ура!!! Разобрался с протеусом, собрал в нем схему, подключил прошивку, и первые 2 алгоритма раьотают :))) потом мигают но хаотично, буду копать прошивку:)))

Re: Самообучение ассембреру, проверьте пожалуйста знания

Вс фев 02, 2014 22:19:51

NikolayZ писал(а):что за предупреждения выдает мплаб
Мля!
Вы уже, наконец посмотрите в/у файлы из МПЛАБа, или так и будете одни и те же вопросы задавать?
В чём причина, видно в листинге. Происходит потому, что МПАСМ умеет работать только с нулевым банком. Почему так сделано, не знаю.
Программу Вашу смотреть, сорри, сейчас некогда.
P.S.: И не думайте, что уровень Ваших знаний будет прямо пропорционален количеству постов на форуме. :wink:
Ссылок Вам достаточно дадено. Читайте, "переваривайте". Это - довольно длительный процесс, так что запаситесь терпением.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Вс фев 09, 2014 16:20:09

NikolayZ
Нормально написано для первого раза.
Если не хочеш видеть 302 , то для банка1 пиши reg^80 (PORTB^80)
На будующие вопросы выкладывай проект MPLAB. Быстрее ответ получиш.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Пн фев 17, 2014 06:49:05

спасибо :-) смоделировал в протеусе устройство, работает как задуманно. сейчас работаю над программатором, буду пробовать собирать и прошивать. сейчас изучаю 12f675, дается сложнее,нежели 84А, с самоучителями изучать намного легче было.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Ср фев 19, 2014 13:12:40

Принцип программирования для 12f675 абсолютно такой же, отличие только в некоторых регистрах.

Re: Самообучение ассембреру, проверьте пожалуйста знания

Ср фев 19, 2014 23:39:38

NikolayZ , здесь уроки на несколько порядков лучше гАвна что Вы читали http://www.gooligum.com.au/tut_midrange.html
Что, язык не знаем? :)))
Ответить