Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОМТ (на редактировании).doc
Скачиваний:
31
Добавлен:
17.05.2015
Размер:
3.86 Mб
Скачать

Порядок выполнения работы

В данной лабораторной работе необходимо разработать и отладить программу, реализующую обращение к определенным областям памяти микроконтроллера PIC16F873A. Конкретное задание выдается преподавателем.

В качестве примера рассмотрим следующее задание: необходимо разработать программу заполняющую все регистры общего назначения банка 0 возрастающими двоичными числами начиная с h'00', и копирующую эти данные в EEPROM.

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

Представим исходную словесную форму задания в аналитическом виде. Для этого обозначим буквой 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 обозначены не адреса ячеек памяти, а содержимое ячеек памяти с этими адресами.

      1. Разработка алгоритма программы

Укрупненный алгоритм программы приведен на рис. 2.5.

В первом блоке алгоритма производятся предварительные настройки Ассемблерной программы: ссылки на включаемые в основной текст файлы, задание начального адреса программы, распределение РОН и т. д.

Блоки со второго по седьмой описывают запись возрастающих чисел в банк 0 регистрового файла.

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

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

В пятом и шестом блоках производится вычисление адреса следующей ячейки и следующего числа (в данном примере это просто увеличение на единицу).

В седьмом блоке алгоритма производится сравнение числа с его конечным значением. Следует учесть, что в данном примере сравнение происходит после увеличения числа, по этому в качестве конечного значения взято число 60, а не 5F. Если число не достигло своего конечного значения, то программа возвращается к записи этого числа в очередную ячейку (блок 4, М10:), если же результат сравнения положительный, то программа переходит к копированию информации из ОЗУ в EEPROM (блоки с восьмого по тринадцатый).

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

В десятом блоке производится копирование информации из очередной ячейки ОЗУ в EEPROM.

В одиннадцатом и двенадцатом адреса ячеек ОЗУ и EEPROM увеличиваются на единицу.

В тринадцатом блоке производится сравнение адреса ячейки EEPROM с конечным значением, увеличенным на единицу. Если адрес ячейки не достиг своего конечного значения, то программа возвращается к блоку 10 (М20:), иначе переход к концу программы.

Рис. 2.5. Блок-схема алгоритма программы

      1. Написание текста программы на языке Ассемблер

Исходный текст программы приведен далее:

;предварительные настройки

#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.

      1. Тестирование и отладка

На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах ошибки. Описание процесса программирования микроконтроллера и запуска программы приведен в лабораторной работе 1. Необходимо учесть, что состояние ячеек энергонезависимой EEPROM памяти данных отображается только после выполнения команды Debugger > Read EEDATA.

      1. Сопровождение

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