📄 adc22p.lis
字号:
.module ADC22P.c
.area text
0000 .dbfile ADC22P.c
0000 .dbfunc e AD_SPIInit _AD_SPIInit fV
0000 _AD_SPIInit::
0000 .dbline -1
0000 .dbline 16
0000 ; /*-----------------------------------------------------*
0000 ; *文件描述:本文件包含了AD采集的2子程序,分别为: *
0000 ; *(1)ADC22P:2片2543-22路AD采集 *
0000 ; *(2)TLC2543:TLC2543芯片A/D转换子程序 *
0000 ; *-------------《嵌入式应用技术基础教程》--------------*/
0000 ; #include "Includes.h"
0000 ; /*SPIInit:SPI初始化子程序-------------------------------*
0000 ; *功 能:对SPI进行初始化,默认为允许SPI,主机工作方式,时钟 *
0000 ; * 空闲低电平,比特率8分频, *
0000 ; * 波特率为CGMOUT/2*BD(设CGMOUT=2*fBUS=2*2.4576MHz)*
0000 ; *参 数:无 *
0000 ; *返 回:无 *
0000 ; *------------------------------------------------------*/
0000 ; #include "Includes.h"
0000 ; void AD_SPIInit(void)
0000 ; {
0000 .dbline 17
0000 ; SPCR=0b00100010; //不产生中断、主机方式、时钟空闲低电平
0000 A622 lda #34
0002 B710 sta 0x10
0004 .dbline 18
0004 ; SPSCR=0b00000001; //8分频
0004 A601 lda #1
0006 B711 sta 0x11
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 81 rts
0009 .dbend
0009 .dbfunc e ADC22P _ADC22P fV
0009 ; j -> 0,X
0009 ; temp -> 1,X
0009 ; channel -> 3,X
0009 ; cs -> 4,X
0009 ; buff -> 5,X
0009 ; flag -> 7,X
0009 ; i -> 8,X
0009 ; ADValue -> 11,X
0009 _ADC22P::
0009 .dbline -1
0009 A7F7 ais #-9
000B 95 tsx
000C .dbline 28
000C ; }
000C ; //------------------------------------------------------------------*
000C ; /*A/D转换并求平均值(22路)子程序(AD22P.ASM)-----------------------*
000C ; *功能:采集TLC2543(0)-(1)片,共22通道,取16次平均值放入内存ADValue *
000C ; *入口:无 *
000C ; *出口:ADValue--22路通道的16次平均采样值 *
000C ; *调用:TLC2543Z *
000C ; *-----------------------------------------------------------------*/
000C ; void ADC22P(INT16U *ADValue)
000C ; {
000C .dbline 33
000C ; INT8U i,j,flag,buff[2];
000C ; INT8U cs,channel;
000C ; INT16U temp;
000C ; //A/D数据区清0
000C ; for(flag=0;flag<=21;flag++)
000C 6F07 clr 7,X
000E 2020 bra L6
0010 L3:
0010 .dbline 34
0010 3F00 clr *__r0
0012 E607 lda 7,X
0014 B700 sta *__r1
0016 3800 lsl *__r1
0018 3900 rol *__r0
001A B600 lda *__r1
001C EB0C add 12,X
001E B700 sta *__r1
0020 B600 lda *__r0
0022 E90B adc 11,X
0024 B700 sta *__r0
0026 4F clra
0027 5500 ldhx *__r0
0029 F7 sta ,x
002A 4F clra
002B E701 sta 1,x
002D 95 tsx
002E L4:
002E .dbline 33
002E 6C07 inc 7,X
0030 L6:
0030 .dbline 33
0030 E607 lda 7,X
0032 A115 cmp #21
0034 23DA bls L3
0036 .dbline 37
0036 ; ADValue[flag]=0;
0036 ; //启动第0片TLC2543的0通道转换,得到"空数据"--不要
0036 ; //对22个通道采集数据,每一路采集16次,16次的数据总和-->ADValue
0036 ; for(j=0;j<16;j++)
0036 7F clr ,X
0037 CC00D7 jmp L10
003A L7:
003A .dbline 38
003A ; {
003A .dbline 39
003A ; flag=0;
003A 6F07 clr 7,X
003C .dbline 40
003C ; for(i=0;i<22;i++)
003C 6F08 clr 8,X
003E CC00CD jmp L14
0041 L11:
0041 .dbline 41
0041 .dbline 42
0041 E608 lda 8,X
0043 AE0B ldx #11
0045 8C clrh
0046 52 div
0047 95 tsx
0048 E704 sta 4,X
004A .dbline 43
004A E608 lda 8,X
004C AE0B ldx #11
004E 8C clrh
004F 52 div
0050 8B pshh
0051 86 pula
0052 95 tsx
0053 E703 sta 3,X
0055 .dbline 44
0055 AF05 aix #5
0057 89 pshx
0058 8B pshh
0059 95 tsx
005A AF02 aix #2
005C 3F00 clr *__r0
005E E603 lda 3,X
0060 87 psha
0061 B600 lda *__r0
0063 87 psha
0064 3F00 clr *__r0
0066 E604 lda 4,X
0068 87 psha
0069 B600 lda *__r0
006B 87 psha
006C CD011F jsr _TLC2543
006F A706 ais #6
0071 95 tsx
0072 .dbline 45
0072 AF05 aix #5
0074 89 pshx
0075 8B pshh
0076 95 tsx
0077 AF02 aix #2
0079 3F00 clr *__r0
007B E603 lda 3,X
007D 87 psha
007E B600 lda *__r0
0080 87 psha
0081 3F00 clr *__r0
0083 E604 lda 4,X
0085 87 psha
0086 B600 lda *__r0
0088 87 psha
0089 CD011F jsr _TLC2543
008C A706 ais #6
008E 95 tsx
008F .dbline 47
008F E605 lda 5,X
0091 E701 sta 1,X
0093 E606 lda 6,X
0095 E702 sta 2,X
0097 .dbline 48
0097 3F00 clr *__r0
0099 E607 lda 7,X
009B B700 sta *__r1
009D 3800 lsl *__r1
009F 3900 rol *__r0
00A1 B600 lda *__r1
00A3 EB0C add 12,X
00A5 B700 sta *__r1
00A7 B600 lda *__r0
00A9 E90B adc 11,X
00AB B700 sta *__r0
00AD 5500 ldhx *__r0
00AF E601 lda 1,x
00B1 B700 sta *__r3
00B3 F6 lda ,x
00B4 95 tsx
00B5 B700 sta *__r2
00B7 B600 lda *__r3
00B9 EB02 add 2,X
00BB B700 sta *__r3
00BD B600 lda *__r2
00BF E901 adc 1,X
00C1 5500 ldhx *__r0
00C3 F7 sta ,x
00C4 B600 lda *__r3
00C6 E701 sta 1,x
00C8 95 tsx
00C9 .dbline 49
00C9 6C07 inc 7,X
00CB .dbline 50
00CB L12:
00CB .dbline 40
00CB 6C08 inc 8,X
00CD L14:
00CD .dbline 40
00CD E608 lda 8,X
00CF A116 cmp #22
00D1 2403 bhs X1
00D3 CC0041 jmp L11
00D6 X1:
00D6 .dbline 51
00D6 L8:
00D6 .dbline 37
00D6 7C inc ,X
00D7 L10:
00D7 .dbline 37
00D7 F6 lda ,X
00D8 A110 cmp #16
00DA 2403 bhs X2
00DC CC003A jmp L7
00DF X2:
00DF .dbline 53
00DF ; {
00DF ; cs=i/11;
00DF ; channel=i%11;
00DF ; TLC2543(cs,channel,buff);
00DF ; TLC2543(cs,channel,buff);
00DF ; //从内存buff取出数据-->ADValue[flag]中
00DF ; temp=*((unsigned int *)buff);
00DF ; ADValue[flag]=ADValue[flag]+temp;
00DF ; flag++;
00DF ; }
00DF ; }
00DF ; //求22路A/D数据的16次平均值
00DF ; for(flag=0;flag<=21;flag++)
00DF 6F07 clr 7,X
00E1 2033 bra L18
00E3 L15:
00E3 .dbline 54
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -