⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adsub.asm

📁 A04_AD模数转换
💻 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 + -