; Подключение 03У512К к AT90S8535
;================================
.include "с: \atmel\8535def.inc"
.equ RamH =$16а
; Адрес ячейки внутренней SRAM, хранящей; старший байт адреса страницы внешней памяти
.equ RamL =$16b
; Адрес ячейки внутренней SRAM, хранящей; младший байт адреса внешней памяти
; Три старших бита адреса внешней памяти
; (номер страницы внешней памяти):
.equ Ar0 =PC0
.equ Ar1 =PC1
.equ Ar2 =PC2
.equ Wr =PC4
; Управление записью во внешнюю память.equ Rd =PC3
; Управление считыванием из внешней памяти.equ Buf1 =PD3
; Управление записью в буфер 1.equ Buf2 =PD4
; Управление записью в буфер 2.equ aADC =$60
; Адрес для переноса массива из внешней памяти во внутреннюю SRAM.equ aPack =$Ь0
; Адрес 45-байтового массива во; внутренней SRAM микроконтроллера.def tm =r16
.def cnt =r19
;====
RESET:
ldi tm, (1<
out PORTC,tm
; на линиях WR и RDldi tm,$ff
; контакты порта С -out DDRC,tm
; в режиме выходовclr tm
; На линиях порта D низкие уровниout PORTD,tm
; (в том числе BUF1, BUF2=0)ldi tm,$ff
; контакты порта D -out DDRD,tm
; в режиме выходовser tm
; Установка регистра tm (tm=$ff)out DDRB,tm
; вывод в порт DDRB содержимого tm; контакты порта В — в режиме выходов
ldi tm,low(RAMEND)
; Стек — начиная с конца внутренней SRAM
out SPL,tm
ldi tm,high(RAMEND)
out SPH,tm
; Загрузка во внутреннее ОЗУ микроконтроллера,
; начиная с ячейки с адресом аРаск
; 45-ги байтов массива: $20, $21, $22….
ldi XL,low(aPack)
ldi XH,high(aPack)
ldi tm,$20
ldi cnt,45
StRAM:
st X+,tm
inc tm
dec cnt
brne StRAM
; Перепишем этот массив во внешнюю память на страницу № 2
; (старшие биты адреса внешней памяти AR2 AR1 AR0 = 101)
in tm,PORTC
andi tm, $ff-((1<
; очистка битов AR2, AR1, AR0
; 1111 1000 = $ff-@K0D = ((K ori tm, (1<
; Установка бита AR1(aдpec страницы 010
; (страница № 2))
out PORTC,tm
; Вывод в порт С содержимого tmclr tm
; Очистка содержимого tm (tm=0)sts RamH,tm
; Сохранение в ячейке RamH содержимого tmsts RamL,tm
rcall St45bt
; Вызов подпрограммы St45bt; Скопируем массив из внешней памяти на странице № 2
; (старшие биты адреса внешней памяти AR2 AR1 AR0 = 101)
; во внутреннее ОЗУ микроконтроллера
clr tm
; Очистка содержимого tm (tm=0)sts RamH,tm
; Сохранение в ячейке RamH содержимого tmsts RamL,tm
rcall DOutPrp
cycle: rjmp cycle
; Подпрограммы:
; ==============
Копирование массива из внутренней во внешнюю память
St45bt:
ldi ZL,low(aPack)
ldi ZH,high(aPack)
ldi cnt,45
mSt45:
rcall SetAddr
rcall DataSt
dec cnt
brne mSt45
ret
; ======
; Подпрограмма копирования 45 байтов из внешней памяти во внутреннее ОЗУ
DOutPrp:
ldi ZL,low(aADC)
ldi ZH,high(aADC)
ldi cnt,45
DOut1:
rcall SetAddr
rcall DataLd
dec cnt
brne DOut1
ret
; ========
; Подпрограмма установки
SetAddr:
Ids XL,RamL
; Скопировать содержимое ячейки RamL в XLIds XH,RamH
out PORTB,XL
; Вывести в порт В содержимое XLnop
; Задержка 156 нcnop
; Задержка 156 нcsbi PORTD,Buf1
; Установить бит Buf1 порта Dnop
nop
cbi PORTD,Buf1
; Сбросить бит Buf1 порта Dnop
nop
out PORTB,XH
; Вывести в порт В содержимое ХНnop
nop
sbi PORTD,Buf2
; Установить бит Buf2 порта Dnop
nop
cbi PORTD,Buf2
; Сбросить бит Buf2 порта Dadiw XL,1
; Увеличить содержимое пары XH:sts RamH,XH
; Сохранить содержимое ХН в ячейке RamHsts RamL,XL
ret
; Возврат из подпрограммы; =========
Подпрограмма копирования байта из внутреннего ОЗУ во внешнюю память
DataSt:
Id tm,Z+
out PORTB,tm
nop
nop
cbi PORTC,Wr
nор
nор
sbi PORTC,Wr
ret
; ==========
; Подпрограмма копирования байта из внешней памяти во внутреннее ОЗУ
DataLd:
clr tm
; Очистка tmout DDRB,tm
; Контакты порта В в режиме входовcbi PORTC,Rd
; Сбросить бит Rd порта Сnор
nор
in tm,PINB
; Считать данные на контактах порта В в tmsbi PORTC,Rd; Установить бит Rd порта С
St Z+, tm; Сохранить
содержимое tm в ячейке ОЗУser tm
; Установить tmout DDRB,tm
; Все контакты порта В в режиме выходовret