ЭУМК по дисциплине "Программирование проблемно-ориентированных вычислительных средств реального времени" › Теория › Тема 1. Программирование синусоидальных сигналов аналитическими и табличными методами

# Электронный учебно-методический
комплекс по дисциплине
"Программирование проблемно-ориентированных вычислительных средств реального времени"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

1.3. Формирование синусоидальных сигналов с изменяющейся частотой
1.3.1. Способы формирования сигналов с изменяющейся частотой

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

|  | (1.7)

1.3.2. Формирование гармонического сигнала

Ниже приведен пример программы формирования синусоидального сигнала.

    ;	Синус с возрастающей частотой - 1 гармоника
    ;	07/10/04 13:40:00
    	.mmregs
    Freq	.set	256*4			; шаг формируемой синусоиды
    Speed	.set	8			; приращение шага синусоиды
    Count	.set	511			; число формируемых отсчетов
    Corr	.set	0FFFEh
    Buff	.set	2000h
    DA	.set	60h			; шаг приращения по частоты
    DAN	.set	61h			; текущее приращение аргумента синуса
    AN	.set	62h			; аргумент синуса
    MA	.set	63h			; дополнение аргумента синуса
    	.def	_c_int00
    	.align	80h
    _c_int00:
    	ld	#0, DP		; страница 0
    	ld	#0, a
    	dst	a, AN
    	rsbx	OVM
    	ssbx	FRCT
    	st	#Speed, DA
    	st	#Freq-Speed, DAN
    	ssbx	tc
    	stm	#Buff, AR7
    	bd	out
    	stm	#Count, AR4
    ;
    loop:	ld	DA, 16, a		; DA : изменение частоты
    	add	DAN, 16, a		; DAn-1 : старый шаг синуса
    	sth	a, DAN		; DAn : новый шаг синуса
    	add	AN, 16, a		; An-1 : старый аргумент синуса
    	bcd	lp, anov		; нет перехода через П (или 2П)
    	and	#Corr, 15, a	;2w аргумент по модулю М

    	bitf	MA,8000h		; 0-П или П-2П
    lp:	sth	a, AN			; An : новый аргумент синуса
    	neg	a			; -An
    	bcd	pi, tc		; < PI
    	and	#Corr,15, a		;2w M-An

    	neg	a			; -
    pi:	sth	a, MA			; +-(M-(An-KM))
    	ld	AN, T			; (An-KM)
    	mpy	MA, a			; (M-(An-KM))
    out:	sth	a, *AR7+		; вывод в ЦАП
    	banz	loop,*AR4-		; зациклить
    	nop

1.3.3. Формирование полигармонического сигнала

Ниже приведен пример программы формирования полигармонического синусоидального сигнала состоящего из трех гармоник.

    ;      Синус с возрастающей частотой - 3 гармоники
    ;      26/07/98 20:00:00
    Freq  .set    256          ; шаг формируемой синусоиды
    Speed .set    1            ; приращение шага синусоиды
    Count .set    511          ; число формируемых отсчетов
    Corr  .set    0FFFEh

          .ds     400h
    TEMP  .word   0            ; рабочая ячейка
    C     .word   4000h
          .word   0F686h       ; 97Ah
          .word   0FDF4h       ; 20Ch
    DA    .word   0            ; шаг приращения по частоты
    DAN   .word   0            ; приращение аргумента синуса
    AN    .word   0            ; аргумент синуса
    MA    .word   0            ; дополнение аргумента синуса
    MNT   .word   0            ; коээфициент гармоники

          .ps     0FB00h
    strt  lark    AR1,1        ; DXR
          ldpk    8            ; страница 8 адреса 400h - 480h
          rovm
          spm     2
          zac
          lark    AR3,14
          lrlk    AR2,DA
          larp    AR2
    lz    sacl    *+,0,AR3
          banz    lz,*-,AR2
          lark    AR0,5
          lrlk    AR2,DA
          lrlk    AR4,C
          lalk    Speed
          sacl    *+           ; DA
          sblk    Freq
          neg
          sacl    *+           ; DAN
          mar     *+           ; AN
          mar     *+,AR4       ; MA
          lac     *+,0,AR2     ; C
          sacl    *+           ; MNT
          lark    AR3,1
    l0    mar     *0-          ; DAnxt -> DAprev
          lac     *0+          ; DApr
          add     DA,1         ; DApr+2*DA
          sacl    *0-          ; DAnxt
          mar     *+           ; -> DANprev
          lac     *0+          ; DANpr
          add     DAN,1        ; DANpr+2*DAN
          sacl    *+           ; DANnxt
          mar     *+           ; ANnxt
          mar     *+,AR4       ; MAnxt
          lac     *+,0,AR2
          sacl    *+,0,AR3     ; MNTnxt
          banz    l0,*-,AR2
          lrlk    AR4,Count
          lark    AR0,3
          larp    AR1
          zac
          b       out
    ;
    loop  lrlk    AR2,DA
          lark    AR3,2
    l1    zalh    *+             ; DA : изменение частоты
          addh    *              ; DAn-1 : старый шаг синуса
          sach    *+             ; DAn : новый шаг синуса
          addh    *              ; An-1 : старый аргумент синуса
          andk    Corr,15        ; аргумент по модулю М
          sach    *+             ; An : новый аргумент синуса
          cmpl                   ; -An
          andk    Corr,15        ; M-An
          sach    *+             ; MA : +(M-(An-KM))
          lac     *              ; MNT
          bnv     lp             ; < PI : аргумент от 0 до PI
          neg                    ; смена знака
    lp    sacl    *+,0,AR3       ; MNT
          banz    l1,*-,AR2      ;
          lrlk    AR2,AN
          lt      *+             ; (An-KM)
          mpy     *+             ; (M-(An-KM))
          sph     TEMP            ; An(M-An)
          lt      TEMP
          mpy     *+             ; Ak*An(M-An)
          ltp     *+             ; (An-KM)
          mpy     *+             ; (M-(An-KM))
          sph     TEMP            ; An(M-An)
          lt      TEMP
          mpy     *+             ; Ak*An(M-An)
          lta     *+             ; (An-KM)
          mpy     *+             ; (M-(An-KM))
          sph     TEMP            ; An(M-An)
          lt      TEMP
          mpy     *+,AR1          ; Ak*An(M-An)
          apac
    out   sach    *,0,AR4
          banz    loop,*-,AR2
          nop

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах
© БГУИР , 2012