adc11p.lis
来自「为日本瑞萨苏州分公司做的一个温控系统」· LIS 代码 · 共 619 行 · 第 1/2 页
LIS
619 行
.module ADC11P.c
.area text
0000 .dbfile ADC11P.c
0000 .dbfunc e ADC11P _ADC11P fV
0000 ; j -> 0,X
0000 ; i -> 1,X
0000 ; temp -> 2,X
0000 ; ADVal -> 4,X
0000 ; buff -> 26,X
0000 ; flag -> 28,X
0000 ; channel -> 29,X
0000 ; ADValue -> 33,X
0000 ; cs -> 32,X
0000 _ADC11P::
0000 .dbline -1
0000 A7E2 ais #-30
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 23
0003 ; INT8U i,j,channel,flag,buff[2];
0003 ; INT16U temp;
0003 ; INT16U ADVal[11];
0003 ;
0003 ; for(i=0;i<11;i++)
0003 6F01 clr 1,X
0005 2038 bra L5
0007 L2:
0007 .dbline 24
0007 3F00 clr *__r0
0009 E601 lda 1,X
000B B700 sta *__r1
000D 3800 lsl *__r1
000F 3900 rol *__r0
0011 AF04 aix #4
0013 3500 sthx *__r2
0015 95 tsx
0016 B600 lda *__r1
0018 BB00 add *__r3
001A B700 sta *__r3
001C B600 lda *__r0
001E B900 adc *__r2
0020 B700 sta *__r2
0022 B600 lda *__r1
0024 EB22 add 34,X
0026 B700 sta *__r1
0028 B600 lda *__r0
002A E921 adc 33,X
002C B700 sta *__r0
002E 5500 ldhx *__r0
0030 E601 lda 1,x
0032 B700 sta *__r1
0034 F6 lda ,x
0035 5500 ldhx *__r2
0037 F7 sta ,x
0038 B600 lda *__r1
003A E701 sta 1,x
003C 95 tsx
003D L3:
003D .dbline 23
003D 6C01 inc 1,X
003F L5:
003F .dbline 23
003F E601 lda 1,X
0041 A10B cmp #11
0043 25C2 blo L2
0045 .dbline 26
0045 ; ADVal[i]=ADValue[i];
0045 ; //1 将A/D数据存放区清0
0045 ; for(flag=0;flag<=10;flag++)
0045 6F1C clr 28,X
0047 2025 bra L9
0049 L6:
0049 .dbline 27
0049 AF04 aix #4
004B 3500 sthx *__r0
004D 95 tsx
004E 3F00 clr *__r2
0050 E61C lda 28,X
0052 B700 sta *__r3
0054 3800 lsl *__r3
0056 3900 rol *__r2
0058 B600 lda *__r3
005A BB00 add *__r1
005C B700 sta *__r1
005E B600 lda *__r2
0060 B900 adc *__r0
0062 B700 sta *__r0
0064 4F clra
0065 5500 ldhx *__r0
0067 F7 sta ,x
0068 4F clra
0069 E701 sta 1,x
006B 95 tsx
006C L7:
006C .dbline 26
006C 6C1C inc 28,X
006E L9:
006E .dbline 26
006E E61C lda 28,X
0070 A10A cmp #10
0072 23D5 bls L6
0074 .dbline 31
0074 ; ADVal[flag]=0;
0074 ;
0074 ;
0074 ; //3 对11个通道采集数据,每一路采集16次,16次的数据总和-->ADValue
0074 ; for(j=1;j<=20;j++)
0074 A601 lda #1
0076 F7 sta ,X
0077 CC0107 jmp L13
007A L10:
007A .dbline 32
007A ; {
007A .dbline 33
007A ; flag=0;
007A 6F1C clr 28,X
007C .dbline 35
007C ; //3.1第0片TLC2543的0~10通道转换
007C ; for(channel=0;channel<=10;channel++)
007C 6F1D clr 29,X
007E 207D bra L17
0080 L14:
0080 .dbline 36
0080 .dbline 38
0080 AF1A aix #26
0082 89 pshx
0083 8B pshh
0084 95 tsx
0085 AF02 aix #2
0087 3F00 clr *__r0
0089 E61D lda 29,X
008B 87 psha
008C B600 lda *__r0
008E 87 psha
008F 3F00 clr *__r0
0091 E620 lda 32,X
0093 87 psha
0094 B600 lda *__r0
0096 87 psha
0097 CD01A8 jsr _TLC2543
009A A706 ais #6
009C 95 tsx
009D .dbline 39
009D AF1A aix #26
009F 89 pshx
00A0 8B pshh
00A1 95 tsx
00A2 AF02 aix #2
00A4 3F00 clr *__r0
00A6 E61D lda 29,X
00A8 87 psha
00A9 B600 lda *__r0
00AB 87 psha
00AC 3F00 clr *__r0
00AE E620 lda 32,X
00B0 87 psha
00B1 B600 lda *__r0
00B3 87 psha
00B4 CD01A8 jsr _TLC2543
00B7 A706 ais #6
00B9 95 tsx
00BA .dbline 41
00BA E61A lda 26,X
00BC E702 sta 2,X
00BE E61B lda 27,X
00C0 E703 sta 3,X
00C2 .dbline 42
00C2 AF04 aix #4
00C4 3500 sthx *__r0
00C6 95 tsx
00C7 3F00 clr *__r2
00C9 E61C lda 28,X
00CB B700 sta *__r3
00CD 3800 lsl *__r3
00CF 3900 rol *__r2
00D1 B600 lda *__r3
00D3 BB00 add *__r1
00D5 B700 sta *__r1
00D7 B600 lda *__r2
00D9 B900 adc *__r0
00DB B700 sta *__r0
00DD 5500 ldhx *__r0
00DF E601 lda 1,x
00E1 B700 sta *__r3
00E3 F6 lda ,x
00E4 95 tsx
00E5 B700 sta *__r2
00E7 B600 lda *__r3
00E9 EB03 add 3,X
00EB B700 sta *__r3
00ED B600 lda *__r2
00EF E902 adc 2,X
00F1 5500 ldhx *__r0
00F3 F7 sta ,x
00F4 B600 lda *__r3
00F6 E701 sta 1,x
00F8 95 tsx
00F9 .dbline 43
00F9 6C1C inc 28,X
00FB .dbline 44
00FB L15:
00FB .dbline 35
00FB 6C1D inc 29,X
00FD L17:
00FD .dbline 35
00FD E61D lda 29,X
00FF A10A cmp #10
0101 2203 bhi X0
0103 CC0080 jmp L14
0106 X0:
0106 .dbline 45
0106 L11:
0106 .dbline 31
0106 7C inc ,X
0107 L13:
0107 .dbline 31
0107 F6 lda ,X
0108 A114 cmp #20
010A 2203 bhi X1
010C CC007A jmp L10
010F X1:
010F .dbline 48
010F ; {
010F ; //3.1.1将通道j的AD转换结果存入内存buff
010F ; TLC2543(cs,channel,buff); //得到"空数据"--不要
010F ; TLC2543(cs,channel,buff);
010F ; //3.1.2从内存buff取出数据-->ADValue[flag]中
010F ; temp=*((unsigned int *)buff);
010F ; ADVal[flag]=ADVal[flag]+temp;
010F ; flag++;
010F ; }
010F ; }
010F ;
010F ; //4 求22路A/D数据的16次平均值
010F ; for(flag=0;flag<=10;flag++)
010F 6F1C clr 28,X
0111 2046 bra L21
0113 L18:
0113 .dbline 49
0113 AF04 aix #4
0115 3500 sthx *__r0
0117 95 tsx
0118 3F00 clr *__r2
011A E61C lda 28,X
011C B700 sta *__r3
011E 3800 lsl *__r3
0120 3900 rol *__r2
0122 B600 lda *__r3
0124 BB00 add *__r1
0126 B700 sta *__r1
0128 B600 lda *__r2
012A B900 adc *__r0
012C B700 sta *__r0
012E 5500 ldhx *__r0
0130 E601 lda 1,x
0132 B700 sta *__r3
0134 F6 lda ,x
0135 B700 sta *__r2
0137 4E0000 mov *__r3,*__rlo
013A 4E0000 mov *__r2,*__rhi
013D A614 lda #20
013F 87 psha
0140 4F clra
0141 87 psha
0142 CD0000 jsr __divmod16u
0145 A702 ais #2
0147 4E0000 mov *__rhi,*__r2
014A 4E0000 mov *__rlo,*__r3
014D B600 lda *__r2
014F 5500 ldhx *__r0
0151 F7 sta ,x
0152 B600 lda *__r3
0154 E701 sta 1,x
0156 95 tsx
0157 L19:
0157 .dbline 48
0157 6C1C inc 28,X
0159 L21:
0159 .dbline 48
0159 E61C lda 28,X
015B A10A cmp #10
015D 23B4 bls L18
015F .dbline 50
015F ; ADVal[flag]=ADVal[flag]/20;
015F ; for(i=0;i<11;i++)
015F 6F01 clr 1,X
0161 203C bra L25
0163 L22:
0163 .dbline 51
0163 3F00 clr *__r0
0165 E601 lda 1,X
0167 B700 sta *__r1
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?