Программное обеспечение для 8-разрядного микроконтроллера фирмы Microchip PIC16F877

 

Содержание


Введение

1. Постановка задачи

1.1 Алгоритм разработки программного обеспечения (ПО)

2. Разработка программного обеспечения

2.1 Выбор среды программного обеспечения

2.2 Описание задействованных регистров

3. Разработка алгоритма

4. Разработка программного аналога

4.1 Листинг программы

4.2 Отладка программы

Заключение

Список использованных источников


Введение


В последние десятилетия во многих производственных сферах стали применяться технологии на основе микроконтроллерной техники.

Среди всего разнообразия цифровых микросхем микроконтроллеры, занимают такое же место, как, например, в аналоговой технике операционные усилители. Микроконтроллеры обладают одним очень важным качеством - универсальностью. Они могут применяться в электронных приборах самого различного назначения, и спектр применения постоянно расширяется. Нынешние микроконтроллеры содержат в себе достаточно мощное вычислительное ядро, устройства для запоминания информации и программы, управляющей ими, порты для ввода/вывода информации, как в аналоговой, так и в цифровой величинах.

С каждым годом спрос на микроконтроллеры растет в разы. Поэтому наблюдается их удешевление, а также рост технических возможностей. На данный момент времени целесообразно конструировать на микроконтроллере даже такие приборы, которые можно было бы реализовать на нескольких десятках микросхем на основе логических элементов.

Рынок технологических новшеств сегодня заостряет внимание на предоставление потребителю микроконтроллеров с внушительной вычислительной мощностью, с большей производительностью и большим набором различных периферийных устройств.

Большим спросом пользуются также микроконтроллеры, содержащие в своей структуре стандартные современные, часто используемые интерфейсы для передачи данных, и управления внешней периферией.

В данном курсовом проекте необходимо решить распространенную задачу, которая встречается очень часто в процессе автоматизации производственных процессов. Также необходимо выбрать микроконтроллер, по своим характеристикам подходящий для решения подобных задач. МК должен иметь достаточный вычислительный потенциал, объем памяти, должен содержать в себе 8-разрядную структуру. Такой выбор сделать не трудно, так как компания Микрочип производит широкий спектр микроконтроллеров со своими характеристиками и преимуществами. Для решения данной задачи подходит большинство микроконтроллеров из 12 и 16 семейства Микрочипов, так как процесс выполнения программы подразумевает лишь выполнение арифметических и логических задач, и не требует управления какими-либо внешними устройствами.


1. Постановка задачи


В данном курсовом проекте необходимо написать программное обеспечение для 8-разрядного микроконтроллера фирмы Microchip PIC16F877.

Написание программы осуществляется на низкоуровневом языке assembler MPASM, в среде MPLab.


.1 Алгоритм разработки программного обеспечения (ПО)


Алгоритм разработки ПО представлен ниже:

производим настройку микроконтроллера

)Подключаем библиотеку с используемым микроконтроллером

)Выделяем свободные ячейки памяти для хранения в них используемых переменных.

)Укажем начальный адрес выполнения программы.

)Укажем ячейку, из которой будет браться начальное число для получения псевдослучайного массива чисел.

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

выполняем автоматическое заполнение массива случайными числами, и производим поиск максимального значения, среди этих чисел.


2. Разработка программного обеспечения


Необходимо выбрать оптимальную среду программирования для разработки требуемого ПО. А также правильно воспользоваться регистрами специального назначения.


2.1 Выбор среды программного обеспечения


Самым верным выбором для решения подобной задачи является использование среды программирования MPLab (в данном случае версия 8.40) В качестве основного языка выбран ассемблер. В роли компилятора выступает стандартный инструмент данной среды MPASM.

Выбор среды MPLab был сделан исходя из того, что она выпускается той же компанией, которая выпускает непосредственно сами PIC-микроконтроллеры. В качестве программы-отладчика используем также встроенное приложение MPLAB SIM (позволяет пошагово проверять выполнение команд ПО, и нахожу производить исправления)


2.2 Описание задействованных регистров


В ходе выполнения программы нами были использованы регистры специального назначения, приведенные в таблице 1.


Таблица 1 Используемые регистры специального назначения

РегистрОписаниеSTATUSВ регистре STATUS содержатся флаги состояния АЛУ, флаги причины сброса микроконтроллера и биты управления банками памяти данных.FSRРегистр адреса при косвенной адресацииINDFОбращение к регистру, адрес которого записан в FSR (не физический регистр)WREGРегистр, в котором хранится один из операндов при выполнении операции АЛУ.TEMPПеременная для количества циклов повтора RANDOMПеременная для хранения псевдослучайного числаMAXПеременная для хранения максимального элемента массива

3. Разработка алгоритма


Алгоритмы выполнения основной программы и макросов представлены на рисунках 1, 2.

Основная блок схема состоит из ряда подпрограмм, блок схемы которых так же представлены на рисунках ниже.

1.Макросы BANK0 - BANK3 изменяют значения битов RP0 и RP1 регистра STATUS, тем самым позволяют короткими командами перемещаться по всем четырем банкам.

2.Макрос RND, алгоритм которого представлен на рисунке 2, выполняет генерацию псевдослучайного числа и записывает его в переменную RANDOM. Исходное число, с которым производит операции генерирования макрос RND находится по адресу 0Х21, т.е. первый элемент массива. Так как после окончания заполнения массива, используемые ячейки не подвергаются очищению, поэтому первый его элемент каждый новый цикл заполнения получается разным. Следует учесть, что ячейки после заполнения не очищаются лишь в реально работающем микроконтроллере, а при симуляции программы в MPLab-е, при каждом новом запуске ячейки могут содержать значение 0X00.Это говорит о том, что эффект псевдослучайного массива будет виден на собранном устройстве.

.В основной программе, алгоритм которой представлен на рисунке 1, выполняется автоматическое заполнение массива, псевдослучайными числами, путем преобразования каждого последующего элемента макросом RND. Для автоматического заполнения применяется косвенная адресация. Количество заполняемых ячеек соответствует числу, которое находится в переменной ТЕМР. Данная переменная содержит значение, загружаемое в счетчик, и при достижении нуля заполнение массива прекращается.

.Далее выполняется поиск элемента в массиве с максимальным значением. Изначально за максимальный элемент принимаем первый и записываем его в переменную MAX. Далее сравниваем значение MAX с последующим элементом путем арифметической команды вычитания. Если он оказывается больше значения MAX, то его переписываем в эту же переменную MAX, если же значение следующего числа меньше текущего максимального, то переменную МАХ оставляем без изменения. Сравнение продолжается столько же раз, сколько элементов находится в массиве. Количество операций сравнения также отсчитывается счетчиком, в который загружено число из переменной ТЕМР.

.Под конец выполнения программы в ячейке 0Х20 (адрес дан по заданию) находится максимальный элемент массива.


Рисунок 1 - Блок схема основной программы

Рисунок 2 - Блок схема макроса RND

4. Разработка программного аналога


В этом разделе, имея необходимый алгоритм и среду программирования, напишем код программы.


4.1 Листинг программы


Листинг программы представлен в кодах языка Assambler.


#include <p16f877.inc>EQU 0x60 ; определим EQU 0x61 ; местоположение

MAX EQU 0X20 ; всех переменных

ORG h'0000' ;

ORG h'0004' ;

MOVLW 0X21 ; положим в аккумулятор 0Х21

MOVWF FSR ; выберем ячейку с этим адресом

MOVLW 0XA4 ; положим в аккумулятор 0ХA4 INDF ; положим в ячейку 0Х21 значение 0ХА4

MOVF 0X21,W ; копируем значение 0Х21 ячейки в аккумулятор

MOVWF RANDOM ; положим это значение в переменную RANDOM

;**********************************************************

; МАКРОСЫ ВЫБОРА БАНКОВ ПАМЯТИ

;**********************************************************

BANK0 MACRO ; выбор нулевого банка

BCF STATUS,RP0

BCF STATUS,RP1MACRO ; выбор первого банкаSTATUS,RP0STATUS,RP1MACRO ; выбор второго банкаSTATUS,RP0STATUS,RP1MACRO ; выбор третьего банкаSTATUS,RP0STATUS,RP1

;**********************************************************

; НАХОЖДЕНИЕ СЛУЧАЙНОГО ЗНАЧЕНИЯ

;**********************************************************

RND MACRO ; выполнить макрос RND

RLF RANDOM,W ; сдвиг переменной RANDOM на разряд влево

RLF RANDOM,W ; сдвиг переменной RANDOM на разряд влево

BTFSC RANDOM,4 ; проверим бит 4 регистра RANDOM на 0 значение

XORLW 1 ; побитное искл-или аккумулятора и 1

BTFSC RANDOM,5 ; проверим бит 5 регистра RANDOM на 0 значение

XORLW 1 ; побитное искл-или аккумулятора и 1

BTFSC RANDOM,3 ; проверим бит 3 регистра RANDOM на 0 значение

XORLW 1 ; побитное искл-или аккумулятора и 1

MOVWF RANDOM ; значение аккумулятора в регистр RANDOM

ENDM ; выйти из макроса

;**********************************************************

; ЗАПОЛНЕНИЕ МАССИВА А СЛУЧАЙНЫМИ ЧИСЛАМИ

;**********************************************************

START ; начало программы

BANK0 ; выбор нулевого банка

MOVLW 0X1F; поместим в аккумулятор количество повторов заполнения

MOVWF TEMP ; 0X0F в регистр TEMP

MOVLW 0X21 ; поместим в аккумулятор адрес первой ячейки

MOVWF FSR ; укажем адрес первой ячейки в регистре FSR

M1: ; метка M1

RND ; выполним макрос RND

MOVF RANDOM ; поместим случайное число в аккумулятор

MOVWF INDF ; поместим это число в ячейку с адресом из регистра FSR

INCF FSR ; увеличим значение адреса на 1

DECFSZ TEMP ; вычитаем 1 от регистра TEMP и проверим на

GOTO M1 ; если TEMP>0 перейдем на метку M1

;**********************************************************

; ПОИСК МАКСИМАЛЬНОГО ЗНАЧЕНИЯ

;**********************************************************

MOVLW 0X21 ; положим в аккумулятор адрес первой ячейки

MOVWF FSR ; запишем его в FSR

MOVF INDF,W ; прочтем значение из ячейки по адресу FSR

MOVWF MAX ; положим значение из ячейки в переменную MAX

MOVLW 0X20 ; положим в аккумулятор количество проверяемых ячеек

MOVWF TEMP ; запишем в переменную TEMP

M2 ; метка M2

DECFSZ TEMP ; вычитаем 1 от регистра TEMP и проверим на 0

GOTO M4 ; переход на метку М4

GOTO M3 ; переход на метку М3

M4 ; метка M2

INCF FSR ; перенход на следующую ячейку

MOVF INDF,W ; положим значение INDF в аккумулятор

SUBWF MAX, W ; отнимем от максимального значения

BTFSC STATUS, C ; проверим что больше

GOTO M2 ; переход на метку М2

MOVF INDF,W ; копируем текущую ячейку косвенной адресации в аккумулятор

MOVWF MAX ; положим это значение в переменную MAX

GOTO M2 ; если TEMP>0 перейдем на метку M2

M3 ; метка M3

;**********************************************************

; КОНЕЦ ПРОГРАММЫ

;**********************************************************

END


4.2Отладка программы


На рисунке 3 показано окно процесса и результата компилирования полученной программы. Как видно синтаксис языка Assembler не нарушен, следовательно, ошибок компилятором не обнаружено.

Полученные предупреждения (Warning[203]) говорят о некорректном расставлении табуляций в программном коде. Однако на качество выполнения самой программы это никак не влияет.


Рисунок 3 - Результат компилирования написанной программы

На рисунке 4 представлено полученное программное обеспечение в режиме отладки:


Рисунок 4 - Заполнение ячеек с 0Х21 по 0Х3F


На рисунке 4 можно увидеть, что массив случайных чисел находится в соответствии с заданием в ячейках, начиная с адреса 0Х21 по 0Х3F, в ячейке с адресом 0Х20 находится максимальное значение массива.


Заключение


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

Результатом процесса программирования является законченная программа, не нуждающаяся в какой-либо оптимизации, корректировке, отладке или исправлении. Применение в языке Assembler MPASM таких конструкций, как например макросы, позволило значительно сократить объем используемой памяти, причем настолько, что можно применить данную программу не только с микроконтроллером PIC16F877, но и с МК более низшего порядка.

В ходе процесса программирования были получены навыки использования большинства команд, применяемых для микроконтроллеров PIC 16-ого семейства (всего 35 инструкций). Был выведен новый, не схожий со стандартными, метод нахождения максимального значения из массива, использующий минимум операций и вычислительного ресурса МК. Также был изучен принцип работы макросов, условных и безусловных переходов, работа с байт-ориентированными и бит-ориентированными командами. Курсовой проект позволил в который раз убедиться в наилучшей совместимости микроконтроллера фирмы Микрочип, и программной среды для разработки ПО для МК, созданной этой же фирмой.

Ассемблер MPASM хорош тем, что готовую программу можно легко внедрить как составляющую другой программы, единственное что требуется, это соответствие имен переменных, и выделение неиспользуемой памяти для нее.

Применить полученную программу можно во множестве устройств автоматизации промышленных, развлекательных объектов, в сфере услуг и обслуживания населения. Особенно часто программы такой структуры применяются в игровых автоматах и игрушках.

Нам, студентам специальности Автоматизация и Управление, как будущим специалистам в сфере программирования микроконтроллеров, просто необходимо без каких-либо проблем и затруднений решать задачи подобного уровня сложности, особенно на языках низкого уровня, в которых преобладает непосредственная работа с памятью, а также легко внедрять подобные, уже готовые листинги в более объемные программы.

программа регистр макрос assembler


Список использованных источников:


1. Техническая документация по PIC16F877X, OOO «Микро-Чип», Москва 2002 год.

. УМКДП по дисциплине «МПК в СУ» специальности 5B070200, 5B071800.

. Справочник по PIC микроконтроллерам М. Предко 2004г.

. Микропроцессорные системы. Учебное пособие для вузов В. Куприянов, О. Грушвицкий


Содержание Введение 1. Постановка задачи 1.1 Алгоритм разработки программного обеспечения (ПО) 2. Разработка программного обеспечения 2.1 Вы

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ