Код программы:
;
******************************************************
;
BASIC .ASM template file for AVR
;
******************************************************
;
Define here the variables
;
.include
"C:\VMLAB\include\m128def.inc""; определение
библиотеки
МК
;ATmega128, при
условии
расположения
программы
VMLAB на
;локальном
диске
С
.def
temp = r20
reset:
; начальная метка
rjmp
Start ;Переход на метку Start основной
программы
reti
; Addr $01
reti
; Addr $02
reti
; Addr $03 ;Вектора прерываний МК ATmega128.
reti
; Addr $04 ;Приведены вектора с адреса
$01 по адрес $10.
reti
; Addr $05 ;Полностью вектора прерываний
представлены
reti
; Addr $06 ;в приложении с
назначением прерываний
reti
; Addr $07 ;(внешних и внутренних).
reti
; Addr $08
reti
; Addr $09
reti
; Addr $0A
reti
; Addr $0B
reti
; Addr $0C
reti
; Addr $0D
reti
; Addr $0E
reti
; Addr $0F
reti
; Addr $10
start:
ldi
temp,high(RAMEND) ; Установка указателя стека
в конце ОЗУ в старший байт
out
SPH,temp
ldi
temp,low(RAMEND) ; Установка указателя стека
в конце ОЗУ в младший байт
out
SPL,temp
.include
"New.asm"
.exit
Код подпрограммы:
ldi
r16,$14
ldi
r17,01
ldi
r18,00
EEPROM_write:
;
Ожидаем окончание предыдущей записи
sbic
EECR,EEWE
rjmp
EEPROM_write
;
Записываем адрес (r18:r17) в адресный регистр
ЭСППЗУ
out
EEARH, r18
out
EEARL, r17
;
Записываем данные (r16) в регистр данных
ЭСППЗУ
out
EEDR,r16
;
Записывает лог. 1 в EEMWE
sbi
EECR,EEMWE
;
Запуск записи в ЭСППУ установкой EEWE
sbi
EECR,EEWE
EEPROM_read:
;
Ожидание завершения предыдущей записи
sbic
EECR,EEWE
rjmp
EEPROM_read
;
Установка адреса (r18:r17) в адресном
регистре
out
EEARH, r18
out
EEARL, r17
;
Запуск чтения ЭСППЗУ путем установки
EERE
sbi
EECR,EERE
;
Считывание данных из регистра данных
ЭСППЗУ
in
r20,EEDR
Выполнение программы:







12