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

📄 adsub.lis

📁 要用到开发工具SD-H08
💻 LIS
字号:
                        .module ADsub.c
                        .area text
                ;            tmp -> 0,X
                ;        channel -> 3,X
 0000           _advalue::
 0000 A7FF              ais #-1
 0002 95                tsx
 0003           ; /*-----------------------------------------------------*
 0003           ; *文件描述:本文件包含了A/D转换的3个子函数,分别为:       *  
 0003           ; *(1)advalue:获取1路A/D转换结果                         *
 0003           ; *   unsigned char advalue(unsigned char channel)       *
 0003           ; *(2)admid:获取中值滤波后的A/D转换结果                  *
 0003           ; *   unsigned char admid(unsigned char channel)         *
 0003           ; *(3)adave:获取均值滤波后的A/D转换结果                  *
 0003           ; *   unsigned char adave(unsigned char n,               *
 0003           ; *   unsigned char channel)                             *
 0003           ; *-------------《嵌入式应用技术基础教程》--------------*/
 0003           ; //[以下为子程序源代码]
 0003           ; //[包含头文件]
 0003           ; #include "GP32C.H"
 0003           ; #define COCOBit  7           //转换完成标志位
 0003           ; /*advalue:1路A/D转换函数-------------------------------*
 0003           ; *功能:获取通道channel的A/D转换结果                     *
 0003           ; *参数:channel=通道号                                   *
 0003           ; *返回:该通道的A/D转换结果                              *
 0003           ; *-----------------------------------------------------*/ 
 0003           ; unsigned char advalue(unsigned char channel)
 0003           ;   { 
 0003           ;    //选取通道号ADCH4-ADCH0=00000-00111
 0003           ;       unsigned char tmp;
 0003           ;       channel&=0b00011111;
 0003 E603              lda 3,X
 0005 A41F              and #31
 0007 E703              sta 3,X
 0009           ;       tmp=ADSCR&0b11100000;
 0009 B63C              lda 0x3c
 000B A4E0              and #-32
 000D F7                sta ,X
 000E           ;       tmp=tmp|channel;//通道号选0;其他位不变。
 000E EA03              ora 3,X
 0010 F7                sta ,X
 0011           ;       ADSCR=tmp;
 0011 B73C              sta 0x3c
 0013 2008              bra L3
 0015           L2:
 0015           ; 	//取A/D转换结果	 
 0015           ;  	while(1)
 0015           ;  	   if((ADSCR&(1<<COCOBit))!=0)
 0015 0F3C05            brclr #7,0x3c,L5
 0018           ;           {
 0018           ;           tmp=ADR; break;
 0018 B63D              lda 0x3d
 001A F7                sta ,X
 001B 2002              bra L4
 001D           L5:
 001D           L3:
 001D 20F6              bra L2
 001F           L4:
 001F           ;           }//接受数据
 001F           ; 	return  tmp;
 001F F6                lda ,X
 0020           L1:
 0020 A701              ais #1
 0022                   .dbline 0 ; func end
 0022 81                rts
 0023           ;              k -> 0,X
 0023           ;            tmp -> 1,X
 0023           ;              i -> 2,X
 0023           ;              j -> 3,X
 0023           ;        channel -> 6,X
 0023           _admid::
 0023 A7FC              ais #-4
 0025 95                tsx
 0026           ;   }
 0026           ; /*admid:1路A/D转换函数(中值滤波)-----------------------*
 0026           ; *功能:获取通道channel中值滤波后的A/D转换结果           *
 0026           ; *参数:channel=通道号                                   *
 0026           ; *返回:该通道中值滤波后的A/D转换结果                    *
 0026           ; *-----------------------------------------------------*/ 
 0026           ; unsigned char admid(unsigned char channel) 
 0026           ;   {
 0026           ;      unsigned char i,j,k,tmp;
 0026           ;      //调用程序,取三次A/D转换结果
 0026           ;      i=advalue(channel);
 0026 E606              lda 6,X
 0028 87                psha
 0029 CD0000            jsr _advalue
 002C A701              ais #1
 002E 95                tsx
 002F B700              sta *__r1
 0031 E702              sta 2,X
 0033           ;      j=advalue(channel);
 0033 E606              lda 6,X
 0035 87                psha
 0036 CD0000            jsr _advalue
 0039 A701              ais #1
 003B 95                tsx
 003C B700              sta *__r1
 003E E703              sta 3,X
 0040           ;      k=advalue(channel);
 0040 E606              lda 6,X
 0042 87                psha
 0043 CD0000            jsr _advalue
 0046 A701              ais #1
 0048 95                tsx
 0049 B700              sta *__r1
 004B F7                sta ,X
 004C           ;      //从三次A/D转换结果中取中值
 004C           ;      if (i>j) 
 004C E602              lda 2,X
 004E E103              cmp 3,X
 0050 230A              bls L8
 0052           ;          { 
 0052           ;          tmp=i; i=j; j=tmp; 
 0052 E701              sta 1,X
 0054 E603              lda 3,X
 0056 E702              sta 2,X
 0058 E601              lda 1,X
 005A E703              sta 3,X
 005C           ;          }
 005C           L8:
 005C           ;      if (k>=j)
 005C F6                lda ,X
 005D E103              cmp 3,X
 005F 2506              blo L10
 0061           ;            tmp=j;
 0061 E603              lda 3,X
 0063 E701              sta 1,X
 0065 200D              bra L11
 0067           L10:
 0067           ;      else
 0067           ;            if (k>=i)  tmp=k;
 0067 F6                lda ,X
 0068 E102              cmp 2,X
 006A 2504              blo L12
 006C E701              sta 1,X
 006E 2004              bra L13
 0070           L12:
 0070           ;            else       tmp=i;
 0070 E602              lda 2,X
 0072 E701              sta 1,X
 0074           L13:
 0074           L11:
 0074           ;      return tmp;//返回
 0074 E601              lda 1,X
 0076           L7:
 0076 A704              ais #4
 0078                   .dbline 0 ; func end
 0078 81                rts
 0079           ;              j -> 0,X
 0079           ;              i -> 2,X
 0079           ;        channel -> 6,X
 0079           ;              n -> 5,X
 0079           _adave::
 0079 A7FD              ais #-3
 007B 95                tsx
 007C           ;  }
 007C           ; /*adave:1路A/D转换函数(均值滤波)-----------------------*
 007C           ; *功能:对通道channel的A/D转换结果求n次平均值            *
 007C           ; *参数:n=平均次数,channel=通道号                       *
 007C           ; *返回:该通道均值滤波后的A/D转换结果                    *
 007C           ; *-----------------------------------------------------*/ 
 007C           ; unsigned char adave(unsigned char n,unsigned char channel) 
 007C           ;   {
 007C           ;      //求n次A/D转换的平均值
 007C           ;      unsigned char i;
 007C           ;      unsigned int j;
 007C           ;      j=0;
 007C 6F01              clr 1,X
 007E 7F                clr ,X
 007F           ;      for (i=0;i<n;i++)         
 007F 6F02              clr 2,X
 0081 2019              bra L18
 0083           L15:
 0083 E606              lda 6,X
 0085 87                psha
 0086 CD0023            jsr _admid
 0089 A701              ais #1
 008B 95                tsx
 008C B700              sta *__r1
 008E 3F00              clr *__r0
 0090 E601              lda 1,X
 0092 BB00              add *__r1
 0094 E701              sta 1,X
 0096 F6                lda ,X
 0097 B900              adc *__r0
 0099 F7                sta ,X
 009A           L16:
 009A 6C02              inc 2,X
 009C           L18:
 009C E602              lda 2,X
 009E E105              cmp 5,X
 00A0 25E1              blo L15
 00A2           ;        j+=admid(channel);
 00A2           ;      j=j/n;
 00A2 3F00              clr *__r0
 00A4 E605              lda 5,X
 00A6 B700              sta *__r1
 00A8 E601              lda 1,X
 00AA B700              sta *__rlo
 00AC F6                lda ,X
 00AD B700              sta *__rhi
 00AF B600              lda *__r1
 00B1 87                psha
 00B2 B600              lda *__r0
 00B4 87                psha
 00B5 CD0000            jsr __divmod16u
 00B8 A702              ais #2
 00BA B600              lda *__rhi
 00BC F7                sta ,X
 00BD B600              lda *__rlo
 00BF E701              sta 1,X
 00C1           ;      return (unsigned char)j;
 00C1           L14:
 00C1 A703              ais #3
 00C3                   .dbline 0 ; func end
 00C3 81                rts

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -