- •И.А. Дубров
- •Содержание
- •Введение
- •Лабораторная работа 1 Изучение интегрированной среды разработки mplab
- •Методика выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 2 Изучение запоминающих устройств микроконтроллеровPic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 3 Изучение работы параллельных портов микроконтроллеровPic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 4 Изучение работы последовательных портов микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 5 Изучение работы таймеров микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 6 Изучение работы аналого-цифрового преобразователя микроконтроллеровPic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 7 Изучение работы модуля захвата/сравнения/шим микроконтроллеровPic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Библиографический список
- •Приложение 1. Схема лабораторного макета
- •Bтfss— Условный переход при единичном битеbрегистраf
- •Call— Вызов подпрограммы
- •Goto— Переход по адресу
- •Incf— Декремент регистраf
- •Incfsz— Декремент регистраfи пропуск в случае нулевого результата
- •Iorlw— Побитное «или»Wи константыk
- •Retlw— Выход из подпрограммы с загрузкой в регистрWконстантыk
- •Return— Выход из подпрограммы
- •Rlf— Циклический сдвиг регистраfвлево через флаг переносаС
- •Rrf— Циклический сдвиг регистраfвправо через флаг переносаС
- •Sleep— Перейти в спящий режим
- •Основы микропроцессорной техники
- •620034, Екатеринбург, ул. Колмогорова 66.
Порядок выполнения работы
В данной лабораторной работе необходимо разработать и отладить программу, реализующую обращение к определенным областям памяти микроконтроллера PIC16F873A. Конкретное задание выдается преподавателем.
В качестве примера рассмотрим следующее задание: необходимо разработать программу заполняющую все регистры общего назначения банка 0 возрастающими двоичными числами начиная с h'00', и копирующую эти данные в EEPROM.
Постановка задачи
Представим исходную словесную форму задания в аналитическом виде. Для этого обозначим буквой N число записываемое в очередной регистр, буквой F адрес регистра, а буквой E адрес ячейки EEPROM. Поскольку адреса РОН в банке 0 начинаются с H'20', а заканчиваются H'7F', то можно записать, что F ⊂ [H'20', H'7F']. Соответственно в этот массив памяти поместятся числа от H'00' до H'5F' или N ⊂ [H'00', H'5F']. При копировании в EEPROM будут задействованы ячейки с адресами E ⊂ [H'00', H'5F']. Также можно записать: [F0]=0, [Fi]=Ni, [Fi+1]=Ni+1, [Ei]=[Fi]. В последних формулах квадратные скобки обозначают, что буквами F и E обозначены не адреса ячеек памяти, а содержимое ячеек памяти с этими адресами.
Разработка алгоритма программы
Укрупненный алгоритм программы приведен на рис. 2.5.
В первом блоке алгоритма производятся предварительные настройки Ассемблерной программы: ссылки на включаемые в основной текст файлы, задание начального адреса программы, распределение РОН и т. д.
Блоки со второго по седьмой описывают запись возрастающих чисел в банк 0 регистрового файла.
Во втором и третьем блоке задаются начальные значения адреса ячейки оперативной памяти данных и число, записываемое в эту ячейку.
В четвертом блоке производится собственно запись числа в ячейку памяти.
В пятом и шестом блоках производится вычисление адреса следующей ячейки и следующего числа (в данном примере это просто увеличение на единицу).
В седьмом блоке алгоритма производится сравнение числа с его конечным значением. Следует учесть, что в данном примере сравнение происходит после увеличения числа, по этому в качестве конечного значения взято число 60, а не 5F. Если число не достигло своего конечного значения, то программа возвращается к записи этого числа в очередную ячейку (блок 4, М10:), если же результат сравнения положительный, то программа переходит к копированию информации из ОЗУ в EEPROM (блоки с восьмого по тринадцатый).
В восьмом и девятом блоках задаются начальные значения адресов ячеек оперативной памяти данных и EEPROM.
В десятом блоке производится копирование информации из очередной ячейки ОЗУ в EEPROM.
В одиннадцатом и двенадцатом адреса ячеек ОЗУ и EEPROM увеличиваются на единицу.
В тринадцатом блоке производится сравнение адреса ячейки EEPROM с конечным значением, увеличенным на единицу. Если адрес ячейки не достиг своего конечного значения, то программа возвращается к блоку 10 (М20:), иначе переход к концу программы.
Рис. 2.5. Блок-схема алгоритма программы
Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
;предварительные настройки
#include p16f873a.inc
CONFIG _HS_OSC ;
ORG H'000' ;вектор сброса
CNT EQU H'A0' ;определение регистра счетчика с адресом А0 (банк 1)
;запись возрастающих чисел в ОЗУ
BCF STATUS,RP1 ; ┬ выбираем банк регистров 1
BSF STATUS,RP0 ; ┘
MOVLW H'20' ;загрузка в рабочий регистр адреса первого РОН в банке 0
MOVWF FSR ;записываем начальный адрес в регистр косв. адресации
CLRF CNT ;обнуляем регистр счетчик
M10: MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
MOVWF INDF ;сохраняем очередной отсчет в косвенно адресуемый РОН
INCF FSR,F ;увеличение адреса РОН в регистре косвенной адресации
INCF CNT,F;увеличение счетчика на 1
MOVF CNT,W ;загружаем новое значение счетчика в рабочий регистр
XORLW H'60' ;сравниваем его с последним значением +1
BTFSS STATUS,Z ;если совпадают то скачек через одну команду
GOTO M10 ;если не совпадают, то возврат к записи следующей ячейки
;копирование из ОЗУ в EEPROM
MOVLW H'20' ;загрузка в рабочий регистр адреса первого РОН в банке 0
MOVWF FSR ;записываем начальный адрес в регистр косв. адресации
CLRF CNT ;обнуляем регистр счетчик адреса EEPROM
M20: BSF STATUS,RP1 ; ┬ выбираем банк регистров 3
BSF STATUS,RP0 ; ┘
BTFSC EECON1,WR ; ┬ проверка окончания предыдущей записи в EEPROM
GOTO M20 ; ┘
BCF STATUS,RP1 ; ┬ выбираем банк регистров 1
BSF STATUS,RP0 ; ┘
MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
BSF STATUS,RP1 ; ┬ выбираем банк регистров 2
BCF STATUS,RP0 ; ┘
MOVWF EEADR ;сохраняем адрес очередной ячейки в регистре адреса
MOVF INDF,W ;считываем данные из очередного РОН в рабочий регистр
MOVWF EEDATA ;и сохраняем их в регистре данных EEPROM
BSF STATUS,RP1 ; ┬ выбираем банк регистров 3
BSF STATUS,RP0 ; ┘
BCF EECON1,EEPGD ;выбираем EEPROM
BSF EECON1,WREN ;разрешаем запись
BCF INTCON,GIE ;запрещаем прерывания
MOVLW H'55' ; ┐
MOVWF EECON2 ; │
MOVLW H'AA' ; ├ обязательная последовательность из пяти команд
MOVWF EECON2 ; │
BSF EECON1,WR ; ┘
BCF EECON1,WREN ;запрещаем запись
BCF STATUS,RP1 ; ┬ выбираем банк регистров 1
BSF STATUS,RP0 ; ┘
INCF FSR,F ;увеличение адреса РОН в регистре косвенной адресации
INCF CNT,F;увеличение счетчика на 1
MOVF CNT,W ;загружаем новое значение счетчика в рабочий регистр
XORLW H'60' ;сравниваем его с последним значением +1
BTFSS STATUS,Z ;если совпадают то скачек через одну команду
GOTO M20 ;если нет, то переход к копированию очередной ячейки
M30: GOTO M30 ;зацикливаемся здесь
END ;конец программы
Трансляция исходного текста программы в машинные коды
Процесс создания нового проекта и компиляции программы подробно описан в лабораторной работе 1.
Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах ошибки. Описание процесса программирования микроконтроллера и запуска программы приведен в лабораторной работе 1. Необходимо учесть, что состояние ячеек энергонезависимой EEPROM памяти данных отображается только после выполнения команды Debugger > Read EEDATA.
Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ носят чисто учебный характер, то их работоспособность необходимо поддерживать лишь до момента защиты лабораторной работы преподавателю.