📄 tlc2543.asm
字号:
;name:read_ad
;function: read A/D TLc2543
;inport: b=channel number
;outport: r2,r3 high byte and low byte of change result
;call:none
;use:r2,r3,r7,a,r6
;滤波算法为,去最大和最小其余算术平均,采样个数由R6决定
;使用第一组寄存器
read_ad: push psw
setb rs0
clr rs1
mov r6,#5 ;采样次数4
mov r0,#ad_data
read_ad0: mov a,b
mov r7,#8
clr ad_cs
nop
nop
nop
nop
nop
ad_high: mov c,ad_do
rlc a
mov ad_di,c
setb x_clk
nop
nop
clr x_clk
nop
nop
djnz r7,ad_high
mov r2,a
clr a
mov r7,#8
ad_low: mov c,ad_do
rlc a
setb x_clk
nop
nop
clr x_clk
djnz r7,ad_low
setb ad_cs
swap a
mov r3,a
mov a,r2
anl a,#0fh
swap a
orl a,r3
mov r3,a
mov a,r2
anl a,#0f0h
swap a
mov r2,a
mov @r0,a
inc r0
mov a,r3
mov @r0,a
inc r0
djnz r6,read_ad0
setb ad_cs
lcall sort
pop psw
ret
sort: mov b,#3 ;15 排队次数为采样个数-1
sort_1: mov r7,b
mov r0,#ad_data+2
sort_2: mov a,@r0
mov r5,a
inc r0
inc r0
clr c
subb a,@r0
jc sort_3
jnz sort_4
dec r0 ;dataH is equer
mov a,@r0
mov r5,a
inc r0
inc r0
clr c
subb a,@r0
dec r0
jnc sort_4
inc r0
mov a,r5
xch a,@r0
dec r0
dec r0
mov @r0,a
inc r0
sjmp sort_4
sort_3: mov a,r5
xch a,@r0
dec r0
dec r0
mov @r0,a
inc r0
mov a,@r0
inc r0
inc r0
xch a,@r0
dec r0
dec r0
mov @r0,a
inc r0
sort_4: djnz r7,sort_2
djnz b,sort_1
mov r2,#0
mov r3,#0
mov r0,#ad_data+5
mov r7,#2 ;求和个数为采样个数-2
add_1: mov a,r3
add a,@r0
mov r3,a
dec r0
mov a,r2
addc a,@r0
mov r2,a
inc r0
inc r0
inc r0
djnz r7,add_1
mov r7,#1 ;除以4
add_2: mov a,r2
clr c
rrc a
mov r2,a
mov b,a
mov a,r3
rrc a
mov r3,a
djnz r7,add_2
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -