Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Основные теоретические сведения
Микроконтроллер имеет три независимых адресных пространства с линейной организацией: память программ, ОЗУ и ППЗУ. Поскольку каждая машинная команда имеет длину два байта, память программ (рис.1.а) организована в виде линейной последовательности шестнадцатиразрядных слов. Учитывая организацию памяти программ, адрес может принимать значение от 0 до 4095 ($FFF в шестнадцатеричной записи).
а) б) в) Рис.1 – Распределение памяти микроконтроллера AT90S8535
Изменение содержимого памяти программ в изучаемом микроконтроллере возможно только внешним устройством (программатором). При этом допускается до 1000 циклов перепрограммирования. Адресное пространство ОЗУ (рис.1 б) имеет сложную структуру, поскольку включает в себя адреса регистров общего назначения, адреса периферийных устройств и адреса ячеек оперативной памяти. Поскольку ОЗУ является статическим, доступ к нему происходит с высокой скоростью. ППЗУ (рис.1 в) представляет собой постоянную память данных с возможностью электрического перепрограммирования. Изменение ППЗУ возможно как внешним программатором, так и самим контроллером в процессе выполнения программы. Доступ к ППЗУ осуществляется сравнительно медленно. Допускается до 10000 циклов перепрограммирования ППЗУ. Адресация регистров общего назначения и регистров периферийных устройств возможна как по абсолютным адресам (указанным на рис.2 б), так и по относительным, т.е. когда блок периферийных устройств имеет как бы собственное адресное пространство. В этом случае адреса будут распределяться, как показано на рис.2. Рис.2. – Относительная адресация РОН и периферийных устройств.
Поскольку микроконтроллеры архитектуры AVR построены на основе RISС–архитектуры, доступ к различным областям памяти осуществляется посредством различных команд. Для пересылки данных между регистрами общего назначения используется команда MOV. Загрузка значения в регистр общего назначения выполняется командой LDI. Для обмена данными между регистрами общего назначения и регистрами управления периферийными устройствами принято использовать команды IN (считывание данных из регистра периферийного устройства) и OUT (пересылка данных в регистр периферийного устройства). Для доступа к ячейкам ОЗУ используются команды LD (загрузить данные из ячейки ОЗУ) и ST (сохранить данные в ячейке ОЗУ). Для доступа к ячейкам ППЗУ используется специальная процедура. ;*************************************************************** .include "8535def.inc"
.def tflags = R15 ;регистр временного хранения флагов .def temp1 = R16 ;рабочий регистр основной программы .def temp2 = R17 ;рабочий регистр в подпрограммах .def symvol = R18 ;регистр для данных .def counter = R19 ;счетчик индексов .def tempr = R25 ;дополнительный временный регистр
;------------------------сегмент данных - описание переменных .Dseg varD: .BYTE 8 ;резервируем массив данных в ОЗУ ;------------------------завершение сегмента данных ;------------------------сегмент кода - начало программы .Cseg ;-----------------------описание векторов прерываний .org 0x000 rjmp H_RESET ;Reset Handler ;-----------------------завершение описания векторов прерываний ;------------------------начало секции основной программы .org 0x16 H_RESET: ;------------------------начало инициализации стека ldi temp1,low(RAMEND) out SPL,temp1 ldi temp1,high(RAMEND) out SPH,temp1 ;------------------------окончание инициализации стека ;------------------------обрабатываем массив данных из памяти программ clr counter ;обнуляем счетчик ldi ZH,high(message1<<1) ;загружаем начальный адрес ldi ZL,low(message1<<1) ;массива в памяти программ sei ;запрещаем прерывания mess1: lpm symvol,Z+ ;загружаем байт из массива в памяти rcall obr_sym ;обрабатываем в подпрограмме inc counter ;увеличиваем счетчик на единицу cpi counter,17 ;проверяем количество brlo mess1 ;если не все, то повторяем цикл ;------------------------завершение обработки массива данных из памяти программ ;------------------------запись данных в ОЗУ ldi tempr,0x01 ;загружаем значение для первой ячейки ОЗУ ldi temp2,0x03 clr counter ;обнуляем счетчик ldi ZH,high (varD) ;загружаем начальный адрес ОЗУ с данными ldi ZL,low (varD) bz: st Z+,tempr ;сохраняем данные в ОЗУ с указанным адресом add tempr,temp2 ;увеличиваем значение, загружаемое в ОЗУ inc counter ;увеличиваем значение счетчика cpi counter,8 ;проверяем количество записанных разрядов brlo bz ;если записаны не все, то повторяем цикл записи ;--------------------- завершение записи данных в ОЗУ rcall ppzu ;вызываем программу для переписывания ;данных из ОЗУ в ППЗУ
;------------------------начало подпрограммы обработки символа obr_sym: nop ret ;obr_sym ;------------------------завершение подпрограммы обработки символа
;------------------------подпрограмма сохранения данных из ОЗУ в ППЗУ ppzu: cli ;запрещаем прерывания ldi YL,0x00 ;загружаем начальный адрес ППЗУ ldi YH,0x00 ldi ZH,high (varD) ;загружаем начальный адрес ОЗУ с данными ldi ZL,low (varD) bgn: sbic eecr,EEWE rjmp bgn ;ожидаем готовность ППЗУ out EEARL,YL ;устанавливаем адрес ППЗУ out EEARH,YH ld tempr,Z+ ;загружаем данные из ОЗУ с указанным адресом out EEDR,tempr ;после чего увеличиваем значение адреса ОЗУ sbi EECR,EEMWE sbi EECR,EEWE inc YL ;увеличиваем значение адреса ППЗУ cpi YL,8 ;проверяем количество записанных разрядов brlo bgn ;если записаны не все, то повторяем цикл записи sei ;разрешаем прерывания ret ; ppzu ;выходим из подпрограммы ;------------------------завершение подпрограммы сохранения данных из ОЗУ в ППЗУ
message1: .db 0x50,0x65,0xB6,0xB8,0xBC,0x20,0x63,0xC0,0xB5,0xBF,0x61,0x20,0x20,0x20,0x20,0x20,0x20; ;***************************************************************
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-05-29; просмотров: 162. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |