Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
2017-06-29 | 410 |
5.00
из
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
Процесс чтения значительно проще записи. Для этого лишь необходимо сбросить бит EEPGD в 0 – тем самым выбрав EEPROM память, и установить, бит RD в 1 – активировав чтение. Данные будут доступны, после 1 машинного цикла. Пример операции чтения представлен ниже:
; операция чтения из EERPOM памяти
; выбрать необходимый Банк
BANKSEL EEADR; перейти в банк, где находиться управляющий
; регистр EEADR
; указание адреса
movlw ADDR; загрузка адреса ячейки памяти в W
movwf EEADR; загрузка адреса в регистр EEADR
; указание данных
BANKSEL EECON1; перейти в банк, где находиться управляющий
; регистр EECON1
BANKSEL EEDATA; перейти в банк, где находиться управляющий
; регистр EEDATA
movfw value; загрузка данных в W
movwf EEDATA; запись данных в EEDATA
bcf EECON1, EEPGD; выбрать EEPROM память данных
bsf EECON1, RD; инициализировать чтение
movfw EEDATA; считать данные, W = EEDATA
Попытайтесь считать, записанные в предыдущем примере данные. Если ничего не выходит, внимательно изучите код, возможно причиной неудачи служит тот факт, что вы не указали верный банк памяти.
Методические указания к выполнению лабораторной работы
Постановка задачи
Написать программу для работы с массивами расположенными, как во
внутренней, так и внешней памяти данных. Один из массивов полностью соответствует тому, что был в лабораторной работе № 5 – это массив № 1, расположен во внутреннем ОЗУ. Массив № 2 имеет структуру такую же, как и массив № 1, но расположен во внешнем ОЗУ. Алгоритм заполнения второго массива произвольный, любой по выбору автора. Массивы необходимо между собой поэлементно и побитно сложить по модулю 2, и поместить на место массива № 1. Работу с каждым из массивов (заполнение, вычисление) оформить в виде отдельной подпрограммы.
|
Блок-схема алгоритма
Код программы
; Lab_6
;-------------------------------
#include<p17С756А.inc>; подключение заголовочного файла
; для МК 1886ВЕ2У 16F877
;-------------------------------
#define M D'6'; кол-во строк
#define N D'5'; кол-во стоблоц
array EQU 0x30; начало массива № 1
array_2 EQU 0x10; начало массива № 2 в EEPROM памяти
day EQU 0x50; день рождения
month EQU 0x51; месяц рождения
arr_size EQU 0x52; размер массива
t_val_1 EQU 0x53; вр. значения массива № 1
t_val_2 EQU 0x54;
status EQU 0x55; статус программ:
; бит 0:
; 0 - массив не заполнен
; 1 - массив заполнен
;-------------------------------
org 0x00; начало памяти программ (ПП)!
goto main; произвести переход на метку 'main',
; с которой начнётся выполнение
; основной программы
org 0x05; адрес начала размещения кода в ПП
;-------------------------------; фунция расчёта 1-го уравнения
;------ Функции программы ------;
;-------------------------------;
;-------------------------------;
Init_Vars:; функция инициализации переменных
I2: movlw 0x00;
I3: movwf arr_size;
I4: movwf day;
movwf month;
I5: movwf status;
return;
;-------------------------------;
Load_Data:; функция загрузки данных
; массива: размер, адрес начала
LD2: movlw (M*N); W = M * N, определить массив
movwf arr_size; инициализировать размер массива
LD3: movlw array; взятие адреса массива
movwf FSR; загрузка адреса в регистр FSR
return; команда возврата
;-------------------------------;
Load_Data_2:; функция загрузки данных
; массива 2: размер, адрес начала
H2: movlw (M*N); W = M * N, определить маасив
movwf arr_size; инициализировать размер массива
;------- Указание адреса -------; EEPROM
bcf STATUS,6; выбрать банк 00
bcf STATUS,5;
H3: movlw array_2; загрузка начала массива № 2 в W
BANKSEL EEADR; перейти в банк, где находиться
; управляющий регистр EEADR
movwf EEADR; загрузка адреса в регистр EEADR
return; команда возврата
;-------------------------------;
Load_Vars:; функция загрузки значений массива
LV2: movlw D'03';
movwf day; день рождения
LV3: movlw D'11';
movwf month; месяц рождения
return; команда возврата
;-------------------------------;
Load_Vars_2:; функция загрузки значений массива 2
|
;------- Указание данных -------; EERPOM
BANKSEL EEDATA; перейти в банк, где находиться
; управляющий регистр EEDATA
movlw D'1'; загрузка данных в W
movwf EEDATA; запись данных в EEDATA
return; команда возврата
;-------------------------------;
Fill_Arr:; функция заполнения массива № 1
F2: movfw day; загрузка 1-го элемента в W
movwf INDF; запись 1-го элемента
F3: call Cntrl_Size; контроль
F4: btfss status,0; массив заполнен?
goto F5; нет - продолжить
return; да - выход
F5: call Cntrl_Adr; перейти к след. адресу
F6: call Wrt_Arr; запись данных
goto F3; повторить заполнение
return; команда возврата
;-------------------------------;
Fill_Arr_2:; функция заполнения массива № 2
FA2: call Wrt_Arr_2; запись данных
FA3: call Cntrl_Size; контроль размера
bcf STATUS,6; выбор банка 00
bcf STATUS,5;
FA4: btfss status,0; массив заполнен?
goto FA5; нет - продолжить
return; да - выход
FA5: call Cntrl_Adr_2; контроль адреса
BANKSEL EEDATA; выбрать банк для EEDATA
FA6: incf EEDATA; увеличить значение в рег. EEDATA
goto FA2; продолжить заполнение
return; команда возврата
;-------------------------------;
Wrt_Arr:; запись массива по алгоритму:
; 1-ый эл.: ДР
; 2-ой эл.: ДР + МР
; 3-ый эл.: 2-ой + МР
; 4-ый эл.: 3-ый + МР и т.д.
W2: addwf month,W; нет продолжить заполнение!
; W = W + month
W3: movwf INDF; запись элемента из W
return; команда возврата
;-------------------------------;
Wrt_Arr_2:; заполнение массива по алгоритму:
; 1-ый эл.: 1
; 2-ой эл.: 1-ый + 1
; 3-ый эл.: 2-ой + 1
; 4-ый эл.: 3-ый + 1 и т.д.
;------- Запись в EERPOM -------;
BANKSEL EECON1; перейти в банк, где находиться
; управляющий регистр EECON1
E3: bcf EECON1, EEPGD; выбрать EEPROM память данных
bsf EECON1, WREN; разрешить запись в EEPROM память
; данных
bcf INTCON, GIE; запретить прерывания
; обязательные требования
E4: movlw 0x55; записать 55h в регистр EECON2
movwf EECON2;
movlw 0xAA; записать AAh в регистр EECON2
movwf EECON2;
E5: bsf EECON1, WR; инициализировать запись
bsf INTCON, GIE; разрешить прерывания
bcf EECON1, WREN; запретить запись в EEPROM
;--- Работа с EEPROM памятью ---;
E6:
BANKSEL EECON1; перейти в банк, где находиться
; управляющий регистр EECON1
btfsc EECON1, WR; проверить завершение
goto $-1; операции записи
return;
;-------------------------------;
Cntrl_Size:; функция контроля массива:
; размещение в памяти, проверка
; границ
bcf STATUS,6;
bcf STATUS,5;
CS2: decf arr_size,f; уменьшение размера на 1
CS3: btfss STATUS,Z; заполнение завершено?
return; нет - выход
CS4: bsf status,0; заполнение завершено! Подтвердить!
return; команда возврата
;-------------------------------;
Cntrl_Adr:; функция увеличения адреса мас. № 1
|
CA2: incf FSR,f; переход к след. адресу
return; выход
;-------------------------------;
Cntrl_Adr_2:; функция увеличение адреса мас. № 2
BANKSEL EEADR; выбрать банк для EEADR
CB2: incf EEADR; перейти к след. адресу
return; команда возврата
;-------------------------------;
Read_Arr:; функция чтения эл. мас. № 1
bcf STATUS,6; выбрать банк 0
bcf STATUS,5;
RA: movfw INDF; загрузка эл. массива № 1
movwf t_val_1; сохранение
return; команда возврата
;-------------------------------;
Read_Arr_2:; функция чтения эл. мас. № 2
BANKSEL EECON1; выбор банка для EECON1
RD2 bsf EECON1, RD; иниициализация чтения для EEPROM
BANKSEL EEDATA; выбор банка для EEDATA
RD3: movfw EEDATA; загрузка эл. массива № 2 из EEPROM
bcf STATUS,6; выбрать банк 00
bcf STATUS,5;
RD4: movwf t_val_2; сохранение
return;
;-------------------------------;
Calc_Xor:; функция сложения по модулю 2
bcf STATUS,6; выбрать банк 00
bcf STATUS,5;
CX2: call Init_Vars; очистка перем.
CX3: call Load_Data; загрузка данных для мас. № 1
CX4: call Load_Data_2; загрузка данных для мас. № 2
CX5: call Read_Arr; чтение элемента мас. № 1
CX6: call Read_Arr_2; чтение элемента мас. № 2
CX7: xorwf t_val_1,W; сложить "по модулю 2" эл. мас. № 1
; и эл. мас. № 2
CX8: movwf INDF; записать результат на место мас. № 1
CX9: call Cntrl_Size; контроль
CX10: btfss status,0; массив заполнен?
goto CX11; нет - продолжить
return; да - выход
CX11: call Cntrl_Adr; увеличить адрес мас. № 1
CX12: call Cntrl_Adr_2; увеличить адрес мас. № 2
goto CX5; вернуться в начало для повтора
;-------------------------------;
main:; начало основной программы
A2: call Init_Vars; инициализация переменных
A3: call Load_Data; загрузка данных для массива № 1
A4: call Load_Vars; загрузка значений для массива № 1
A5: call Fill_Arr; заполнить массив № 1
A6: call Init_Vars; инициализация переменных
A7: call Load_Data_2; загрузка данных для массива № 2
A8: call Load_Vars_2; загрузка значений для массива № 2
A9: call Fill_Arr_2; заполнить массив № 2
A10: call Calc_Xor; сложить мас. № 1,2 по мод. 2
goto main; перейти на main
END
|
|
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!