close

Вход

Забыли?

вход по аккаунту

?

Микровпроцессоры лаба

код для вставки
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования «Вологодский государственный
технический университет»
Кафедра ИСиТ
Микропроцессорные системы
Лабораторная работа №5
Изучение энергонезависимой памяти данных EEPROM.
Выполнили:
студенты группы ИТ-41
Кушева Анна
Логинова Юлия
Проверил:
преподаватель
Кузнецов М.С.
Вологда
2012
Задание 1: Записать в память EEPROM по адресу $0030 число $5B. Считать
обратно из ячейки EEPROM байт данных и вывести его на порт C.
Задание 2: Последовательно по адресам от $000 до $0FF памяти EEPROM
запись числа $20, $21, $22 и т.д. Считать содержимое памяти EEPROM из
микроконтроллера в персональный компьютер и проверить содержимое
данных.
Задание 3: Последовательно запись числа в обратном порядке от $FF до $00
во вторую половину памяти в EEPROM (с адреса $100 по $1FF).
Задание 4: После выполнения заданий №2 и №3 разрешить внешнее
прерывание INT0 (по заднему фронту). При вызове INT0 по очереди
считывать по одному байту данных EEPROM и передавать его через порт C.
Задание 5: Увеличить на $15 содержимое ячеек памяти EEPROM по адресам
$20...$40.
Задание 6: Запрограммировать fuse-бит EESAVE (Preserve EEPROM memory
through the Chip Erase cycle ) равным 0. Очистить кристалл ATmega16 и затем
проконтролировать содержимое памяти EEPROM. Запрограммировать fuseбит EESAVE равным 1, а затем снова стереть кристалл и проконтролировать
память EEPROM.
;Лабораторная работа №5. ;Микропроцессорные системы.
.include "m16def.inc" ;Подключение файла для м.к. ATmega16
.cseg ;Переход в сегмент программного кода
.org $0000 ;Установка адреса
jmp Start ;Переход на начало основной программы
;
;В следующих лабораторных работах по адресам с $0002
;по INT_VECTORS_SIZE будут находиться вектора прерываний!
;
;Константа INT_VECTORS_SIZE = 42($2A) и определена в m16def.inc!
.org INT_VECTORS_SIZE ;Установка адреса
Start:
cli ;Глобальное запрещение прерываний!
;Отмена работы сторожевого таймера:
wdr
ldi R16, 0b00011000
out WDTCR, R16 ;Установка битов WDTOE и WDE в рег. WDTCR
ldi R16, 0b00010000
out WDTCR, R16 ;Очистка бита WDE в рег. WDTCR
;Установка указателя стека:
ldi R16, Low (RamEnd) ;Константа RamEnd = 0x045f и
ldi R17, High(RamEnd) ;определена в m16def.inc
out SPL, R16 ;SPL и SPH - регистры указателя стека.
out SPH, R17 ;Адреса SPL и SPH определены в m16def.inc.
;Отмена работы сторожевого таймера и установка указателя стека
;необходимы для всех последующих программ!
;
;Задание №1:
;/- Процедура записи одного байта памяти EEPROM --------------/
;Ждем пока выполнится запись байта:
NoFinishWriteEEPROM1:
sbic EECR, EEWE
rjmp NoFinishWriteEEPROM1
;Запись адреса для записи байта в память EEPROM:
ldi ZL, Low ($0030) ;R30 <- $30
ldi ZH, High($0030) ;R31 <- $00
out EEARH, ZH
out EEARL, ZL
;Установка данных для записи байта в память EEPROM
ldi R16, $5B
out EEDR, R16
;Инициализация записи:
sbi EECR, EEMWE ;Разрешение разрешения
sbi EECR, EEWE ;Разрешение (начало) записи
;Ждем пока выполнится запись байта:
NoFinishWriteEEPROM2:
sbic EECR, EEWE
rjmp NoFinishWriteEEPROM2
;/- Процедура чтения одного байта памяти из EEPROM -----------/
;Ждем пока выполнится запись байта:
NoFinishWriteEEPROM3:
sbic EECR, EEWE
rjmp NoFinishWriteEEPROM3
;Запись адреса для записи байта в память EEPROM:
ldi ZL, Low ($0030)
ldi ZH, High($0030)
out EEARH, ZH
out EEARL, ZL
;Инициализация записи:
sbi EECR, EERE ;Разрешение чтения
;Чтение данных из EEDR:
in R16, EEDR
mov R17, R16
;Настройка порта C на вывод данных
ldi R16, 0b11111111
out PortC, R16 ;Предварительно выключаем все светодиоды
ldi R16, 0b11111111
out DDRC, R16 ;Настраиваем все линии на вывод данных
;Выводим на порт C прочитанное из EEPROM число
com R17
out PortC, R17
;Задание №2:
;Начальные условия:
ldi ZL, Low ($0000);Начальный адрес
ldi ZH, High($0000)
ldi R20, $20 ;Начальные данные
CycleTask2:
;Проверка на выход из цикла:
ldi R16, Low ($100)
ldi R17, High($100)
cp ZL, R16
cpc ZH, R17
brcc EndCycleTask2
;Тело цикла:
mov R16, R20
call fWriteByteEEPROM
adiw ZH:ZL, 1
inc R20
rjmp CycleTask2
EndCycleTask2:
;
;Задание №3:
;Начальные условия:
ldi ZL, Low ($0100);Начальный адрес
ldi ZH, High($0100)
ldi R20, $FF ;Начальные данные
CycleTask3:
;Проверка на выход из цикла:
ldi R16, Low ($200)
ldi R17, High($200)
cp ZL, R16
cpc ZH, R17
brcc EndCycleTask3
;Тело цикла:
mov R16, R20
call fWriteByteEEPROM
; adiw ZL, 1
subi ZL, Low (-1)
sbci ZH, High(-1)
dec R20
rjmp CycleTask3
EndCycleTask3:
;Задание №4:
EndReadTask2:
ldi XL, Low(256)
ldi XH, High(256)
ldi R20, 0xFF
ldi R21, 0x00
ExtInterrupt0:
ldi R16, Low (512)
ldi R17, High(512)
cp R20, R16
cpc R21, R17
brcc EndReadTask2
;1. Ожидание готовности EEPROM:
WaitReadyEEPROM2:
sbic EECR, EEWE ;Ждем, когда EEWE = 0 !!!
rjmp WaitReadyEEPROM2
;2. Запись адреса в EEARH:EEARL:
out EEARH, XH
out EEARL, XL
;3. Установка "1" бита EERE регистра EECR:
sbi EECR, EERE
;4. Чтение данных из EEDR:
in R16, EEDR
com R16
out PortC, R16
;Изменение условий для след. цикла:
adiw XH:XL, 1
subi R20, Low (1)
sbci R21, High(1)
reti
;/- Функция записи одного байта в EEPROM ---------------/
;ZH, ZL - адресс EEPROM, R16 - данные для записи
fWriteByteEEPROM:
;Ожидание готовности EEPROM для записи данных:
fWaitReadyWriteByteEEPROM1:
sbic EECR, EEWE
rjmp fWaitReadyWriteByteEEPROM1
;Запись адреса:
out EEARH, ZH
out EEARL, ZL
;Запись данных:
out EEDR, R16
;Инициализация непосредственно записи:
sbi EECR, EEMWE ;Разрешение записи
sbi EECR, EEWE ;Начало записи
;Ждем 8,5мл.сек. пока будет выполнятся запись
fWaitReadyWriteByteEEPROM2:
sbic EECR, EEWE
rjmp fWaitReadyWriteByteEEPROM2
ret
;;Задание №5:
;Начальные условия:
ldi ZL, Low ($0020);Начальный адрес
ldi ZH, High($0020)
lds R18, $0020
ldi R20, $15
add R20, R18
CycleTask4:
;Проверка на выход из цикла:
ldi R16, Low ($040)
ldi R17, High($040)
cp ZL, R16
cpc ZH, R17
brcc EndCycleTask4
;Тело цикла:
mov R16, R20
call fWriteByteEEPROM
adiw ZH:ZL, 1
inc R20
rjmp CycleTask4
EndCycleTask4:
;
;
;Бесконечный цикл:
Cycle: ;При завершения лабораторной работы необходимо
nop ;зациклить программу!!!
nop
rjmp Cycle
;
Документ
Категория
Без категории
Просмотров
16
Размер файла
21 Кб
Теги
245950
1/--страниц
Пожаловаться на содержимое документа