Источник: Вісник кафедри «Електротехніка» за підсумками наукової діяльності студентів. – Донецьк, ДонНТУ, 2004, стр.102-103.
ПРИМЕР СОСТАВЛЕНИЯ ПРОГРАММЫ ДЛЯ МИКРОКОНТРОЛЛЕРОВ СЕРИИ PIC16F87XA
Ульянов Е.А., студент; Белобородько О.А., инж., асс.
(Донецкий национальный технический университет г. Донецк, Украина)
В настоящее время в курсе микропроцессорной техники осуществляется переход на новую, более современную элементную базу. В данной статье рассматривается простой пример лабораторной работы по курсу микропроцессорная техника, для микроконтроллеров PIC16F87XA.
В сравнении с составлением программ на языках высокого уровня, программирование микроконтроллеров на языке Ассемблера имеет свои особенности. При описании алгоритма решения поставленной задачи учитываются в первую очередь ограниченные возможности конкретного микроконтроллера. Например, микроконтроллеры PIC16F87XA не имеют команд умножения и деления.
Алгоритм решения любой задачи представляется в виде блок-схемы.
Рисунок 1 - Блок-схема алгоритма разрабатываемой программы
Представление алгоритма решения на языке Ассемблер является сложной задачей. Поэтому программа на Ассемблере составляется в несколько этапов.
Вначале пишется текст на Ассемблере без конкретных адресов. На этом этапе они заменяются специальными метками. Программа в таком виде может быть размещена в любой области памяти.
На втором этапе программа переводится в машинные коды с некоторого заданного начального адреса с подстановкой реальных адресов в команды переходов. Этот процесс называется трансляцией и зачастую выполняется на специальной инструментальной ЭВМ, оснащенной соответствующей программой-транслятором.
В данной статье на примере решения сравнительно простой задачи (арифметическое действие умножение двух чисел с выводом на индикатор результатов) изучаются основные приёмы составления программ на языке Ассемблера.
На рисунке 1 изображена блок-схема алгоритма разрабатываемой программы.
В блоке 1 обнуляется аккумулятор W, в блоках 2, 3 - в память микроконтроллера заносятся числовые данные, в регистр С1 заносится первый сомножитель R1, в регистр В1 заносится второй сомножитель R2. Операцию умножения, заменяем операцией сложения (блок 4), необходимым количеством раз (это количество определяется вторым сомножителем R2 (блоки 5, 6). Затем, результат умножения, заносим в переменную L_byte (блок 7). В блоке 8 выполняется вывод результата умножения на трёхразрядный индикатор.
Ниже приведен фрагмент программы, который выполняет умножение двух чисел десять на девять и результат - число девяносто выводится на индикатор.
; Начало программы умножения
clrw ; обнуление аккумулятора
movlw .10 ; занести число 10 в аккумулятор
movwf C1 ; перенести содержимое аккумулятора в регистр С1
movlw .9 ; занести число 9 в аккумулятор
movwf B1 ; перенести содержимое аккумулятора в регистр В1
clrw ; обнуление аккумулятора
label
addwf C1,W ; сложить содержимое регистра С1 и аккумулятора, результат
; сохранить в аккумуляторе
decf Bl, F ; вычесть 1 из регистра С1, результат сохранить в регистре С1
btfss STATUS ,Z ; проверить признак нулевого результата
goto label ; перейти к метке label
movwf L_byte ; результат умножения заносим в регистр индикатора L_byte
; Конец программы умножения
Составление текста программы, его редактирование с последующей трансляцией обычно осуществляется на персональном компьютере с использованием специального программного обеспечения. Применительно для семейства микроконтроллеров PIC это программа MPLAB (свободно распространяется фирмой). Запись программы в память микроконтроллера производится с помощью специального устройства - программатора. Следует отметить возможность программирования микроконтроллера в готовом устройстве (не вынимая микросхему из платы).
Данная программа рассмотрена лишь в качестве примера реализации, а не практической программы умножения для микроконтроллеров серии PIC16F87XA.