nn4,
; якщо одно 64, тобто якщо з ОЗУ були
; прочитані і відправлені на порт B всі 64 числа,
; починаючи з останнього числа масиву, записаного в
; ОЗУ і закінчуючи першим, то виконується
; перехід на мітку start
rjmp start
; ------------------- Масив значень чверті синусоїди -----------------
; Масив складається з 64 чисел, тобто одна чверть синусоїди будується за
; 64-ем точкам
mas:
.db128,131,134,137,140,144,147,150,153,156,159,162,165,168,171,174,177,180,182,185,188,191,194,196,199,201,204,206,209,211,214,216,218,220,222,224,226,228,230,232,234,236,237,239,240,242,243,244,246,247,248,249,250,251,251,252,253,253,254,254,254,255,255,255
. 3 Зберігання значень синусоїди в незалежній пам'яті (EEPROM)
Постійний запам'ятовуючий пристрій EEPROM призначене для зберігання даних, записаних при програмуванні мікроконтролера і одержуваних в процесі виконання програми. При виключенні напруги живлення дані зберігаються. Комірка пам'яті містить 8 розрядів. Ємність EEPROM мікросхеми ATtiny2313 становить 128 байт.
EEPROM має відокремлене адресний простір. При зверненні до EEPROM адреса записується в регістр адреси EEAR. Байт, призначений для запису, заноситься в регістр даних EEDR. Байт, отриманий при читанні, надходить в цей же регістр. Для управління процедурами запису і читання використовується регістр управління EECR.
Для запису байта в EEPROM необхідно:
) записати адресу в регістр адреси;
) записати байт в регістр даних;
) встановити в одиничний стан розряд EEMWE регістра EECR
) при EEMWE=1 встановити в одиничний стан розряд EEWE регістра EECR
Процедура запису виконується в залежності від величини напруги живлення за 2,5 - 4 мс. При завершенні запису розряд EEWE регістра EECR апаратно скидається в нульовий стан.
Розряд EEMWE зберігає одиничне стан протягом 4-ох тактів після установки і апаратно скидається в нульовий стан.
Для читання байта з EEPROM необхідно:
) записати адресу в регістр адреси;
) встановити в одиничний стан розряд EERE регістра EECR.
Лічений байт надходить у регістр даних. Розряд EERE регістра EECR апаратно скидається в нульовий стан.
; ***************************************** *******************
; Генератор сигналу синусоїдальної форми
; Зберігання значень синусоїди в незалежній пам'яті (EEPROM)
; Мікроконтролер ATtiny2313
; ***************************************** ********************
. nolist; Скасовуємо лістинг всіх під'єднуваних файлів
. include tn2313def.inc raquo ;; Приєднання файлу описів
. list; Дозвіл лістінга.def data=r17
. def addres=r18; Покажчик адреси в EEPROM
. def count=r19; Регістр передачі даних
. def temp=r20; Головний робочий регістр
. def data=r21; Регістр передачі даних
; ------------------ Резервування осередків пам'яті (EEPROM) --------------------
. eseg; Вибираємо сегмент EEPROM
. org 0x08; Встановлюємо поточний адреса сегмента
bufr: .byte 64; Буфер для зберігання масиву
; -------------------------- Початок програмного коду -----------------------------
. cseg; Вибір сегменту пам'яті команд
. org 0; Встановлення лічильника команд в 0
; --------------------------- Ініціалізація стека ----------------------------------- temp, RAMEND; Вибір адреси вершини стекаSPL, temp; Запис його в регістр стека
; ----------------------- Ініціалізація портів введення - виведення -------------------
ldi temp, 0; Записуємо нуль в регістр temp
out DDRD, temp; Записуємо цей нуль в DDRD (порт D на введення)
out DDRA, temp; Записуємо нуль в DDRA (порт A на введення)
ldi temp, 0xFF; Записуємо число $ FF в регістр temp
out PortD, temp; Записуємо temp в PortD (включаємо підтяжки порту D)
out PortA, temp; Записуємо temp в PortA (включаємо під...