📄 ex5.asm
字号:
.sect "init"
.global init,SINP
.text
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;init start!!!
.word init
.space 8
.word timer0
init: ldp 0,dp
ldi @STCK,sp ;INIT STACK
ldi 1800H,st ;INIT ST
ldi @MCTL,ar0 ;INIT MAIN BUS
ldi MBUS1,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
ldi 0,r0
ldi @TSDATA,ar0
rpts @SAMNUM
sti r0,*ar0++
ldi @PORT232,ar1
rpts 030h
sti r0,*ar1++
ldi 0,r0
ldi @ADADER,ar0 ;SET A/D MODE A CHANNL 1 LU
sti r0,*ar0
ldi @ADADERM,ar0
sti r0,*ar0 ;RUN A/D
ldi @TNUM,ar0
sti r0,*ar0
ldi @TSDATA,ar0
ldi @SADDR,ar1
sti ar0,*ar1
;-------------------------DDS
call ddsinit
ldf 11,r0
ldi @F1,ar0
sti r0,*ar0
float 495,r0
ldi @FL,ar0
stf r0,*ar0
float 605,r0
ldi @FH,ar0
stf r0,*ar0
call sinit
;-------------------------DDS
call initt0 ;timer0 init
ldi 100H,IE ;ACTIVE TIMER0
or 2000h,st
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;init end!!!
start: ldi @TNUM,ar0
ldi *ar0,r0
absi r0
cmpi 2000h,r0
blt start
ldi 0,r0
sti r0,*ar0
ldi @LEDS,ar0
ldi *ar0,r0
cmpi 0,r0
ldieq 1,r0
ldine 0,r0
sti r0,*ar0
ldi @LED,ar0
sti r0,*ar0
call msamp
call haming
ldi @INADDRD,ar0
ldi @INADDR,r0
sti r0,*ar0
ldi @LOGFFT,ar0
ldi SULOG,r0
sti r0,*ar0
call fft
ldi 400,ar0
ldi 1000,ar1
addi @INADDR,ar0
addi @INADDR,ar1
ldi DLENTH,r0
call spc1
call sort ;you must write the program
call output
br start
;--------------------------------------------------------------comm_sub list
; 1: timer0 2: msamp 3: haming 4: spc1 5: initt0
; 6: invf 7: sqrt 8: wfreq 9: wamp 10: fft
;--------------------------------------------------------------comm sub list
;INTERRUPT SERVER;;;;;;;;;;;;;;;;;;;;;;comm sub1: timer0
timer0: push st
push ar0
push ar1
push ar2
push ar3
ldi @MCTL,ar3 ;INIT MAIN BUS
ldi MBUS7,ar1
sti ar1,*ar3
nop
ldi @ADADER,ar0
ldi *ar0,ar1
addi 2000h,ar1
and 3fffh,ar1
sti ar1,*ar0
ldi @SADDR,ar0
ldi *ar0,ar0
sti ar1,*ar0++
cmpi @TSDATAM,ar0
ldieq @TSDATA,ar0
ldi @SADDR,ar1
sti ar0,*ar1
ldi @MCTL,ar3
ldi MBUS1,ar1
sti ar1,*ar3
ldi 1,ar3
ldi @TNUM,ar0
addi3 ar3,*ar0,ar1
sti ar1,*ar0++
ldi @MCTL,ar3
ldi @MCTLS,ar0
ldi *ar0,ar0
sti ar0,*ar3
pop ar3
pop ar2
pop ar1
pop ar0
pop st
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub2: msamp
msamp: ldi @SAMNUM,BK
ldi @INADDR,ar2
ldi @SADDR,ar0
ldi *ar0,ar1
ldi DLENTH,rc
subi 2,rc
float *ar1++%,r0
rptb samp0
samp0: float *ar1++%,r0
|| stf r0,*ar2++
stf r0,*ar2++
ldf 0.0,r0
ldi DLENTH,rc ;SET DATA LENGTH
subi 1,rc
rptb samp1
samp1: stf r0,*ar2++ ;IMAG PART CLEAR end
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub3: HAMING_windows
haming: ldi @INADDR,ar0
ldi 8192,ar7
ldi @SINTAB,ar6 ;SET SINTAB ADDER
addi 17ffh,ar6 ;97,11
ldi ar7,r5
lsh -1,r5
subi 1,r5
ldi ar7,rc ;SET REPEAT LEN.
subi 1,rc
rptb ham
ldf *ar0,r2
cmpi r5,rc ;1fffh-1000h 1 part
blt part2
beq mid ;0fffh-0 2 part
ldf *ar6--,r6
br nom
mid: nop *ar6++
part2: ldf *ar6++,r6
nom: addf 1.0,r6
mpyf 0.46,r6
addf 0.08,r6
mpyf r6,r2
ham: stf r2,*ar0++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub6: spc1
spc1: ldi @PWADDR,ar2 ;interface:ar0,ar1
subi3 ar0,ar1,rc ; ar0:real part addr.
addi3 r0,ar0,ar1 ; output addr. PWADDR
rptb sends ;use:PWADDR DLENTH
ldf *ar1++,r1 ;use:ar0-ar2,r0,r1,rc
|| ldf *ar0++,r0
mpyf r0,r0
mpyf r1,r1
addf r1,r0
sends: stf r0,*ar2++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
initt0: ldi 0,r0
ldi 808h,ar0
lsh 12,ar0
addi 20h,ar0
sti r0,*+ar0(4)
ldi FS,r0
sti r0,*+ar0(8)
ldi 3c1h,r0
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ddsinit:ldi @MCTL,ar0
ldi MBUS7,r0
sti r0,*ar0
ldi 4000h,r0
lsh 4,r0
rpts r0
nop
ldi 0,r0
ldi @DDS_PHASE0,ar0
sti r0,*ar0
ldi @DDS_PHASE1,ar0
sti r0,*ar0
ldi @DDS_PHASE2,ar0
sti r0,*ar0
ldi @DDS_PHASE3,ar0
sti r0,*ar0
ldi @MCTL,ar0
ldi MBUS1,r0
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sinit: ldi @F1,ar0
ldf *ar0,r0
call initt1
ldf @FL,r0
ldf @FH,r1
mpyf @SINGFXS,r0
addf 0.5,r0
fix r0
mpyf @SINGFXS,r1
addf 0.5,r1
fix r1
ldi 0fh,r6
lsh 16,r6
and3 r6,r0,r5
lsh -16,r5
ldi @DDS_FREQ0H,ar0
sti r5,*ar0
ldi @DDS_FREQ0L,ar0
sti r0,*ar0
and3 r1,r6,r5
lsh -16,r5
ldi @DDS_FREQ1H,ar0
sti r5,*ar0
ldi @DDS_FREQ1L,ar0
sti r1,*ar0
ldi @MCTL,ar0
ldi MBUS1,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subE: initt1
initt1: call invf ;input data R0 float
ldf @FT15M,r4
mpyf r0,r4
addf 0.5,r4
fix r4
ldi 0h,r0 ;r4=FS
ldi 808h,ar0 ;INIT TIMER1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -