Источник: Вісник кафедри «Електротехніка» за підсумками наукової діяльності студентів. – Донецьк, ДонНТУ, 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.