📄 adsub.asm
字号:
*------------------------------------------------------*
*文件描述:本文件包含了A/D转换的3子程序,分别为: *
*(1)advalue:获取1路A/D转换结果 *
*(2)admid:获取中值滤波后的A/D转换结果 *
*(3)adave:获取均值滤波后的A/D转换结果 *
*-------------《嵌入式应用技术基础教程》--------------*/
*[相关位定义]
COCOBit EQU 7 ;转换完成标志位
*advalue:1路A/D转换子程序------------------------------*
*功能描述:对某通道进行A/D转换,结果放入A *
*入 口:A=通道号 *
*出 口:A=该通道的A/D转换结果 *
*堆栈深度:2+1=3 *
*-----------------------------------------------------*/
advalue:
AIS #-!1
AND #%00011111
STA !1,SP ;暂存通道号
;选取通道ADCH4-ADCH0=00000-00111
LDA ADSCR
AND #%11100000
ORA !1,SP
STA ADSCR
BRCLR COCOBit,ADSCR,* ;取A/D转换结果
LDA ADR
AIS #!1
RTS
*admid:1路A/D转换子程序(中值滤波)----------------------*
*功能描述:对某通道进行三次采样,中值滤波结果放入A *
*入 口:A=通道号 *
*出 口:A=该通道中值滤波后的A/D转换结果 *
*堆栈深度:2+5=7 *
*-----------------------------------------------------*/
admid:
PSHX ;保护X
AIS #-!4 ;在堆栈区开辟临时变量
STA $4,SP ;暂存通道号
;取三次A/D转换结果
LDA $4,SP
JSR advalue
STA !1,SP
LDA $4,SP
JSR advalue
STA !2,SP
LDA $4,SP
JSR advalue
STA !3,SP
;从三次A/D转换结果中取中值
;取出堆栈前2个数比较,小的放在(SP+1),大的放在(SP+2)
LDA !1,SP
CMP !2,SP
BLS admid1 ;若(SP+1)<=(SP+2),转admid1
TAX ;否则(SP+1)与(SP+2)互换
LDA !2,SP
STA !1,SP
STX !2,SP
admid1:
;取出(SP+3)中的数,与(SP+2)比较
LDA !3,SP
CMP !2,SP
BHS admid2 ;若(SP+3)>(SP+2),转admid2
CMP !1,SP ;否则与(SP+1)比较
BHI admid3
LDA !1,SP
BRA admid_Exit
admid2
LDA !2,SP
BRA admid_Exit
admid3
LDA !3,SP
admid_Exit
AIS #!4 ;释放临时变量
PULX ;恢复X
RTS
*adave:1路A/D转换子程序(均值滤波)----------------------*
*功能描述:求某通道X次均值滤波结果,并放入A中 *
*入 口:A=通道号 X=平均次数(1--255) *
*出 口:A=该通道中值滤波后的A/D转换结果 *
*堆栈深度:2+5=7 *
*-----------------------------------------------------*/
adave:
AIS #-!4 ;在堆栈区开辟临时变量
STX !4,SP ;暂存平均次数
STA !3,SP ;暂存通道号
LDA #!0 ;初始化X次和值
STA !2,SP
STA !1,SP
;求X次的和
adave_1:
LDA !3,SP ;取通道号
JSR admid
ADD !1,SP ;相加
STA !1,SP
CLRA
ADC !2,SP
STA !2,SP
DBNZX adave_1
;求平均值
LDA !2,SP ;高位->H
PSHA
PULH
LDA !1,SP ;低位->A
LDX !4,SP ;除数->X
DIV ;(H:A)/X->A 忽略余数
AIS #!4 ;释放临时变量
RTS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -