Программа для реализации на микроконтроллере AVR ATmega128 (Вычисление разностного уравнения на микроконтроллере ATmega 128)
Описание файла
Файл "Программа для реализации на микроконтроллере AVR ATmega128" внутри архива находится в папке "Вычисление разностного уравнения на микроконтроллере ATmega 128". Документ из архива "Вычисление разностного уравнения на микроконтроллере ATmega 128", который расположен в категории "". Всё это находится в предмете "элементы электронной и микропроцессорной техники" из 8 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "элементы электронной и микропроцессорной техники" в общих файлах.
Онлайн просмотр документа "Программа для реализации на микроконтроллере AVR ATmega128"
Текст из документа "Программа для реализации на микроконтроллере AVR ATmega128"
;Программа реализует разностное уравнение:
; y[n]=g[n-2]-1,08*y[n-1]+0,2*y[n-2]
; y[n]=a*g[n-2]-b*y[n-1]+c*y[n-2]
; y[n]/8=8*g[n-2]-9*y[n-1]+2*y[n-2]
;на микроконтроллере ATmega128
;*******************************************************************************************************
device ATmega128
.nolist ; отключение создания листинга при ассемблировании
.include "m128def.inc" ; вставляем в файл содержимое файла m128def.inc (файл
; определения регистров МК)
.list ; разрешаем создание листинга файла
.CSEG ;определяем начало сегмента кода
;*******************************************************************************************************
.def tmp = r16
.def a = r17 ;a=8 // 1*8=8
.def b = r18 ;b=9 // 1.08*8=9
.def c = r19 ;c=2 // 0.2*8=2
.def YH = r20 ;старший байт искомой величины Y
.def YL = r21 ;младший байт искомой величины Y
.def Y1 = r22 ;регистр, в котором хранится y[n-1]
.def Y2 = r23 ;регистр, в котором хранится g[n-2]
.def G = r24 ;регистр, в котором хранится g[n] (входной сигнал
; после преобразовния АЦП)
.def G1 = r25 ;регистр, в котором хранится g[n-1]
.def G2 = r26 ;регистр, в котором хранится g[n-2]
ldi a, 8 ;инициализация коэффициентов
ldi b, 9
ldi c, 2
ldi YH, 0 ;инициализация переменных
ldi YL, 0
ldi Y1, 0
ldi Y2, 0
ldi G, 0
ldi G1, 0
ldi G2, 0
cbi DDRF, 0 ;PF0 - вход на АЦП (установка бита в порту)
ser tmp ;установка регистра в FF
out DDRC, tmp ;Все 8 линий порта C работают на выход (ЦАП)
ldi tmp, 0
ldi tmp, (1<<ADEN)|(1<<ADFR)|(1<<ADPS0)|(1<<ADPS1)
; ADEN=1 включение ацп
; ADFR=1 непрерывное преобразование
; ADPS[2..0]=011 МК работает на 1МГц. делитель
; частоты = 8.1000кГц / 8 = 125кГц
out ADCSRA, tmp
ldi tmp, (1<<ADLAR)|(1<<REFS0) |(1<<REFS1)
; REFS[1..0]=00 От внешнего AREF
; ADLAR = 1 выстраиваем по левому краю в регистрах преобразования АЦП
; MUX[4..0] = 00000 входной канал ADC0
out ADMUX, tmp
;*******************************************************************************************************
Main:
in G, ADCH ;Записываем 8р значение с АЦП
;y[n]=g[n-2]*b
mul G2, a ;Умножение G2 на a, результат в регистрах r0:r1 (16р)
add YL, r0 ;Прибавляем к YL r0, результат в YL
adc YH, r1 ;Прибавляем к YH r1, результат в YH (с уч. переноса)
;y[n]=a*g[n-2]-b*y[n-1]
mul Y1, d ;Умножение Y1 на b, результат в регистрах r0:r1 (16р)
sub XL, r0 ;Вычитаем из YL r0, результат в YL
sbc XH, r1 ;Вычитаем из YH r1, результат в YH (с уч. переноса)
; y[n]=a*g[n-2]-b*y[n-1]+c*y[n-2]
mul Y2, c ;Умножение Y2 на c, результат в регистрах r0:r1 (16р)
add YL, r0 ;Прибавляем к YL r0, результат в YL
adc YH, r1 ;Прибавляем к YH r1, результат в YH (с уч. переноса)
lsr XH ;сдвиг на 3 разрядов вправо старшего разряда
lsr XH ;( деление на 8 для ЦАП)
lsr XH
mov Y1, YH ;y[n-1] = y[n]
mov G1, G ;g[n-1] = g[n]
mov G2, G1 ;g[n-2]=g[n-1]
out PORTC, YH ;запись в порт C
rjmp Main ;повторяем Main