------- Друга чверть синусоїди ---------------------------
m2:
cli; Забороняємо всі переривання
sbic EECR, EEWE; Перевіряємо готовність EEPROM
rjmp m2; Якщо не готовий, то чекаємо (переходимо на мітку m2)
out EEAR, addres; Записуємо адреса в регістр адреси
sbi EECR, EERE; Встановлюємо біт дозволу читання
in data, EEDR; Розміщуємо прочитаний байт в регістр data ??p>
dec addres; Зменшуємо адресу в EEPROM на одиницю
nop; Немає операції
out PortB, data; Висновок поточного значення синусоїди в порт PB
dec count; Зменшуємо значення лічильника на одиницю
cpi count, 0; Порівнюємо з 0
brne m2; Якщо не дорівнює нулю, то переходимо на мітку m2,
; якщо дорівнює нулю, тобто якщо з EEPROM були
; прочитані і відправлені на порт B всі 64 числа,
; (читання масиву з кінця), то переходимо на мітку m3
; ---------------- ------------ Третя чверть синусоїди ---------------------------
m3:
cli; Забороняємо всі переривання
sbic EECR, EEWE; Перевіряємо готовність EEPROM
rjmp m3; Якщо не готовий, то чекаємо (переходимо на мітку m3)
out EEAR, addres; Записуємо адреса в регістр адреси
sbi EECR, EERE; Встановлюємо біт дозволу читання
in data, EEDR; Розміщуємо прочитаний байт в регістр data ??p>
inc addres; Збільшуємо адресу в EEPROM на одиницю
com data; Виконуємо побітного інверсію регістра data для
; отримання негативної напівхвилі синусоїди
out PortB, data; Висновок поточного значення регістра data в порт PB
inc count; Збільшуємо значення лічильника на одиницю
cpi count, 64; Порівнюємо з 64
brne m3; Якщо не одно 64, то переходимо на мітку m3, якщо
; одно 64, тобто якщо з EEPROM були прочитані,
; інвертовані і відправлені на порт B всі 64 числа
; починаючи з першого числа масиву, записаного в
; EEPROM і закінчуючи останнім, то переходимо на
; мітку m4
;------------------------ Четверта чверть синусоїди ------------------------
m4:
cli; Забороняємо всі переривання
sbic EECR, EEWE; Перевіряємо готовність EEPROM
rjmp m4; Якщо не готовий, то чекаємо (переходимо на мітку m4)
out EEAR, addres; Записуємо адреса в регістр адреси
sbi EECR, EERE; Встановлюємо біт дозволу читання
in data, EEDR; Розміщуємо прочитаний байт в регістр data ??p>
dec addres; Зменшуємо адресу в EEPROM на одиницю
com data; Виконуємо побітного інверсію регістра data для
; отримання негативної напівхвилі синусоїди
out PortB, data; Висновок поточного значення регістра data в порт PB
dec count; Зменшуємо значення лічильника на одиницю
cpi count, 0; Порівнюємо з 0
brne m4; Якщо не дорівнює нулю, то переходимо на мітку m4,
; якщо дорівнює нулю, тобто якщо з EEPROM були
; прочитані, інвертовані і відправлені на порт 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
Висновок
У результаті курсового проектування були створені три робочі програми генератора сигналу синусоїдальної форми з використанням різних видів пам'яті мікроконтролера ATtiny2313.
мікрокон...