Читаем Микроконтроллеры AVR: от простого к сложному полностью

; Подключение 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 и 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

        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; Вывод в порт С содержимого tm

        clr tm; Очистка содержимого tm (tm=0)

        sts RamH,tm; Сохранение в ячейке RamH содержимого tm

        sts RamL,tm

        rcall St45bt; Вызов подпрограммы St45bt

; Скопируем массив из внешней памяти на странице № 2

; (старшие биты адреса внешней памяти AR2 AR1 AR0 = 101)

; во внутреннее ОЗУ микроконтроллера

         clr tm; Очистка содержимого tm (tm=0)

         sts RamH,tm; Сохранение в ячейке RamH содержимого tm

         sts 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 в XL

         Ids XH,RamH

         out PORTB,XL; Вывести в порт В содержимое XL

         nop; Задержка 156 нc

         nop; Задержка 156 нc

         sbi PORTD,Buf1; Установить бит Buf1 порта D

         nop

         nop

         cbi PORTD,Buf1; Сбросить бит Buf1 порта D

         nop

         nop

         out PORTB,XH; Вывести в порт В содержимое ХН

         nop

         nop

         sbi PORTD,Buf2; Установить бит Buf2 порта D

         nop

         nop

         cbi PORTD,Buf2; Сбросить бит Buf2 порта D

         adiw XL,1; Увеличить содержимое пары XH:

         sts RamH,XH; Сохранить содержимое ХН в ячейке RamH

         sts RamL,XL

         ret; Возврат из подпрограммы

; =========

Подпрограмма копирования байта из внутреннего ОЗУ во внешнюю память

DataSt:

         Id tm,Z+

         out PORTB,tm

         nop

         nop

         cbi PORTC,Wr

         nор

         nор

         sbi PORTC,Wr

         ret

; ==========

; Подпрограмма копирования байта из внешней памяти во внутреннее ОЗУ

DataLd:

         clr tm; Очистка tm

         out DDRB,tm; Контакты порта В в режиме входов

         cbi PORTC,Rd; Сбросить бит Rd порта С

         nор

         nор

         in tm,PINB ; Считать данные на контактах порта В в tm

         sbi PORTC,Rd; Установить бит Rd порта С

         St Z+, tm; Сохранить содержимое tm в ячейке ОЗУ

         ser tm; Установить tm

         out DDRB,tm; Все контакты порта В в режиме выходов

         ret

Перейти на страницу:

Все книги серии Библиотека инженера

Похожие книги

Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. Во втором издании существенно переработан текст книги, в экспериментах используются более доступные электронные компоненты, добавлены новые проекты, в том числе с контроллером Arduino.

Чарльз Платт

Радиоэлектроника / Технические науки
Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки
Искусство схемотехники. Том 3 (Изд.4-е)
Искусство схемотехники. Том 3 (Изд.4-е)

Широко известная читателю по предыдущим изданиям монография известных американских специалистов посвящена быстро развивающимся областям электроники. В ней приведены наиболее интересные технические решения, а также анализируются ошибки разработчиков аппаратуры: внимание читателя сосредотачивается на тонких аспектах проектирования и применения электронных схем. На русском языке издается в трех томах. Том 3 содержит сведения о микропроцессорах, радиотехнических схемах, методах измерения и обработки сигналов, принципах конструирования аппаратуры и проектирования маломощных устройств, а также обширные приложения. Для специалистов в области электроники, автоматики, вычислительной техники, а также студентов соответствующих специальностей вузов и техникумов.

Пауль Хоровиц , Уинфилд Хилл

Техника / Радиоэлектроника