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

; Программа BUF_SRAM.asm

; обращение к внешней памяти, запись данных в буферы

; ========================

.INCLUDE "С: \Avr\Try\8515def.inc”

; Вставка содержимого файла 8515def.inc, находящегося

; в директории C: \Avr\Try в нашу программу

.DEF tmp=r16; Регистру r16 присвоить имя tmp

; (значение переменной tmp будет храниться в

; регистре общего назначения г16)

.DEF cnt = r17; Переменная cnt — счетчик цикла

RESET:   IN tmp,MCUCR

             ; Ввод содержимого регистра MCUCR в регистр tmp

             ORI tmp,(1<

             ; Установка бита SRE (режим работы с внешней памятью)

             ; Бит SRW не устанавливаем; (работа без дополнительного цикла ожидания)

             OUT MCUCR,tmp

             ; Вывод содержимого регистра tmp в регистр MCUCR

;=========ЗАГРУЗКА ДАННЫХ В БУФЕРЫ

.EQU wrBuf1=$7FFD

             ; Адрес для записи данных в буфер 1 (по схеме — элемент DD6)

.EQU wrBuf2=$BFFE

             ; Адрес для записи данных в буфер 2 (DD7)

.EQU wrBuf3=$DFFF

             ; Адрес для записи данных в буфер 3 (DD8)

.EQU rdBuf1=$FFFD

             ; Адрес для считывания данных из ячейки, соотв. буферу 1

.EQU rdBuf2=$FFFE

             ; Адрес для считывания данных из ячейки, соотв. буферу 2

.EQU rdBuf3=$FFFF

             ; Адрес для считывания данных из ячейки, соотв. буферу 3

             LDI tmp,$AA; Загрузка константы в tmp

             STS wrBuf1, tmp

; Сохранение содержимого регистра tmp в буфере 1

             LDI tmp, $55; Загрузка константы в tmp

             STS wrBuf2, tmp

             LDI tmp,$71; Загрузка константы в tmp

             STS wrBuf3, tmp

;======ЧТЕНИЕ / ИЗМЕНЕНИЕ ДАННЫХ В БУФЕРАХ

            LDS tmp, rdBuf1

                  ; Передача данных из ячейки с адресом rdBuf1 в регистр tmp

            ORI tmp, (1<<7)+(1<<6)+(1<<5)+(1<<4); Установка битов 4.. 7

            STS wrBuf1, tmp

; Сохранение содержимого регистра tmp в буфере 1

            LDS tmp, rdBuf2

            ORI tmp, 0b11110000

                  ; Установка тех же битов, что и для буфера 1,

                  ; только константа представлена в двоичной форме,

                 ; для обозначения двоичной константы 1111 0000; перед ней ставят символы "ноль” и “Ь”

            STS wrBuf2, tmp

            ; Сохранение содержимого регистра tmp в буфере 2

            LDS tmp, rdBuf3

            ANDI tmp, 0b11110000; сброс тех же битов

            STS wrBuf3, tmp

            ; Сохранение содержимого регистра tmp в буфере 2

; ===== ЗАГРУЗКА В ПАМЯТЬ ПЕРВОГО МАССИВА

.EQU ArSize =10; Размеры массивов

.EQU aArBgn1 =$Е060

            : Используем константу аАrВgn как адрес начальной ячейки для хранения массива 1

            LDI ZL,low(aArBgn1)

            LDI ZH,high(aArBgn1)

            ; Загрузка в регистр Z адреса начала массива 1

            LDI cnt,ArSize; Загрузка в cnt размера массива

            LDI tmp,$FF; Загрузка константы в tmp

ARR1:        ST Z+, tmp;

                 ; Запись содержимого регистра tmp в ячейку памяти,

                 ; адрес которой — в регистре Z,

                 ; с последующим увеличением на 1 адреса в регистре Z

                 ; В первом цикле содержимое tmp запишется

                 ; по адресу aArBgn1 ($Е060), во втором цикле —

                 ; по адресу aArBgn1+1 ($Е061) и т. д.

           INC tmp; Увеличить содержимое tmp на единицу

           DEC cnt; Уменьшить содержимое счетчика циклов на единицу

           BRNE ARR1

; Если бит (флаг) Z в регистре состояния процессора SREG

; не установлен — перейти на команду с меткой ARR1:

; ======ЗАГРУЗКА В ПАМЯТЬ ВТОРОГО МАССИВА

.EQU   аАгВgn2 =$FFFC

           ; Используем константу аАгВgn2 как адрес последней ячейки

           ; для хранения массива 2

           LDI ZL,lоw(аАгВgn2+1)

           LDI ZH,high(aArBgn2+1)

                 ; Загрузка в двухбайтный регистр Z адреса конечного

                 ; элемента массива 2, увеличенного на единицу

           LDI cot,ArSize; Загрузка в cnt размера массива

           LDI tmp,$03; Загрузка константы в tmp

ARR2:        ST -Z, tmp;

                 ; Сначала уменьшается на единицу адрес,

                 ; хранящийся в регистре Z (поэтому в Z загружался

                 ; адрес, увеличенный на единицу), затем по новому

                 ; адресу запишется содержимое регистра tmp

                 ; В первом цикле содержимое tmp запишется; по адресу (аАrВgn2+1)-1, то есть, по адресу аАrВgn2

                 ; во втором цикле — по адресу аАrВgn2-1, и т. д.

           DEC tmp; Уменьшить содержимое tmp на единицу

           DEC cnt; Уменьшить содержимое счетчика циклов на единицу

           BRNE ARR2

; Если бит (флаг) Z в регистре состояния процессора SREG

; не установлен — перейти на команду с меткой ARR2:

STOP: RJMP STOP; Зацикливание программы

                          ; (перейти на команду с меткой STOP:)

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

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

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

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

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

Чарльз Платт

Радиоэлектроника / Технические науки
PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

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

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

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

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