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

📄 adc11p.s

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 S
字号:
	.module ADC11P.c
	.area text
	.dbfile ADC11P.c
	.dbfunc e ADC11P _ADC11P fV
;              j -> 0,X
;           temp -> 1,X
;          ADVal -> 3,X
;           flag -> 25,X
;            tmp -> 26,X
;        channel -> 32,X
;           buff -> 33,X
;              i -> 35,X
;        ADValue -> 39,X
;             cs -> 38,X
_ADC11P::
	.dbline -1
	ais #-36
	tsx
	.dbline 18
; //-------------------------------------------------------------------------*
; //文件描述:本文件包含了AD采集的2子程序,分别为:                             * 
; //(1)ADC11P:1片2543-11路AD采集                                            *
; //(2)TLC2543:TLC2543芯片A/D转换子程序                                      *
; //-------------------------------------------------------------------------*
; #include "ADC11P.h"
; 
; //A/D转换并求平均值(11路)子程序(AD22P.ASM)---------------------------------*
; //功  能:采集TLC2543,共11通道,取16次平均值放入内存ADValue               *
; //参  数:cs:片选,cs=0~7对应PTC0~7                                        *
; //        ADValue:存放11路AD转换结果的数组首地址                           *
; //返  回:内存ADValue开始连续的11个地址内即为转换的结果                    *
; //调  用:TLC2543                                                          *
; //修  改:*ADValue是传址,一般在子程序中不直接修改参数,应另声明一个局部   *
; //       变量地址,代其执行,最后将结果赋到参数地址带回 (ZY 2007.05.11)    *
; //-------------------------------------------------------------------------*
; void ADC11P(INT8U cs,INT16U *ADValue)
; {   
	.dbline 24
; 	INT8U i,j,channel,flag,buff[2]; 
;     INT16U temp,tmp[3]; 
;     INT16U ADVal[11]; 
;     
;     //1 将A/D数据存放区清0   
;     for(flag=0;flag<=10;flag++)      
	clr 25,X
	bra L5
L2:
	.dbline 25
	aix #3
	sthx *__r0
	tsx
	clr *__r2
	lda 25,X
	sta *__r3
	lsl *__r3
	rol *__r2
	lda *__r3
	add *__r1
	sta *__r1
	lda *__r2
	adc *__r0
	sta *__r0
	clra
	ldhx *__r0
	sta ,x
	clra
	sta 1,x
	tsx
L3:
	.dbline 24
	inc 25,X
L5:
	.dbline 24
	lda 25,X
	cmp #10
	bls L2
	.dbline 29
;     	ADVal[flag]=0; 
;     	
;     
;     //3 对11个通道采集数据,每一路采集16次,16次的数据总和-->ADValue   
;     for(j=1;j<=16;j++)   
	lda #1
	sta ,X
	jmp L9
L6:
	.dbline 30
;     {  
	.dbline 31
;       flag=0; 
	clr 25,X
	.dbline 33
;       //3.1第0片TLC2543的0~10通道转换      
;       for(channel=0;channel<=10;channel++)      
	clr 32,X
	jmp L13
L10:
	.dbline 34
;       {    
	.dbline 36
;         //3.1.1将通道j的AD转换结果存入内存buff     
;         for(i=0;i<3;i++)     //中值滤波
	clr 35,X
	bra L17
L14:
	.dbline 37
	.dbline 38
	aix #33
	pshx
	pshh
	tsx
	aix #2
	clr *__r0
	lda 32,X
	psha
	lda *__r0
	psha
	clr *__r0
	lda 38,X
	psha
	lda *__r0
	psha
	jsr _TLC2543
	ais #6
	tsx
	.dbline 39
	aix #33
	pshx
	pshh
	tsx
	aix #2
	clr *__r0
	lda 32,X
	psha
	lda *__r0
	psha
	clr *__r0
	lda 38,X
	psha
	lda *__r0
	psha
	jsr _TLC2543
	ais #6
	tsx
	.dbline 41
	aix #26
	sthx *__r0
	tsx
	clr *__r2
	lda 35,X
	sta *__r3
	lsl *__r3
	rol *__r2
	lda *__r3
	add *__r1
	sta *__r1
	lda *__r2
	adc *__r0
	sta *__r0
	lda 33,X
	ldhx *__r0
	sta ,x
	lda 35,SP
	sta 1,x
	tsx
	.dbline 42
L15:
	.dbline 36
	inc 35,X
L17:
	.dbline 36
	lda 35,X
	cmp #3
	blo L14
	.dbline 43
	aix #26
	pshx
	pshh
	jsr _MidVal
	ais #2
	tsx
	lda *__r0
	sta 1,X
	lda *__r1
	sta 2,X
	.dbline 44
	aix #3
	sthx *__r0
	tsx
	clr *__r2
	lda 25,X
	sta *__r3
	lsl *__r3
	rol *__r2
	lda *__r3
	add *__r1
	sta *__r1
	lda *__r2
	adc *__r0
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r3
	lda ,x
	tsx
	sta *__r2
	lda *__r3
	add 2,X
	sta *__r3
	lda *__r2
	adc 1,X
	ldhx *__r0
	sta ,x
	lda *__r3
	sta 1,x
	tsx
	.dbline 45
	inc 25,X
	.dbline 46
L11:
	.dbline 33
	inc 32,X
L13:
	.dbline 33
	lda 32,X
	cmp #10
	bhi X1
	jmp L10
X1:
	.dbline 47
L7:
	.dbline 29
	inc ,X
L9:
	.dbline 29
	lda ,X
	cmp #16
	bhi X2
	jmp L6
X2:
	.dbline 50
;         {
;            TLC2543(cs,channel,buff);   //得到"空数据"--不要
;            TLC2543(cs,channel,buff);        
;            //3.1.2从内存buff取出数据-->ADValue[flag]中         
;            tmp[i]=*((unsigned int *)buff);
;         }        
;         temp=MidVal(tmp);
;         ADVal[flag]=ADVal[flag]+temp;
;         flag++;    
;       }
;     } 
;        
;     //4 求22路A/D数据的16次平均值   
;     for(flag=0;flag<=10;flag++)     
	clr 25,X
	bra L21
L18:
	.dbline 51
	aix #3
	sthx *__r0
	tsx
	clr *__r2
	lda 25,X
	sta *__r3
	lsl *__r3
	rol *__r2
	lda *__r3
	add *__r1
	sta *__r1
	lda *__r2
	adc *__r0
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r3
	lda ,x
	sta *__r2
	lda #4
X0:
	lsr *__r2
	ror *__r3
	dbnza X0
	lda *__r2
	ldhx *__r0
	sta ,x
	lda *__r3
	sta 1,x
	tsx
L19:
	.dbline 50
	inc 25,X
L21:
	.dbline 50
	lda 25,X
	cmp #10
	bls L18
	.dbline 52
;        ADVal[flag]=ADVal[flag]/16;
;     for(i=0;i<11;i++)
	clr 35,X
	bra L25
L22:
	.dbline 53
	clr *__r0
	lda 35,X
	sta *__r1
	lsl *__r1
	rol *__r0
	aix #3
	sthx *__r2
	lda *__r1
	add *__r3
	sta *__r3
	lda *__r0
	adc *__r2
	sta *__r2
	ldhx *__r2
	lda 1,x
	sta *__r3
	lda ,x
	tsx
	sta *__r2
	lda *__r1
	add 40,X
	sta *__r1
	lda *__r0
	adc 39,X
	sta *__r0
	lda *__r2
	ldhx *__r0
	sta ,x
	lda *__r3
	sta 1,x
	tsx
L23:
	.dbline 52
	inc 35,X
L25:
	.dbline 52
	lda 35,X
	cmp #11
	blo L22
	.dbline -2
L1:
	ais #36
	.dbline 0 ; func end
	rts
	.dbsym l j 0 c
	.dbsym l temp 1 i
	.dbsym l ADVal 3 A[22:11]i
	.dbsym l flag 25 c
	.dbsym l tmp 26 A[6:3]i
	.dbsym l channel 32 c
	.dbsym l buff 33 A[2:2]c
	.dbsym l i 35 c
	.dbsym l ADValue 39 pi
	.dbsym l cs 38 c
	.dbend
	.dbfunc e MidVal _MidVal fi
;            tmp -> 0,X
;              i -> 2,X
;              j -> 3,X
;              x -> 6,X
_MidVal::
	.dbline -1
	ais #-4
	tsx
	.dbline 58
;       ADValue[i] =ADVal[i];
; }
; 
; //
; INT16U MidVal(INT16U *x)
; {
	.dbline 62
;     INT8U i,j;
;     INT16U tmp;
;     //冒泡法
;     for(i = 0; i < 3; i ++)
	clr 2,X
	jmp L30
L27:
	.dbline 63
;        for(j = i; j < 3; j ++)
	lda 2,X
	sta 3,X
	jmp L34
L31:
	.dbline 64
;          if( x[i] > x[j] )
	clr *__r0
	lda 3,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add 7,X
	sta *__r1
	lda *__r0
	adc 6,X
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	tsx
	sta *__r0
	clr *__r2
	lda 2,X
	sta *__r3
	lsl *__r3
	rol *__r2
	lda *__r3
	add 7,X
	sta *__r3
	lda *__r2
	adc 6,X
	sta *__r2
	ldhx *__r2
	lda 1,x
	sta *__r3
	lda ,x
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	bhi X3
	jmp L35
X3:
	.dbline 65
;          {
	.dbline 66
;             tmp=x[i];
	clr *__r0
	lda 2,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add 7,X
	sta *__r1
	lda *__r0
	adc 6,X
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta 2,SP
	lda ,x
	tsx
	sta ,X
	.dbline 67
;             x[i]=x[j];
	clr *__r0
	lda 3,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add 7,X
	sta *__r1
	lda *__r0
	adc 6,X
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	tsx
	sta *__r0
	clr *__r2
	lda 2,X
	sta *__r3
	lsl *__r3
	rol *__r2
	lda *__r3
	add 7,X
	sta *__r3
	lda *__r2
	adc 6,X
	sta *__r2
	lda *__r0
	ldhx *__r2
	sta ,x
	lda *__r1
	sta 1,x
	tsx
	.dbline 68
;             x[j]=tmp; 
	clr *__r0
	lda 3,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add 7,X
	sta *__r1
	lda *__r0
	adc 6,X
	sta *__r0
	lda ,X
	ldhx *__r0
	sta ,x
	lda 2,SP
	sta 1,x
	tsx
	.dbline 69
;          }
L35:
L32:
	.dbline 63
	inc 3,X
L34:
	.dbline 63
	lda 3,X
	cmp #3
	bhs X4
	jmp L31
X4:
L28:
	.dbline 62
	inc 2,X
L30:
	.dbline 62
	lda 2,X
	cmp #3
	bhs X5
	jmp L27
X5:
	.dbline 71
;     
;     return x[1];
	lda 7,X
	add #2
	sta *__r1
	lda 6,X
	adc #0
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	tsx
	sta *__r0
	.dbline -2
L26:
	ais #4
	.dbline 0 ; func end
	rts
	.dbsym l tmp 0 i
	.dbsym l i 2 c
	.dbsym l j 3 c
	.dbsym l x 6 pi
	.dbend
	.dbfunc e TLC2543 _TLC2543 fV
;           temp -> 0,X
;            buf -> 7,X
;        channel -> 5,X
;             cs -> 3,X
_TLC2543::
	.dbline -1
	ais #-1
	tsx
	.dbline 89
; }
; 
; 
; 
; //TLC2543芯片A/D转换子程序(TLC2543.c)--------------------------------------*
; //TLC2543的接线:                                                           *
; //             ① I/O LOCK(18)接MC08HC908GP32的SPSCK(18)                   *
; //             ② DATA INPUT(17)接MC08HC908GP32的MOSI(17)                  *
; //             ③ DATA OUT (16)接MC08HC908GP32的MISO(16)                   *
; //             ④ 0-1片的片选CS(15)接分别接MC08HC908GP32的PTC0~1           *
; //参  数:cs-片号,cs=0~7对应PTC0~7                                         *
; //        channel-通道号0,1,2 ...10  buf-存放数据的首址                    *
; //返  回:内存buf开始连续两个地址为取出的数(高4位、低8位)                *
; //说  明:(070418)将CS_D=0xff;    CS_P=0xff                               *
; //              改为CS_D|=1<<cs;   CS_P|= 1<<cs;以避免影响PTC其他口        *
; //-------------------------------------------------------------------------*
; void TLC2543(INT16U cs,INT16U channel,INT8U *buf)
; {
	.dbline 93
;   INT8U temp;
;   
;   //1 初始化片选信号为1
;   CS_D |=1<<cs;    //定义PTC的第cs引脚为输出
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X7
X6:
	lsl *__r1
	rol *__r0
	dbnza X6
X7:
	clr *__r2
	lda 0x6
	ora *__r1
	sta *__r1
	lda *__r2
	ora *__r0
	mov *__r1,0x6
	.dbline 94
;   CS_P |=1<<cs;	   //C口的第cs引脚为高电平
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X9
X8:
	lsl *__r1
	rol *__r0
	dbnza X8
X9:
	clr *__r2
	lda 0x2
	ora *__r1
	sta *__r1
	lda *__r2
	ora *__r0
	mov *__r1,0x2
	.dbline 97
;   	
;   //2 相应片TLC2543的选CS=0,产生高到低的变化    
;   CS_P &= ~(1<<cs);      
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X11
X10:
	lsl *__r1
	rol *__r0
	dbnza X10
X11:
	com *__r1
	com *__r0
	clr *__r2
	lda 0x2
	and *__r1
	sta *__r1
	lda *__r2
	and *__r0
	mov *__r1,0x2
	.dbline 100
;   
;   //3 写控制字到相应片TLC2543   
;   SPDR = (channel<<4) | 0x0C;//入口通道、16位格式、MSB先送出、二进制
	lda 6,X
	sta *__r1
	lda 5,X
	sta *__r0
	lda #4
X12:
	lsl *__r1
	rol *__r0
	dbnza X12
	lda *__r1
	ora #12
	sta 0x12
L38:
	.dbline 103
L39:
	.dbline 103
;   
;   //4 等待发送器空
;   while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
	brclr #3,0x11,L38
L41:
	.dbline 106
L42:
	.dbline 106
;   
;   //5 等待接收器满
;   while ((SPSCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1
	brclr #7,0x11,L41
	.dbline 109
;   
;   //6 取出上次转换结果高字节 
;   *buf = SPDR; //*buf中存放的是D11~D4位   
	lda 8,X
	sta *__r1
	lda 7,X
	sta *__r0
	lda 0x12
	ldhx *__r0
	sta ,x
	tsx
	.dbline 110
;   SPDR = *buf;	//上次转换结果低字节(后四位为0),握手信号
	lda 7,X
	ldx 8,X
	psha
	pulh
	lda ,x
	tsx
	sta 0x12
L44:
	.dbline 113
L45:
	.dbline 113
;   
;   //7 等待发送结束  
;   while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
	brclr #3,0x11,L44
L47:
	.dbline 116
L48:
	.dbline 116
;   
;   //8 等待新数据到达
;   while ((SPSCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1 
	brclr #7,0x11,L47
	.dbline 119
;   
;   //9 取出上次转换结果的低4位 
;   *(buf+1) = SPDR;// *(buf+1)中存放D3~D0位(后四位为0)
	lda 8,X
	add #1
	sta *__r1
	lda 7,X
	adc #0
	sta *__r0
	lda 0x12
	ldhx *__r0
	sta ,x
	tsx
	.dbline 122
;   
;   //10 TLC2543片选CS=1   
;   CS_P |=1<<cs;
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X14
X13:
	lsl *__r1
	rol *__r0
	dbnza X13
X14:
	clr *__r2
	lda 0x2
	ora *__r1
	sta *__r1
	lda *__r2
	ora *__r0
	mov *__r1,0x2
	.dbline 125
;   	    
;   //11 整合后*buf存放高四位(D11~D8),*(buf+1)中存放低八位(D7~D0) 
;   *(buf+1) = (*(buf+1)>>4) | (*buf<<4);    
	lda 8,X
	add #1
	sta *__r1
	lda 7,X
	adc #0
	sta *__r0
	lda 7,X
	ldx 8,X
	psha
	pulh
	lda ,x
	nsa
	and #-16
	sta *__r2
	ldhx *__r0
	lda ,x
	sta *__r4
	lda #4
X15:
	lsr *__r4
	dbnza X15
	lda *__r4
	ora *__r2
	ldhx *__r0
	sta ,x
	tsx
	.dbline 126
;   *buf = *buf>>4;    
	lda 7,X
	ldx 8,X
	psha
	pulh
	lda ,x
	tsx
	sta *__r0
	lda #4
X16:
	lsr *__r0
	dbnza X16
	mov *__r0,*__r1
	lda 8,X
	sta *__r3
	lda 7,X
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	.dbline -2
L37:
	ais #1
	.dbline 0 ; func end
	rts
	.dbsym l temp 0 c
	.dbsym l buf 7 pc
	.dbsym l channel 5 i
	.dbsym l cs 3 i
	.dbend

⌨️ 快捷键说明

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