📄 adc11p.lis
字号:
.module ADC11P.c
.area text
0000 .dbfile ADC11P.c
0000 .dbfunc e ADC11P _ADC11P fV
0000 ; j -> 0,X
0000 ; temp -> 1,X
0000 ; ADVal -> 3,X
0000 ; flag -> 25,X
0000 ; tmp -> 26,X
0000 ; channel -> 32,X
0000 ; buff -> 33,X
0000 ; i -> 35,X
0000 ; ADValue -> 39,X
0000 ; cs -> 38,X
0000 _ADC11P::
0000 .dbline -1
0000 A7DC ais #-36
0002 95 tsx
0003 .dbline 18
0003 ; //-------------------------------------------------------------------------*
0003 ; //文件描述:本文件包含了AD采集的2子程序,分别为: *
0003 ; //(1)ADC11P:1片2543-11路AD采集 *
0003 ; //(2)TLC2543:TLC2543芯片A/D转换子程序 *
0003 ; //-------------------------------------------------------------------------*
0003 ; #include "ADC11P.h"
0003 ;
0003 ; //A/D转换并求平均值(11路)子程序(AD22P.ASM)---------------------------------*
0003 ; //功 能:采集TLC2543,共11通道,取16次平均值放入内存ADValue *
0003 ; //参 数:cs:片选,cs=0~7对应PTC0~7 *
0003 ; // ADValue:存放11路AD转换结果的数组首地址 *
0003 ; //返 回:内存ADValue开始连续的11个地址内即为转换的结果 *
0003 ; //调 用:TLC2543 *
0003 ; //修 改:*ADValue是传址,一般在子程序中不直接修改参数,应另声明一个局部 *
0003 ; // 变量地址,代其执行,最后将结果赋到参数地址带回 (ZY 2007.05.11) *
0003 ; //-------------------------------------------------------------------------*
0003 ; void ADC11P(INT8U cs,INT16U *ADValue)
0003 ; {
0003 .dbline 24
0003 ; INT8U i,j,channel,flag,buff[2];
0003 ; INT16U temp,tmp[3];
0003 ; INT16U ADVal[11];
0003 ;
0003 ; //1 将A/D数据存放区清0
0003 ; for(flag=0;flag<=10;flag++)
0003 6F19 clr 25,X
0005 2025 bra L5
0007 L2:
0007 .dbline 25
0007 AF03 aix #3
0009 3500 sthx *__r0
000B 95 tsx
000C 3F00 clr *__r2
000E E619 lda 25,X
0010 B700 sta *__r3
0012 3800 lsl *__r3
0014 3900 rol *__r2
0016 B600 lda *__r3
0018 BB00 add *__r1
001A B700 sta *__r1
001C B600 lda *__r2
001E B900 adc *__r0
0020 B700 sta *__r0
0022 4F clra
0023 5500 ldhx *__r0
0025 F7 sta ,x
0026 4F clra
0027 E701 sta 1,x
0029 95 tsx
002A L3:
002A .dbline 24
002A 6C19 inc 25,X
002C L5:
002C .dbline 24
002C E619 lda 25,X
002E A10A cmp #10
0030 23D5 bls L2
0032 .dbline 29
0032 ; ADVal[flag]=0;
0032 ;
0032 ;
0032 ; //3 对11个通道采集数据,每一路采集16次,16次的数据总和-->ADValue
0032 ; for(j=1;j<=16;j++)
0032 A601 lda #1
0034 F7 sta ,X
0035 CC0102 jmp L9
0038 L6:
0038 .dbline 30
0038 ; {
0038 .dbline 31
0038 ; flag=0;
0038 6F19 clr 25,X
003A .dbline 33
003A ; //3.1第0片TLC2543的0~10通道转换
003A ; for(channel=0;channel<=10;channel++)
003A 6F20 clr 32,X
003C CC00F8 jmp L13
003F L10:
003F .dbline 34
003F ; {
003F .dbline 36
003F ; //3.1.1将通道j的AD转换结果存入内存buff
003F ; for(i=0;i<3;i++) //中值滤波
003F 6F23 clr 35,X
0041 2062 bra L17
0043 L14:
0043 .dbline 37
0043 .dbline 38
0043 AF21 aix #33
0045 89 pshx
0046 8B pshh
0047 95 tsx
0048 AF02 aix #2
004A 3F00 clr *__r0
004C E620 lda 32,X
004E 87 psha
004F B600 lda *__r0
0051 87 psha
0052 3F00 clr *__r0
0054 E626 lda 38,X
0056 87 psha
0057 B600 lda *__r0
0059 87 psha
005A CD029C jsr _TLC2543
005D A706 ais #6
005F 95 tsx
0060 .dbline 39
0060 AF21 aix #33
0062 89 pshx
0063 8B pshh
0064 95 tsx
0065 AF02 aix #2
0067 3F00 clr *__r0
0069 E620 lda 32,X
006B 87 psha
006C B600 lda *__r0
006E 87 psha
006F 3F00 clr *__r0
0071 E626 lda 38,X
0073 87 psha
0074 B600 lda *__r0
0076 87 psha
0077 CD029C jsr _TLC2543
007A A706 ais #6
007C 95 tsx
007D .dbline 41
007D AF1A aix #26
007F 3500 sthx *__r0
0081 95 tsx
0082 3F00 clr *__r2
0084 E623 lda 35,X
0086 B700 sta *__r3
0088 3800 lsl *__r3
008A 3900 rol *__r2
008C B600 lda *__r3
008E BB00 add *__r1
0090 B700 sta *__r1
0092 B600 lda *__r2
0094 B900 adc *__r0
0096 B700 sta *__r0
0098 E621 lda 33,X
009A 5500 ldhx *__r0
009C F7 sta ,x
009D 9EE623 lda 35,SP
00A0 E701 sta 1,x
00A2 95 tsx
00A3 .dbline 42
00A3 L15:
00A3 .dbline 36
00A3 6C23 inc 35,X
00A5 L17:
00A5 .dbline 36
00A5 E623 lda 35,X
00A7 A103 cmp #3
00A9 2598 blo L14
00AB .dbline 43
00AB AF1A aix #26
00AD 89 pshx
00AE 8B pshh
00AF CD0195 jsr _MidVal
00B2 A702 ais #2
00B4 95 tsx
00B5 B600 lda *__r0
00B7 E701 sta 1,X
00B9 B600 lda *__r1
00BB E702 sta 2,X
00BD .dbline 44
00BD AF03 aix #3
00BF 3500 sthx *__r0
00C1 95 tsx
00C2 3F00 clr *__r2
00C4 E619 lda 25,X
00C6 B700 sta *__r3
00C8 3800 lsl *__r3
00CA 3900 rol *__r2
00CC B600 lda *__r3
00CE BB00 add *__r1
00D0 B700 sta *__r1
00D2 B600 lda *__r2
00D4 B900 adc *__r0
00D6 B700 sta *__r0
00D8 5500 ldhx *__r0
00DA E601 lda 1,x
00DC B700 sta *__r3
00DE F6 lda ,x
00DF 95 tsx
00E0 B700 sta *__r2
00E2 B600 lda *__r3
00E4 EB02 add 2,X
00E6 B700 sta *__r3
00E8 B600 lda *__r2
00EA E901 adc 1,X
00EC 5500 ldhx *__r0
00EE F7 sta ,x
00EF B600 lda *__r3
00F1 E701 sta 1,x
00F3 95 tsx
00F4 .dbline 45
00F4 6C19 inc 25,X
00F6 .dbline 46
00F6 L11:
00F6 .dbline 33
00F6 6C20 inc 32,X
00F8 L13:
00F8 .dbline 33
00F8 E620 lda 32,X
00FA A10A cmp #10
00FC 2203 bhi X1
00FE CC003F jmp L10
0101 X1:
0101 .dbline 47
0101 L7:
0101 .dbline 29
0101 7C inc ,X
0102 L9:
0102 .dbline 29
0102 F6 lda ,X
0103 A110 cmp #16
0105 2203 bhi X2
0107 CC0038 jmp L6
010A X2:
010A .dbline 50
010A ; {
010A ; TLC2543(cs,channel,buff); //得到"空数据"--不要
010A ; TLC2543(cs,channel,buff);
010A ; //3.1.2从内存buff取出数据-->ADValue[flag]中
010A ; tmp[i]=*((unsigned int *)buff);
010A ; }
010A ; temp=MidVal(tmp);
010A ; ADVal[flag]=ADVal[flag]+temp;
010A ; flag++;
010A ; }
010A ; }
010A ;
010A ; //4 求22路A/D数据的16次平均值
010A ; for(flag=0;flag<=10;flag++)
010A 6F19 clr 25,X
010C 2038 bra L21
010E L18:
010E .dbline 51
010E AF03 aix #3
0110 3500 sthx *__r0
0112 95 tsx
0113 3F00 clr *__r2
0115 E619 lda 25,X
0117 B700 sta *__r3
0119 3800 lsl *__r3
011B 3900 rol *__r2
011D B600 lda *__r3
011F BB00 add *__r1
0121 B700 sta *__r1
0123 B600 lda *__r2
0125 B900 adc *__r0
0127 B700 sta *__r0
0129 5500 ldhx *__r0
012B E601 lda 1,x
012D B700 sta *__r3
012F F6 lda ,x
0130 B700 sta *__r2
0132 A604 lda #4
0134 X0:
0134 3400 lsr *__r2
0136 3600 ror *__r3
0138 4BFA dbnza X0
013A B600 lda *__r2
013C 5500 ldhx *__r0
013E F7 sta ,x
013F B600 lda *__r3
0141 E701 sta 1,x
0143 95 tsx
0144 L19:
0144 .dbline 50
0144 6C19 inc 25,X
0146 L21:
0146 .dbline 50
0146 E619 lda 25,X
0148 A10A cmp #10
014A 23C2 bls L18
014C .dbline 52
014C ; ADVal[flag]=ADVal[flag]/16;
014C ; for(i=0;i<11;i++)
014C 6F23 clr 35,X
014E 203C bra L25
0150 L22:
0150 .dbline 53
0150 3F00 clr *__r0
0152 E623 lda 35,X
0154 B700 sta *__r1
0156 3800 lsl *__r1
0158 3900 rol *__r0
015A AF03 aix #3
015C 3500 sthx *__r2
015E B600 lda *__r1
0160 BB00 add *__r3
0162 B700 sta *__r3
0164 B600 lda *__r0
0166 B900 adc *__r2
0168 B700 sta *__r2
016A 5500 ldhx *__r2
016C E601 lda 1,x
016E B700 sta *__r3
0170 F6 lda ,x
0171 95 tsx
0172 B700 sta *__r2
0174 B600 lda *__r1
0176 EB28 add 40,X
0178 B700 sta *__r1
017A B600 lda *__r0
017C E927 adc 39,X
017E B700 sta *__r0
0180 B600 lda *__r2
0182 5500 ldhx *__r0
0184 F7 sta ,x
0185 B600 lda *__r3
0187 E701 sta 1,x
0189 95 tsx
018A L23:
018A .dbline 52
018A 6C23 inc 35,X
018C L25:
018C .dbline 52
018C E623 lda 35,X
018E A10B cmp #11
0190 25BE blo L22
0192 .dbline -2
0192 L1:
0192 A724 ais #36
0194 .dbline 0 ; func end
0194 81 rts
0195 .dbsym l j 0 c
0195 .dbsym l temp 1 i
0195 .dbsym l ADVal 3 A[22:11]i
0195 .dbsym l flag 25 c
0195 .dbsym l tmp 26 A[6:3]i
0195 .dbsym l channel 32 c
0195 .dbsym l buff 33 A[2:2]c
0195 .dbsym l i 35 c
0195 .dbsym l ADValue 39 pi
0195 .dbsym l cs 38 c
0195 .dbend
0195 .dbfunc e MidVal _MidVal fi
0195 ; tmp -> 0,X
0195 ; i -> 2,X
0195 ; j -> 3,X
0195 ; x -> 6,X
0195 _MidVal::
0195 .dbline -1
0195 A7FC ais #-4
0197 95 tsx
0198 .dbline 58
0198 ; ADValue[i] =ADVal[i];
0198 ; }
0198 ;
0198 ; //
0198 ; INT16U MidVal(INT16U *x)
0198 ; {
0198 .dbline 62
0198 ; INT8U i,j;
0198 ; INT16U tmp;
0198 ; //冒泡法
0198 ; for(i = 0; i < 3; i ++)
0198 6F02 clr 2,X
019A CC027A jmp L30
019D L27:
019D .dbline 63
019D ; for(j = i; j < 3; j ++)
019D E602 lda 2,X
019F E703 sta 3,X
01A1 CC026F jmp L34
01A4 L31:
01A4 .dbline 64
01A4 ; if( x[i] > x[j] )
01A4 3F00 clr *__r0
01A6 E603 lda 3,X
01A8 B700 sta *__r1
01AA 3800 lsl *__r1
01AC 3900 rol *__r0
01AE B600 lda *__r1
01B0 EB07 add 7,X
01B2 B700 sta *__r1
01B4 B600 lda *__r0
01B6 E906 adc 6,X
01B8 B700 sta *__r0
01BA 5500 ldhx *__r0
01BC E601 lda 1,x
01BE B700 sta *__r1
01C0 F6 lda ,x
01C1 95 tsx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -