Программное обеспечение для 8-разрядного микроконтроллера фирмы Microchip PIC16F877
Алгоритм разработки программного обеспечения. Выбор оптимальной среды программирования. Использование регистров специального назначения. Листинг программы в кодах языка Assambler. Результаты ее компилирования. Блок схема основной программы и макроса RND.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.03.2015 |
Размер файла | 416,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 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.1 Алгоритм разработки программного обеспечения (ПО)
Алгоритм разработки ПО представлен ниже:
- производим настройку микроконтроллера
1) Подключаем библиотеку с используемым микроконтроллером
2) Выделяем свободные ячейки памяти для хранения в них используемых переменных.
3) Укажем начальный адрес выполнения программы.
4) Укажем ячейку, из которой будет браться начальное число для получения псевдослучайного массива чисел.
- создаем макросы для облегчения выбора банков памяти во время программирования, а также макрос для генерации случайного числа.
- выполняем автоматическое заполнение массива случайными числами, и производим поиск максимального значения, среди этих чисел.
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.Это говорит о том, что эффект псевдослучайного массива будет виден на собранном устройстве.
3. В основной программе, алгоритм которой представлен на рисунке 1, выполняется автоматическое заполнение массива, псевдослучайными числами, путем преобразования каждого последующего элемента макросом RND. Для автоматического заполнения применяется косвенная адресация. Количество заполняемых ячеек соответствует числу, которое находится в переменной ТЕМР. Данная переменная содержит значение, загружаемое в счетчик, и при достижении нуля заполнение массива прекращается.
4. Далее выполняется поиск элемента в массиве с максимальным значением. Изначально за максимальный элемент принимаем первый и записываем его в переменную MAX. Далее сравниваем значение MAX с последующим элементом путем арифметической команды вычитания. Если он оказывается больше значения MAX, то его переписываем в эту же переменную MAX, если же значение следующего числа меньше текущего максимального, то переменную МАХ оставляем без изменения. Сравнение продолжается столько же раз, сколько элементов находится в массиве. Количество операций сравнения также отсчитывается счетчиком, в который загружено число из переменной ТЕМР.
5. Под конец выполнения программы в ячейке 0Х20 (адрес дан по заданию) находится максимальный элемент массива.
Рисунок 1 - Блок схема основной программы
Рисунок 2 - Блок схема макроса RND
4. Разработка программного аналога
В этом разделе, имея необходимый алгоритм и среду программирования, напишем код программы.
4.1 Листинг программы
Листинг программы представлен в кодах языка Assambler.
#include <p16f877.inc>
TEMP EQU 0x60 ; определим
RANDOM EQU 0x61 ; местоположение
MAX EQU 0X20 ; всех переменных
ORG h'0000' ;
ORG h'0004' ;
MOVLW 0X21 ; положим в аккумулятор 0Х21
MOVWF FSR ; выберем ячейку с этим адресом
MOVLW 0XA4 ; положим в аккумулятор 0ХA4
MOVWF INDF ; положим в ячейку 0Х21 значение 0ХА4
MOVF 0X21,W ; копируем значение 0Х21 ячейки в аккумулятор
MOVWF RANDOM ; положим это значение в переменную RANDOM
;**********************************************************
; МАКРОСЫ ВЫБОРА БАНКОВ ПАМЯТИ
;**********************************************************
BANK0 MACRO ; выбор нулевого банка
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1 MACRO ; выбор первого банка
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK2 MACRO ; выбор второго банка
BCF STATUS,RP0
BSF STATUS,RP1
ENDM
BANK3 MACRO ; выбор третьего банка
BSF STATUS,RP0
BSF STATUS,RP1
ENDM
;**********************************************************
; НАХОЖДЕНИЕ СЛУЧАЙНОГО ЗНАЧЕНИЯ
;**********************************************************
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 год.
2. УМКДП по дисциплине «МПК в СУ» специальности 5B070200, 5B071800.
3. Справочник по PIC микроконтроллерам М. Предко 2004г.
4. Микропроцессорные системы. Учебное пособие для вузов В. Куприянов, О. Грушвицкий
Размещено на Allbest.ru
Подобные документы
Разработка программы, осуществляющей контроль за своевременностью обновления программного обеспечения с помощью рассылки электронных писем. Анализ требований к системе; выбор метода решения, алгоритма, выбор языка программирования, описание программы.
дипломная работа [5,6 M], добавлен 29.06.2011Сущность линейного программирования. Математическая формулировка задачи ЛП и алгоритм ее решения с помощью симплекс-метода. Разработка программы для планирования производства с целью обеспечения максимальной прибыли: блок-схема, листинг, результаты.
курсовая работа [88,9 K], добавлен 11.02.2011Математическое обоснование метода решения задачи: определенный интеграл, квадратурная формула Симпсона (формула парабол). Словесное описание алгоритма и составление его блок-схемы. Выбор языка программирования. Текст программы решения задачи, ее листинг.
курсовая работа [593,6 K], добавлен 09.07.2012Особенности разработки программы и выбор методов решения задачи. Составление алгоритма, распределение регистров программы и формирование файлов. Описание процедуры очистки памяти, сложения, вычитания, умножения. Тестирование и листинг программы.
лабораторная работа [51,2 K], добавлен 14.05.2011Характеристика программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит результаты на экран. Описание переменных в программе, ее блок-схема и алгоритм работы. Листинг программы. Описание входных данных и результат вычислений.
курсовая работа [721,4 K], добавлен 10.11.2010Техническое задание для разработки программного обеспечения "Больница". Обоснования для проведения разработки. Цель, назначение подсистемы. Требования ко всем видам обеспечения программы. Общесистемное программное обеспечение. Применение языка Delphi 6.0.
курсовая работа [832,9 K], добавлен 18.01.2010Архитектура микроконтроллера PIC16F876 фирмы Microchip и построение на его основе микропроцессорной системы логического анализатора. Построение устройств сбора и обработки информации. Кросс-компилятор HI-TECH С for Microchip PIC v7.85. Листинг программы.
контрольная работа [137,4 K], добавлен 24.12.2012C++ как универсальный язык программирования, его сущность, назначение, классы и возможности. Блок-схема и листинг программы KURS.EXE, ее принцип работы, системные требования, возможные неполадки и способы их устранения. Листинг заставки VOVA777.EXE.
курсовая работа [422,3 K], добавлен 31.05.2010Организация вычислительных процессов и программирования на алгоритмическом языке. Создание программы "Калькулятор". Выбор языка и среды программирования. Функциональная схема работы программы, описание разработанных алгоритмов. Способы устранения ошибок.
курсовая работа [434,1 K], добавлен 27.08.2012Структурная схема микроконтроллера, процесс разработки принципиальной схемы и программного обеспечения. Конфигурирование регистров аналого-цифрового преобразователя. Код программы на языке Assembler, конфигурирование регистров внешних прерываний.
курсовая работа [267,5 K], добавлен 08.06.2019