Выбрать главу

Установка резистора R43, подключенного к источнику питания +5 В, создает в описанной ситуации на линии RD высокий уровень и переводит выходы Ю0…Ю7 микросхемы памяти в высокоимпедансное состояние, исключая подобную ситуацию, резистор R44 устраняет возможность хаотичной записи при программировании. В обычном режиме работы эти резисторы не мешают микроконтроллеру управлять микросхемой памяти.

Программа записи данных в ОЗУ 512 Кбайт

В рабочей программе, взятой за основу для нашего примера, АЦП микроконтроллера производил группу преобразований, результаты которых записывались во внутреннюю оперативную память микроконтроллера. Результаты группы преобразований обрабатывались и также записывались во внутреннюю оперативную память в виде массива размером в 45 байтов, начиная с ячейки с адресом аРаск. Этот массив переносился во внешнюю память для хранения. АЦП выполнял новую группу преобразований, которые тем же способом обрабатывались, а очередной массив размером в 45 байтов добавлялся во внешнюю память. Процесс продолжался до заполнения страницы внешней памяти (64 Кбайт), после чего вся информация со страницы внешней памяти через микроконтроллер передавалась в компьютер.

Представленная программа включает в себя подпрограммы, взятые из рабочей программы, оттуда же заимствовано распределение внутренней оперативной памяти микроконтроллера, а также имена констант и переменных.

Создадим новую директорию c: \Avr\Ram512, поместим в нее файл 8535def.inc, полученный при распаковке файла avr000.exe (ищите его там же, где распаковался файл 8515def.inc). В директории c: \Avr\Ram512 создадим проект Ram512 с новым файлом программы Ram512.asm, в который следует перенести следующую программу.

; Подключение 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<<Wr)+(1<<Rd); Устанавливаем высокие уровни

        out PORTC,tm; на линиях WR и RD

        ldi 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