4. Как написать программу для включения светодиодов, подключенных к PIC16F84A (Урок 4. Теория)
HTML-код
- Опубликовано: 7 сен 2024
- Спасибо за Like и за Подписку на мой канал.
Если вас больше привлекает социальная сеть вконтакте, то вы можете подписаться на страницу канала в вконтакте и следить за выпуском новых роликов!
Страница в вконтакте:
mychippic
Описание к видео:
0:42 Создание проекта в программе MPLAB X.
2:20 В данном уроке показано, как пишется программа управления для PIC16F84A на языке ассемблер в программе MPLABX. Программа включает светодиоды, подключенные к ножкам PIC16F84A. Для упрощения понимания работы PIC16F84A и написания программы для включения светодиодов используется модель с выключателями с разными назначениями.
Внимание! При самостоятельном повторении программы, написанной в видео, учитывайте написание слов, т.е. если в видео буквы в программе были написаны заглавными, то в вашей пограмме тоже пишите заглавные буквы, если в видео буквы строчные, то и вашей программе они должны быть строчными. Команды в вашей программе тоже должны идти в три столбика. Это необходимо для избежания возможных ошибок.
Спасибо большое ! "Разжевали и в рот положили." Обучаем студентов политеха, но огромные трудности с пониманием именно переключения портов, статуса и т.д. Вы меня спасли. Теперь знаю как более доходчиво объяснить.
ОЧЕНЬ классно излагаете материал .. поэтапно и с примерами ... я считал Ассемблер довольно тяжелым, но по вашим видео можно научится использовать для небольших программ ...
Но желательно более чем 2 раза не повторять одно и то-же - видео становится нудным и длинным ..
(можно пересмотреть если кому-то будет непонятно)
Не на каком языке нет такой обяснения . Спасибо тебе огромного ....
настолько доходчиво...что доходчивей некуда...СПАСИБО ОГРОМНОЕ!!!!!!!!!!!!!!!!!!!!!
Михаил Петрович, очень познавательно и главное, так как отсутствуют слова паразиты, весь материал очень легко усваивается. Повезло студентам с преподавателем.
Сразу услышал ассемблер и немного испугался, но потом прозрел от способа объяснения. Очень грамотный преподаватель.
Спасибо большое, очень простым и доходчивым языком объясняется.
Мне 64 года понемногу доходит Спасибо что есть еще такие люди
Пересмотрел несколько видео по Ассемблеру, кое-что вкурил, была куча непонятных моментов. Но при просмотре вашего - стало сразу ВСЕ понятно. Очень хорошо, просто и доступно объясняете. Спасибо.
Михаил Петрович, Вы большой молодец ! Спасибо огромное!
Спасибо)
Спасибо, очень наглядно! Хороший пример с выключателем и комнатами, наверное правильней сказать переключателями.
TRIS -переключатель направления вход/выход.
PORT-переключатель выхода на 0 и 1
Какой вы замечательный человек! Спасибо вам огромное! Вы так все детально объяснили, две недели назад, я вообще в ноль была(
Так подробно разжевано, что можно детей обучать. Спасибо.
Обалденно! Даже я понял! Большое спасибо, бегу подписываться!
Очень хорошо ведет видео уроки данный блогер!
Супер!Всё понятно.Я давно уже собираю устройства и на pic и на avr,схемы и готовые прошивки беру с разных сайтов, а научится самому всё как то не получалось.Надеюсь ваши уроки помогут.Спасибо.
+Andrey. Vershinin. Удачи вам!) Главное старайтесь самостоятельно повторять то, о чём рассказывается в уроках, чтоб лучше запоминалось, а также экспериментировать)
Тоже очень понравилось как Вы объясняете, все очень доходчиво и понятно.С большим удовольствием подписался на ваш канал.
+Алексей Лаврухин Спасибо. Но всё равно, не всё всегда удавалось объяснить хорошо, поэтому если будут вопросы, то спрашивайте) А главное пробуйте!) Чтоб всё у вас получалось!)
Спасибо вам, вы ответили на множестово моих вопросов в своем видео. Продолжайте в том же духе
+Erzhan Oralgazin Очень этому рад!) Спасибо!)
mpasm уже нет в новых версиях, там xc8, так что у кого будут проблемы ставьте версию млаб 5.35 или ниже
Доходчиво!) Делал всё по порядку, по инструкции, но скомпилировать не удавалось, вылезали ошибки. Первая в первой строке - написал что (p*16f84a) неправильное имя, тогда поменял * на = и всё ок. Дальше ошибка была такая - написал Status equ ..., а дальше везде было STATUS. Исправил на заглавные - ок. ну в общем всё пошло, попробую сейчас мигалку сделать с вкл./откл. выкл.) спасибо, классно объясняете!)
Владимир Керчин такая же песня.
Мне понравилось хотелось бы понять команды прогресмирования, что и обещали в следующем уроке. Спасибо!
классно разжевано! Благодарность бесконечная!)
Отличное видео! Спасибо:)
Ролик супер. Объяснения простые, понятные. С меня подписка. Благодарю за Ваш труд! )))
cпасибо за уроки ты препод от бога
Михаил Петрович, было бы хорошо, удобнее, нагляднее, если различные по назначению участки программы разделять пустой строкой (в данном случае пустая строка перед командами записи в STATUS, и перед командой GoTo).
К середине урока я немного запутался, отчасти сбило меня упрощённое объяснение команд ассемблера и отсутствие ожидаемых мной команд работы с портами (IN и OUT, ранее я много пиcал на ассемблере x86), но к концу урока всё понял. Но для начинающих возможно так даже лучше, а я в любом случае имею опыт что бы разобрать, перейдя к следующим урокам или заглянув в справочники). Спасибо за хорошие уроки, Михаил Петрович! С нетерпение смотрю их дальше)
+Сергей Уланов Тут ассемблерные команды немного другие, поэтому старых добрых команд и старых добрых названий регистров здесь не встретите) Многие команды похожи, но чуть отличаются. Но сам опыт программирования на ассемблере конечно вам сильно поможет и думаю для вас сложностей не будет) Некоторые уроки которые я делал в начале, я бы сейчас немного переделал, но думаю не стоит возвращаться назад, стоит идти дальше, а то так далеко уйти не смогу)
+MyChipPic Да, переделывать ничего не нужно. Знающие поймут и так, а для начинающих всё и так очень хорошо. Может можно сделать небольшой ролик (рассчитанный на людей уже знакомых с радиотехникой, и желающих перейти к работе с микроконтроллерами, такое было бы удобно - посмотрел ролик, составил общее представление о микроконтроллере, и смотришь обычные уроки уточняешь детали) краткий обзор архитектуры этих контроллеров: имеющиеся регистры, организация памяти, принципы ввода вывода. Сравнение с обычными процессорами.
Например, просмотрев 15 уроков, как я понял, в отличии от процессоров x86 или Z80, данные контроллеры имеют только один регистр, аккумулятор. Остальные регистры являются специальными ячейками памяти, доступ к ним производится не по именам, а по адресам памяти, и содержимое данных ячеек определяет работу контроллера. Через них производятся и операции ввода-вывода - записанные в них значения появляются на выводах микросхемы. Соответственно поступающие на выводы микросхемы уровни напряжения (0 и 1), изменяют биты регистров, и прочитав значение из регистра, мы получаем картину имеющихся на выводах микросхемы сигналов.
С другой стороны, думаю в имеющихся уроках всё это есть, просто растянуто по времени, среди информации для совсем начинающих, и нужно довольно много времени чтоб сложилась полная картина работы с микроконтроллером. Так что смотрю уроки дальше. Всё равно в них встречаются некоторые важные мелочи, какие либо особенности работы с этими микроконтроллерами.
Очень доступно объясняете, спасибо Вам!
Я конечно могу ошибаться. Но по моему я начинаю понимать о чем речь. Спасибо автору
супер объясняете!!!
У меня микроконтроллер PIC16F877A, так сказать купил с заделом на будущее. Соответственно, в Proteus его моделировал, а программу вашу загрузил. В итоге светодиоды расположенные на PORTD не засветились. Как оказалось, чтобы всё работало правильно, надо изменить значения PORTD equ 08h и TRISD equ 08h. Это я узнал из спецификации микроконтроллера.
+ignx999 Действительно, для других контроллеров PIC данная программа может не заработать, так как некоторые ножки другого контроллера могут быть более функциональны и изначально настроены для других целей. Поэтому для других контроллеров в начале нужно настроить ножки как цифровые входы и выходы и после этого ими можно будет манипулировать точно так же как и с PIC16F84A. Иногда ещё требуется настройка слова конфигурации, которое я ещё подробно не рассматривал. Как настроить ножки контроллера как цифровые входа и выходы можно посмотреть в документации. Там должен быть пример и указание регистров, значения которых нужно изменить. В вашем случае ещё был выбран другой набор ножек, поэтому и потребовалось работать с другими регистрами, которые находятся по другим адресам. Если вы будете использовать ещё наборы ножек, то в начале убедитесь, что они настроены как цифровые и вы ими можете манипулировать, включая и выклюая диоды. Вплоть до 41-го урока ножки контроллера используются как цифровые. Поэтому всю теорию вы сможете перенести на ваш контроллер, при правильной настроке ножек, если такая настройка требуется. Успехов в работе!
Проще было сказать, что TRIS - это команда, позволяющая разблокировать доступ к использованию портов )))
+Некен Вольдемарович думаю из следующих уроков вы поймёте, почему я не стал называть TRIS - командой)
MyChipPic Хорошо )
+Некен Вольдемарович TRIS это регистр. Это не команда.
не разблокировать а изменить направление вход/выход...и не команда а регистр...
Мне выше ответили, не было необходимости одно и тоже повторять
Очень доходчиво!! Спасибо Вам огромное!!
+100500
Начал понимать суть программирования, СПАСИБО!!!
Вы замечательный преподователь, только вот чуть помедленнее и совсем супер!!!
Не найду урок про установку конфигурации, от какой печки пляшет и как определяется. может подскажет кто где эта тема находится?
Подписался, попробую изучать. Спасибо за уроки! Лайк!
Михаил, огромное спасибо)
Посоветуйте какие контролеры подойдут для прошивки под управление частотой с 10hz-до 500khz
Я человек весьма возрастной, но мне бы хотелось посмотреть Ваши лекции, тем более, что я ещё помню эвм СЕТУНЬ, работающую в троичном коде. А где можно посмотреть, скачать Ваши уроки
Thanks
Доходчиво. Но... Избавьтесь от черезмерного разжевывания - повтор одного и того же по несколько раз. Спасибо!
Гениально.
Здравствуйте, Михаил Петрович.
Очень понравились Ваши уроки. Все четко, понятно. Большое спасибо.
У меня к Вам вопрос не по теме. Какой программой Вы пользуетесь для создания эскизных схем?
спасибо за лекцию
Здравствуйте! Пробелы в редакторе как то влияют на выполнение программы?
у такого препода я бы все понял. жаль учеба в мск мне не по карману
В мск не надо ехать,он в Сыктывкаре живет.
расскажите пожалуйста что нужно изменить что бы сделать то же с pic 12f629
Super bravo
Михаил Петрович, мы ждеммм (21:26). Возникают сложности с конфигурацией контроллеров. Есть у меня программа, которая на Протэусе работает, а на плате нет. Я не могу с конфигом разобраться. Надо чтобы вы разжевали эту тему. Котроллер у меня PIC12F675
Спасибо за информацию, но сильно растянуто. Нужно было составить видео и текст. Можно будет уложиться за 10 минут.
Ничего не понятно но очень интересно
Имею небольшой опыт написания программ на Ассемблере под x86 и Z80 процессоры, поэтому, как по мне, то уже слишком много об одном и том-же, аж немного нудно стало. Тем не менее, лучше так - потратить больше времени на просмотр и понять всё, чем что то упустить. Спасибо за эти уроки!
И ещё вопрос - семейство PIC18 сильно отличается от PIC16? Есть-ли лекции/примеры по PIC18?
С микроконтроллерами никогда не сталкивался ранее, однако есть желание создать несколько гаджетов в машину и заставить их общаться по CAN-шине. Нашёл в интернете информацию, что PIC18 могут быть подключены напрямую к CAN-шине. Если использовать другие микроконтроллеры (в том числе можно использовать Ардуино), то нужна дополнительная микросхема для сопряжения (контроллер CAN-шины mcp2515), что удорожает устройствго, увеличивает и усложняет схему. Дополнительно в обоих вариантах нужно использовать MCP2551 (CAN bus transceiver chip). По этой причине хочу научиться программировать 18-ю серию Microchip PIC.
Интересно мнение автора насчёт работы с CAN-шиной. Есть-ли у Вас опыт в этой сфере? Какие могут быть особенности/сложности?
Детский сад, аналогию конечно можно проводить, но сначала надо об'яснить, что вы сделали, например TRISB это направление порта, PORTB это 8-битный регистр ввода/вывода, BSF это команда установки бита в порт. А то народ так и будет думать, что у микроконтроллера внутри двери, окна, комнаты...Архитектуру МК изучайте люди-это ассемблер без нее не как.
Могли еще про " include" рассказать.
Не подскажите,как можно сделать радио управление на 2-3 команды ?
Михаил Петрович добрый день. если нетрудно подскажите пожалуйста.все сделал как у вас. у меня в программе выдает ошибку.
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/PROGECTS PIC/firstPR.X'
make[1]: Leaving directory 'C:/PROGECTS PIC/firstPR.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
nbproject/Makefile-default.mk:1: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 326ms)
Если микроконтроллер нужен для управляющего сигнала, а не для мигалки, скажите можно ли таким же образом запрограммировать сигналы? Какие они вообще по уровню с портов выходят?
+Таня Мак Можно запрограммировать на передачу сигналов. Передачу 0 и 1, например, чтоб осуществлять передачу информации. Напряжение на ножке PORTB = напряжению питанию если соответствующий бит портаB = 1, и напряжение равно 0В, если в соответствующем бите записан 0.
красава
возможен ли обратный процес тоесть считать програму из процесора и перевести его в асемвлер чтоб проянализироват и исправить возможные ошибки
Возможен, если программист не установил защитный бит, который не позволит скачать код программы из микроконтроллера с помощью программатора, а потом дисассемблировать.
а какой программатор надо использовать для программирования микроконтроллера PIC
+Zxcc Ssc PicKit2 можно использовать. В следующих уроках рассказывается как его использовать для программирования.
в итоге получилось)))
Для Максима Прохореца. Чтоб сделать радиоуправление можно использовать приёмники и передатчики, которые можно подключить к микроконтроллеру. Примеры таких приёмников и передатчиков можно найти в интернет магазине: www.aliexpress.com/snapshot/6477209887.html?orderId=65648893626498 www.aliexpress.com/snapshot/6492987563.html?orderId=65799081896498
Как управлять даннми передатчики и приёмники с помощью Pic контроллеров я расскажу в будущем, но пока ещё не скоро. Но существует альтернатива Pic контроллерам, это AVR контроллеры, а также платы, построенные на основе AVR контроллеров, называемые ARDUINO. Для ардуино создано очень много видео, поэтому найти способ подключить приёмники и передатчики к ардуино можно. Если вам необходимо быстрое решение, то ищите информацию по сопряжению вышесказанных передатчиков-приёмников к Ардуино.
Спасибо, Вам. Не на то я учился) Буду обучаться у Вас)
Вот Вы сохраняете в формате asm,но в протеус этот формат не добавляется.там он просит hex формат.как сделать?
+Игорь Чухлебов Вы должны скомпилировать код программы с помощью MPLAB X, а потом найти hex файл в папке проекта
+Игорь Чухлебов В третьем уроке показано как скомпилировать код и где найти hex файл.
А почему нельзя управлять сразу трисб? Даже не зная статуса, вслепую давать команды. так сказать прыгая выше головы. Конечно это неправильно, в случае ошибки будет сбой, но все же.. Я пока не осилил все ваши видео о контроллерах.
+infocentrist Так устроен микроконтроллер. Чтоб лучше понять, нужно углублятья в механизм его работы. Если вы будете в слепую давать команды, то и результат вы можете не увидеть) Комбинаций разных много, но они могут приводит к каким-то изменениям работы контроллера, но увидеть, что в нём происходит мы не сможем, если не воспользуемся специальными методами контроля)
TRIS = Transfert Input Set
TR = 1 znachet Input kak I=1 (vxod, prinimaem znachenie v microcontroller ot kako-go-to ustrojstva (datchik izmerenija na primer))
TR = 0 znachet Output kak O=0 (vyxod, podaem znachenie na svetodiod il na ljuboj drugoj device (motor))
Port A eto registr: | RA7 | RA6 | RA5 | RA4 | RA3 | RA2 | RA1| RA0 |
TRIS A eto registr: | TR7 | TR6 | TR5 | TR4 | TR3 | TR2 | TR1 | TR0 | dlja Porta A
Port A eto registr: | RA7 | RA6 | RA5 | RA4 | RA3 | RA2 | RA1| RA0 |
TRIS A eto registr: | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
v dannom primere dlja Porta A za schet znachenia registra TRIS A my poluchaem:
RA7=vyxod, RA6=Vxod, RA5=Vxod, RA4=vyxod, RA3=vyxod, RA2=Vxod, RA1=vyxod, RA0=vyxod
Port B eto registr: | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1| RB0 |
TRIS B eto registr: | TR7 | TR6 | TR5 | TR4 | TR3 | TR2 | TR1 | TR0 | dlja Porta B
Port B eto registr: | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1| RB0 |
TRIS B eto registr: | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
v dannom primere dlja Porta B za schet znachenia registra TRIS B my poluchaem:
RB7=vyxod, RB6=Vxod, RB5=vyxod, RB4=vyxod, RB3=vyxod, RB2=vyxod, RB1=vyxod, RB0=vyxod
Все делал по инструкции, в MPLAB (3.20) все скомпилировал, но в Proteus 8 программа загружается, но светодиоды не горят - все контакты подсвечены только синим цветом , как можно решить эту проблему?
+Kirill Romanov Нужно смотреть ваш код и картинку вашей схемы. Так сложно сказать.
+MyChipPic вам можно лично написать?
на какой программе вы пишити и дайте ссылку на программу
ПОЧЕМУ ПРОГРАММА MPLAB ДАЕТ ТОЛЬКО 4 СТРОКИ НАПИСАНИЯ ПРОГРАММЫ?
О каких четырёх строках вы говорите?
В общем, при наборе команд, команда TRISB отображается другим цветом и не компилируется((( что может быть?
+Марина Шатаева Здравствуйте. Проверьте, что везде вы указываете TRISB одинаково (всегда с большими буквами написано) и случайно не указываете русских символов. Внимательно проверьте все символы, возможно опечатка. Также убедитесь, что сделали точно также всё. Если не заработает, то отправьте картинку с кодом или текстом вашей программы, чтоб оценить проблему.
здраствуйте, можете проверить что не так в этой записи не могу сделать так чтобы оно мигала, но оно только включает начальный запись "01010101" светодиоды просто тупо горят внизу все что я написал:
#include
LIST p=16F628A
__CONFIG 03F10H
Reg_1 21h
Reg_2 22h
Reg_3 23h
org 0h
START bcf STATUS,PR0
CLRF TRISB
bsf STATUS,PR0
CLRF PORTB
call pauze
movlw b'01010101'
movwf PORTB
call pauze
movlw b'10101010'
call pauze
CLRF PORTB
call pauze
goto START
pauze movlw .93
movwf Reg_1
movlw .38
movwf Reg_2
movlw .11
movwf Reg_3
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
decfsz Reg_3,F
goto $-5
nop
nop
return
end
не могу скомпилировать,, выдаёт ошибку,
2020 год...искать...
После просмотра этого материла, моей голове требуется клизма😆,
это говорит о том, что у меня вместо головы жопа😞
когда будут новые видео
Блеа, программа не компилируется почемутА. Выдает ошибку при дебагге "Syntax error, digit out of range", на первых двух строках.
+Фекин Конт Код в комментарии напишите. Ошибка сообщает, что значение которые вы используете выходит из допустимого диапазона. Проверьте правильность записанных значений
Спасибо за столь быстрый response.) Англицким владеем хорошо, понять что написано, понял. Проблема в том что код переписывал раза три, и все та же песня. ЗЫ крайне познавательные уроки, все доходчиво объяснено, и без лишней воды.
LIST p*16F84A
_CONFIG 03FF1H
STATUS equ 04h
PORTB equ 06h
TRISB equ 06h
org 0
METKA bsf STATUS,5
bcf TRISB,4
bcf TRISB,5
bcf TRISB,6
bcf TRISB,7
bcf STATUS,5
bsf PORTB,7
bsf PORTB,5
bcf PORTB,4
bcf PORTB,6
goto METKA
end
В программировании на ассемблае не имею опыта.
+Фекин Конт Вы используете другой PIC? Вот тут у вас указан LIST p*16F64A, а у меня LIST p=16F84A. Думаю если у вас другой PIC то вам нужно использовать p=16F64A. Во вторых _CONFIG 03FF1H - только одно нижнее подчёркивание, а должно быть два __CONFIG 03FF1H. Если у вас PIC16F84A, то и регистр STATUS должен быть по адресу 03h, если нет, тогда возможно правильно. Попробуйте внести указанные изменения и проверить.
Скинте пожалуйста программу MPlabx . Заранее благодарен.
скинуть в жерло Ородруина?
если человек изучает микроконтроллер то должен узнать как мене радиоэлементы
Ничего не получилось.Строчки почему то какие-то не ровные, как попало
Говорят что си язык проще ,правда ли это
естественно проще, Си является высокоуровневым языком программирования (коллеги программисты смейтесь), а ассемблер это низкоуровневый язык программирования. Правда роль ассемблера нельзя обесценивать.
скомпилировалась но не вкл каналы
+MsNikolaj1987 Не совсем понял. У вас светодиоды не мигают?
самое тупейшее объяснение, если вообще таковым можно назвать
АДОВЫЙ "препод"
Синтаксис ассемблера в новых версиях MPLAB поменялся и эти уроки бесполезны
более сумбурного объяснения я еще не слыхивал. вы и в универе объясняете так же? или считаете, что на ютубе публика априори тупее?
Сложные вещи нужно вычитывать из книг, а не из ютюба.
STATUS eto registr kotoryj soderzhit :
| IRP | RP1 | RP0 | /TO | /PD | Z | DC | C |
C = carry
DC = digit carry
Z = zero
/PD = Power Down
/TO = power Time Out
RP0 i RP1 dlja vybora stranichek:
RP0 RP1 Stranichka Adress
0 0 0 ot 00hex do 7Fhex (ot 0000 0000 bin do 0111 1111 bin)
0 1 1 ot 80hex do FFhex (ot 1000 0000 bin do 1111 1111 bin)
1 0 2 ot 100hex do 17Fhex (ot 0001 0000 0000 bin do 0001 0111 1111 bin)
1 1 3 ot 180hex do 1FFhex (ot 0001 1000 0000 bin do 0001 1111 1111 bin)
IRP = tozhe vybor stranichek:
IRP Stranichka Adress
0 0 i 1 00hex do FFhex (ot 0000 0000 bin do 1111 1111 bin)
1 2 i 3 100 hex do 1FFhex (ot 0001 0000 0000 bin do 0001 1111 1111 bin)
не плохо но слишком розтянута и слишком розжовуеш
слишком нудно , не обязательно повторяться что "вот светодиод а это включатель а это батарейка " блин ну те кто уже как бы занимаются мк думаю знают и так как эти элементы называются не обязательно 2РАЗА повторяться !!
все хорошо но где синтаксис сколько новичков голову сломает урод и обьяснение такое же
Ну очень нудно ты объясняешь ...