тяжки порту A)
out DDRB, temp; Записуємо temp в DDRB (порт B на висновок)
;----------------------------- Ініціалізація компаратора -----------------------
ldi temp, 0x80 ACSR, temp; Вимкнення компаратора
;---------------------------- Перевірка запису в EEPROM ------------------------
; Оскільки пам'ять EEPROM призначена для довготривалого зберігання
; даних, то ми можемо записати в неї масив один раз, а потім,
; перевіряти записаний чи масив при повторному запуску програми. Якщо
; виявиться, що масив не збережений, то виконається перехід в цикл
; записи масиву, якщо записаний, то відразу в цикл читання
ldi addres, 0x08; Записуємо в регістр addres початок сегмента EEPROM
mm:
cli; Забороняємо всі переривання
sbic EECR, EEWE; Перевіряємо готовність EEPROM
rjmp mm; Якщо не готовий, то чекаємо (переходимо на мітку mm)
out EEAR, addres; Записуємо адреса в регістр адреси
sbi EECR, EERE; Встановлюємо біт дозволу читання
in data, EEDR; Розміщуємо прочитаний байт в регістр data ??p>
cpi data, 128; Порівнюємо з 128
breq start; Якщо одно, т.е якщо масив вже записаний в EEPROM,
; то переходимо на мітку start, якщо не дорівнює, то
; переходимо на мітку Write
;---------------------------- Запис масиву в EEPROM --------------------------
Write:
ldi addres, bufr; Записуємо в регістр addres початок сегмента EEPROM
ldi ZH, high (mas * 2); У реєстрову пару Z записуємо старший і
ldi ZL, low (mas * 2); молодший байт початкової адреси масиву
m8:
lpm data, Z +; Завантаження з постинкрементом в r17 (temp1)
; вмісту комірки, адреса якої зберігається
; в реєстрової парі Z
nn1:
cli; Забороняємо всі переривання
sbic EECR, EEWE; Перевіряємо готовність EEPROM
rjmp nn1; Якщо не готовий, то чекаємо
out EEAR, addres; Записуємо адреса в регістр адреси
out EEDR, data; Записуємо дані в регістр даних
sbi EECR, EEMWE; Встановлюємо біт дозволу запису
sbi EECR, EEWE; Встановлюємо біт записи
inc addres; Збільшуємо адресу в EEPROM
inc count; Збільшуємо значення лічильника на одиницю
cpi count, 64; Порівнюємо з 64
brne m8; Якщо не одно, то переходимо на мітку m8, якщо
; одно, тобто якщо в EEPROM записалися всі 64
; числа масиву, то переходимо на мітку start
;--------------------------------- Читання з EEPROM -------------------------------
start:
ldi count, 0; Обнуляємо лічильника
ldi addres, bufr; Записуємо в регістр addres початок сегмента EEPROM
; -------------------------------- Перша чверть синусоїди ------------------------------
m1:
cli; Забороняємо всі переривання
sbic EECR, EEWE; Перевіряємо готовність EEPROM
rjmp m1; Якщо не готовий, то чекаємо (переходимо на мітку m1)
out EEAR, addres; Записуємо адреса в регістр адреси
sbi EECR, EERE; Встановлюємо біт дозволу читання
in data, EEDR; Розміщуємо прочитаний байт в регістр data ??p>
inc addres; Збільшуємо адресу в EEPROM на одиницю
nop; Немає операції
out PortB, data; Висновок поточного значення синусоїди в порт PB
inc count; Збільшуємо значення лічильника на одиницю
cpi count, 64; Порівнюємо з 64
brne m1; Якщо не одно 64, то переходимо на мітку m1, якщо
; одно 64, тобто якщо з EEPROM були прочитані
; і відправлені на порт B всі 64 числа починаючи з
; першого числа масиву, записаного в EEPROM і
; закінчуючи останнім, то переходимо на мітку m2
; --------------------...