1. Готовим инструменты
Микроконтроллеры (и вообще все процессоры) изначально понимают только машинные коды, то есть некую совокупность нулей и единиц.
Те, кто представляет себе работу счетчиков, регистров, триггеров и т.д., сразу же поймет природу машинного кода.
Так как, среди электронщиков, таких людей большинство, то на мой взгляд, все они согласятся с такой аксиомой: машинные коды полезны в «малых дозах».
Авот когда начинаются «большие дозы» (сложные устройства с десятками корпусов м/схем), то «мозги начинают дымиться» даже у классных электронщиков, имеющих недюжинные способности.
В этом случае, самое неприятное заключается в том, что по мере роста схемотехнической сложности устройства, эффективность работы электронщика резко «падает».
И в самом деле, сил и средств вкладывается «море», а получается нечто не очень надежное, габаритное, сложное в изготовлении, энергоемкое и дорогое.
Чтобы «одним махом прихлопнуть» все эти проблемы, «яйцеголовые» и придумали сначала «большие» процессоры (то, что применяется в компьютерах), а затем и «маленькие», назвав их микроконтроллерами.
Внутри м/контроллера находится «набор» модулей, каждый из которых многофункционален. Манипулируя весьма не слабыми возможностями этого «набора», можно реализовать миллионы разновидностей устройств.
Естественно, всем этим «хозяйством» нужно как-то «рулить». Эта «рулежка» и есть то, что называется программированием.
Если речь идет о больших «массивах» машинных кодов, то программирования напрямую (в машинных кодах) и врагу не пожелаешь: удовольствия никакого, да, чего доброго, и в «психушку» попасть можно (есть исключения — люди с выдающимися способностями и гении). Для того, чтобы обычные люди могли, без особого «напряга», заниматься составлением программ, придуманы различные языки программирования.
Смысл всех их заключается в замене машинных кодов словами, сокращениями слов, абревеатурами и т. д., то есть тем, что человеком легко и осмысленно воспринимается и чем он может комфортно оперировать при составлении текста программы.
Все эти «удобоваримые приятности», по окончании составления текста программы, переводятся в машинные коды одним «легким движением руки» (мозги программиста не задействуются).
Чтобы это «легкое движение руки» имело место быть, «яйцеголовые» придумали так называемую «интегрированную среду разработки».
Это есть набор программ, в котором программист работает с максимальной степенью комфорта, причем, по всему «массиву» решаемых им задач (включая и составление текста программы, и т.д. и т.п.).
Что, первым делом, нужно сделать, например, русскому, который попал в Англию и собирается там жить?
Выучить английский язык.
При «въезде» в программирование, нужно сделать то же самое (задача даже существенно проще).
«Проматерь» всех языков программирования — ассемблер.
Хотя он и считается самым простым, но слово «простой» относится прежде всего к набору его команд: количество их — минимально необходимое, и тем не менее, вполне достаточное для решения самых сложных задач, но не к комфортному восприятию их человеком.
Команды ассемблера являются либо сокращениями английских слов, либо набором первых букв английских словосочетаний, либо и тем, и другим.
Минимальный «джентльменский» набор ассемблера для ПИКов составляет 35 команд. Реально же, наиболее часто, используются от 10 до 20 команд.
В дальнейшем, настройте себя просто на тупое заучивание (на первых порах) всей этой английской «абракадабры», типа зубрежки (я вообще не имею никакой склонности к иностранным языкам, но ничего, освоил), не такая уж это и сложная задача, заверяю Вас. В дальнейшем, Ваше образное мышление и зрительная память Вам помогут.
Авыучить ассемблер очень даже стоит по причине того, что он, может быть, и не очень
«удобоварим», но именно на этом языке пишутся самые компактные по объему, быстрые и надежные программы, и по этой причине, серьезные программисты, работают
studfiles.net
Когда делаются схемы, необходимо, чтобы кто-то или что-то контролировало выполнение необходимых действий. Для человека это довольно проблематично, так как приходится использовать значительное количество различных элементов, позволяющих контролировать их работу (транзисторы, резисторы, тиристоры, диоды, конденсаторы и прочие). Но все сложные и большие схемы можно контролировать с помощью контроллеров (микроконтроллеров). Что они собой представляют, будет рассказано на примере семейств РІС. Итак, что такое PIC-контроллеры для чайников? Какая их схема и где они используются.
Для работы подавляющего большинства РІС-контроллеров необходимо стабильное напряжение – 5В. Этого хватает, чтобы он мог работать в своём обычном режиме и выполнять поставленную перед ним программу. Программирование PIC-контроллеров напрямую от компьютера невозможно. Для этой цели используется программатор.
Благодаря своей универсальности PIC-контроллер может быть применён практически где угодно. Сами микроконтроллеры можно встретить в холодильниках, телевизорах, стиральных машинках. Но линейка продукции РІС имеет ту особенность, что схемы на PIC-контроллерах популярны среди радиолюбителей и робототехников-самоучек. С их помощью можно легко настроить работу узла или всего приспособления. Способствует такой популярности разумная цена, легкость программирования и значительное количество учебного материала.
Применить PIC-контроллер можно при создании машинки на радиоуправлении, робота-руки и в других поделках, которые можно сделать, ограничиваясь скромным бюджетом. Можно использовать и для чего-то производственного – довольно популярной является тема создания автоматических самодельных станков, управляемых микроконтроллером. Спектр использования является широким, и при грамотном подходе могут быть выполнены практически любые цели, поэтому схемы на PIC-контроллерах можно увидеть не только на любительских творениях.
Существует и ряд программного обеспечения, предоставляемого другими компаниями. В целом их функционал является похожим, но существуют и отличия. Так, многие высказывают недовольство, что MPLAB имеет нелояльный к пользователям дизайн. Поэтому производители делают ставку на сохранении обрезаемых функций и удобстве работы с их программным обеспечением. Программы для PIC-контроллеров весьма разнообразны, поэтому тут в значительной мере дело вкуса.
Так, при создании программы необходимо указать, для какого контроллера она предназначается. Может понадобиться провести ряд настроек, но проводить их необходимо при наличии опыта работы или уверенности в своих силах, ведь ошибки могут привести к тому, что микроконтроллеры превратятся в обычные кусочки пластика и железа.
Так, самодельные программаторы являются довольно дешевыми. Но их использование чревато тем, что они могут запросто превратить микроконтроллер в кусочек пластика и железа. И программирование микроконтроллеров может в таких случаях обратиться неприятными последствиями в виде удара током, поэтому следует придерживаться техники безопасности. К тому же если делать самому с нуля, то часто получится продукт с довольно ограниченными возможностями относительно смены объекта работы. Но в мировой сети можно найти значительное количество решений этой проблемы, предложенных другими людьми, и которые, вероятно, не доставят вам проблем.
Оригинальный программатор от компании-производителя сможет качественно выполнить свою работу для любого микроконтроллера. На него существует гарантия, и если после получения он не работает, то заменить не проблема. Но в порядке вещей, когда прошивка PIC-контроллеров им осуществляется без проблем.
Но останавливает от его приобретения довольно высокая цена.
Программаторы, выпущенные другими компаниями, имеют довольно широкий диапазон объектов, с которыми работают. Их особенностью является низкая цена и/или возможность работать с другими микроконтроллерами кроме PIC. Есть и поистине универсальные «монстры», которые могут обеспечивать работу различных типов, но из-за необходимости создания большого количества соединений их цена низкой не бывает.
fb.ru
Начинающим программистам микроконтроллеров PIC
Автор: Владимир Д.
[email protected]
Исходя из собственного опыта начала изучения программирования микроконтроллеров постараюсь дать несколько практических советов по составлению программ на ассемблере. Все, приведенные ниже, примеры программирования даны применительно к Pic контроллерам среднего семейства Microchip,как наиболее приемлемых для начала освоения, ввиду относи- тельно простой их архитектуры и несложной системы команд ассемблера.
Предлагаемые программы вполне можно применять в виде готовых макросов (законченных подпрограмм).Они не привязаны к конкретному контроллеру, поэтому при применении следует учитывать данные из datasheet -ов.
Примем тактовую частоту — Fтакт. = 4,096 МГц (стандартный кварц). Тогда время цикла составит t c = 1 / Fтакт. * 4 = 0,97656 мкс
INI_TMR ; инициализация режима прерываний от RTCC bsf STATUS,RP0 ; выбираем банк 1 movlw b"00000100" movwf OPTION ; предделитель для RTCC 1 : 32 bcf STATUS,RP0 ; банк 0 movlw b"10100000" movwf INTCON ; разрешено прерывание от RTCC movlw .96 ; загружаем в RTCC предварительное число 96 movwf TMR0
Получим время прерываний:
t i = t c * 32 * (256 — 96 = 160)
t i = 0,97656 * 32 * 160 = 5 000 мкс = 5 мс
Теперь, если в Вашу любую программу ввести бесконечный цикл (так называемый цикл ожи- дания прерывания), и окончание программы переводить на этот цикл, получим временную привязку к 5 мс.И после прерывания программа вернётся по адресу, указанном вектором прерываний (чаще это 04h).Для чего это можно использовать — смотри дальше.
Итак:
; org 0 START ; начало выполнения программы после ; включения питания org 04h ; а это адрес вектора прерывания, по которому main ; будет выполняться основная программа ; START ; здесь обычно происходит обязательная ини- INI_TMR ; циализация портов, режимов, регистров и т.п. INI_PORTS loop goto loop ; а это и есть бесконечный цикл ;-------------------------------------------------- main ; далее идёт тело основной программы, ; в которой обязательно надо создать программу обслуживания прерываний от RTCC, ; вызываемой командой CALL: ServTMR btfsc INTCON,RTIF ; проверяем флаг срабатывания прерываний от RTCC и call SET_TMR ; если "да",то снова инициализируем TMR0 return ; если "нет" - возврат в место вызова ServTMR в ; основной программе main ; SET_TMR movlw .96 movwf TMR0 ; снова загружаем число 96 bcf INTCON,RTIF ; сбрасываем флаг срабатывания retfie ; возврат с разрешением прерываний в ServTMR, а ; затем в основную программу main
Пример использования прерывания от RTCC для получения секундного импульса на одном из выходов , скажем, порта В — RB0 : Используем регистр Rsec, который должен быть ранее объявлен в в адресном поле рабочих регистров.
FORM_1S ; в каждом цикле, а он по прерыванию RTCC длится incf Rsec,w ; 5 Мс, увеличиваем регистр Rsec на 1 до числа 200 xorlw .200 ; (5 мс * 200 = 1 сек) btfsc STATUS,z goto OUT_PORT ; при Rsec = 200 флаг z = "1" и переход на управление ; выводом RB0 порта В return ; возврат в основную программу main ; OUT_PORT btfss PORTB,0 ; проверяем состояние вывода RB0 goto OUT_ON ; если RB0 ="0", то устанавливаем в "1" bcf PORTB,0 ; в противном случае - устанавливаем в "0" goto main ; возврат в основную программу ; OUT_ON bsf PORTB,0 ; устанавливаем RB0 = "1" goto main
Таким образом на выходе RB0 порта В каждую секунду уровень сигнала будет изменяться то «0» то «1».
В регистрах контроллера информация находится обычно в двоичном виде, ( в бинарном коде). Но часто необходимо получить информацию в двоично — десятичном виде (BCD — код), скажем, для управления поразрядно семисегментным индикатором.
Рассмотрим примеры преобразований двоичного кода b2 в двоично — десятичный BCD и наоборот.
В 8 — bit регистре можно записать в двоичном коде число от 0 до 255 ( от b»00000000″ до b»11111111″ ). Преобразуем двоичное число в три разряда двоично — десятичного кода - «сотни», «десятки» и «единицы». Для этого будем использовать следующие регистры, которые должны быть заранее объявлены в адресном поле рабочих регистров :
Rbin — регистр хранения числа в двоичном коде b2
Rhan — регистр «сотни» кода BCD
Rdec — регистр «десятки» кода BCD
Rsim — регистр «единицы» кода BCD
Преобразования проводим используя операции вычитания чисел 100, а затем 10 с подсчётом количества положительных вычитаний.
CON_100 movlw .100 ; вычитаем 100 из Rbin c проверкой, что subwf Rbin,w ; результат не отрицательный. Флаг "c" = 1 при btfss STATUS,c ; результате > или = 0, и "c" = 0 при Обратное преобразование BCD - кода в b2. Используем те же регистры Rhan, Rdec, Rsim где находится число в BCD - коде, регистры RbinH - старший разряд и RbinL - младший разряд для чисел ( > 255) в коде b2 и вспомогательные регистры RM1 - "множимое" , RM2- "множитель".Для преобразования BCD в b2 нужно умножить "сотни" на 100, "десятки" на 10 и сложить всё вместе с "единицами" и с учётом переноса в старший разряд при необ- ходимости.Для умножения используем операцию сложения.B2X_100 movlw .99 ; преобразование "сотен" movwf RM2 ; множитель = кол - во сложений (100) минус один movf Rhan,w movwf RM1 ; множимое = "сотни" loopX100 addwf RM1,w btfsc STASTUS,c ; проверяем перенос в старший разряд incf RbinH,f ; если есть перенос decfsz RM2,f ; контролируем количество сложений goto loopX100 movwf RbinL ; результат сложения заносим в регистр мл. разряда ; B2X_10 movlw .9 ; преобразование "десятков" movwf RM2 ; множитель = кол - во сложений (10) минус один movf Rdec,w movwf RM1 ; множимое = "десятки" loopX10 addwf RM1,w ; здесь перенос можно не проверять, т.к. результат decfsz RM2,f ; всегдаКонец преобразованиям и дальнейшее выполнение программы. В регистрах RbinL и RbinH получили 16 - bit число в коде b2. Для выполнения арифметической операции деления по аналогии с умножением, рассмот- ренном выше, применяется операция вычитания. Допустим нам нужно произвести деление числа, находящегося в регистрах RHsum (старшие разряды) и RLsum (младшие разряды) - на делитель ( примем делитель не > 255) находящийся в регистре Rdel.
Результат будем заносить в регистры RHrez и RLrez (старшие и младшие разряды соот- ветственно) :
OP_DEL movf Rdel,w subwf Rlsum,w btfss STATUS,c ; проверяем не отрицательный ли результат? goto DEF_carry ; если "да", то проводим заём из ст. разряда incf RLrez,f ; подсчитываем кол-во вычитаний с учётом btfsc STATUS,c ; возможного переноса в старший разряд incf RHrez,f movwf RLsum ; восстанавливаем остаток, что бы не потерять goto OP_DEL ; при отрицательном результате вычитания ; DEF_carry movlw 0h xorwf RHsum,w ; всё ли заняли из старшего разряда в младший? btfsc STATUS,z ; если "да", т.е. RHdel = 0 и в OP_DEL отри- goto OUT_ DEL ; цат. результат - конец делению и выход decf RHsum,f ; если "нет" - заём из старшего разряда и про- incf RLrez,f ; должаем дальше btfsc STATUS,c ; проверка необходимости переноса в ст.разряд incf RHrez,f goto OP_DEL
Как вам эта статья? | Заработало ли это устройство у вас? |
www.radiokot.ru
В 2006-м году возникло у меня желание освоить ассемблер для PIC микроконтроллеров. Решение осваивть именно PIC-и сформировалось не случайно. Для начала всего лишь 35 команд ассемблера. Запомнить наизусть их можно за несколько дней применяя на практике, при написании собственной программы. Или же просто заучить, пользуясь даташитом на любой из PIC контроллеров. Благо, что часть документации доступна на русском языке. Ну и первая конструкция — само-собой часы. И несложно(во всяком случае в начале мне так казалось) и дома и на работе часам или таймеру применение найти легко. Единственное препятствие, с которым пришлось столкнуться — это отсутствие ясной и последовательно изложенной информации по, непосрественно, способам программирования. В сети много сайтов с микроконтроллерной тематикой, но часто эта
информация выложена в виде этакого винигрета, в котором разобраться,
имея нулевой опыт в программировании чипов очень трудно. Не могу сказать, что на этом мои поиски закончились. Некоторые подходы
придумывал сам, а свой код, он как правило всегда лучше, чем
придуманный кем-то другим. Евгений — Автор с большой буквы, сумел упорядочить и переложить в нормально читаемый текст огромное количество материала, сделав его понятным и доступным, даже для тех, кто никогда раньше с программированием не сталкивался. Если Вам нужен быстрый старт и программирование на ассемблере для PIC
контроллеров, то рекомендую сайт Евгения Александровича. Самоучитель по программированию PIC контроллеров для начинающих(руководство по конструированию устройств на микроконтроллерах)Автор: Корабельников Евгений
Александрович г. Липецк Общие замечания по стратегии «въезда».«Самоучитель…» составлен таким образом, что, в случаях наличия каких-то неясностей, возникающих после прочтения предыдущих разделов, в последующих разделах, они постепенно проясняются за счет дополнительной информации. На первичной стадии «въезда», главное — понять смысл, а все остальное к нему, со временем, приложится.СодержаниеВведение 1. Готовим инструменты. Изготовление программатора и работа с ним. 2. Что такое микроконтроллер, и как он работает. 3. Система команд PIC16F84A. 4. Что такое программа и правила ее составления. Пример создания программы автоколебательного мультивибратора. Директивы. Принципиальная схема мультивибратора 5. Интегрированная среда проектирования MPLAB IDE и работа в ней. 6. Что дальше? 7. Пример создания программы (начало). 8. Пример создания программы (продолжение). 9. Работа в симуляторе. Отладка программы. 10. Как отследить выполнение программы 11. Прерывания. Стек. Пример разработки программы с уходом в прерывания. 12. Организация вычисляемого перехода. Работа с EEPROM памятью данных. 13. Флаги. Работа с флагами. Как работает цифровой компаратор. Перенос и заем. 14. Пример задействования флага С в трехбайтном суммирующем устройстве. Циклический сдвиг. Операция умножения. 15. Введение в принцип построения подпрограммы динамической индикации. Косвенная адресация. 16. Преобразование двоичных чисел в двоично-десятичные. Окончательное формирование текста подпрограммы динамической индикации. 17. Принцип счета. Работа с таймером TMR0. Принцип установки групп команд счета в текст программы. Заключение Скачать
самоучитель Скачать
приложения
|
www.kaligraf.narod.ru