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

📄 adc11p.s

📁 为日本瑞萨苏州分公司做的一个温控系统
💻 S
字号:
	.module ADC11P.c
	.area text
	.dbfile ADC11P.c
	.dbfunc e ADC11P _ADC11P fV
;              j -> 0,X
;              i -> 1,X
;           temp -> 2,X
;          ADVal -> 4,X
;           buff -> 26,X
;           flag -> 28,X
;        channel -> 29,X
;        ADValue -> 33,X
;             cs -> 32,X
_ADC11P::
	.dbline -1
	ais #-30
	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 23
; 	INT8U i,j,channel,flag,buff[2]; 
;     INT16U temp; 
;     INT16U ADVal[11]; 
;     
;     for(i=0;i<11;i++)
	clr 1,X
	bra L5
L2:
	.dbline 24
	clr *__r0
	lda 1,X
	sta *__r1
	lsl *__r1
	rol *__r0
	aix #4
	sthx *__r2
	tsx
	lda *__r1
	add *__r3
	sta *__r3
	lda *__r0
	adc *__r2
	sta *__r2
	lda *__r1
	add 34,X
	sta *__r1
	lda *__r0
	adc 33,X
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	ldhx *__r2
	sta ,x
	lda *__r1
	sta 1,x
	tsx
L3:
	.dbline 23
	inc 1,X
L5:
	.dbline 23
	lda 1,X
	cmp #11
	blo L2
	.dbline 26
;        ADVal[i]=ADValue[i];
;     //1 将A/D数据存放区清0   
;     for(flag=0;flag<=10;flag++)      
	clr 28,X
	bra L9
L6:
	.dbline 27
	aix #4
	sthx *__r0
	tsx
	clr *__r2
	lda 28,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
L7:
	.dbline 26
	inc 28,X
L9:
	.dbline 26
	lda 28,X
	cmp #10
	bls L6
	.dbline 31
;     	ADVal[flag]=0; 
;     	
;     
;     //3 对11个通道采集数据,每一路采集16次,16次的数据总和-->ADValue   
;     for(j=1;j<=20;j++)   
	lda #1
	sta ,X
	jmp L13
L10:
	.dbline 32
;     {  
	.dbline 33
;       flag=0; 
	clr 28,X
	.dbline 35
;       //3.1第0片TLC2543的0~10通道转换      
;       for(channel=0;channel<=10;channel++)      
	clr 29,X
	bra L17
L14:
	.dbline 36
	.dbline 38
	aix #26
	pshx
	pshh
	tsx
	aix #2
	clr *__r0
	lda 29,X
	psha
	lda *__r0
	psha
	clr *__r0
	lda 32,X
	psha
	lda *__r0
	psha
	jsr _TLC2543
	ais #6
	tsx
	.dbline 39
	aix #26
	pshx
	pshh
	tsx
	aix #2
	clr *__r0
	lda 29,X
	psha
	lda *__r0
	psha
	clr *__r0
	lda 32,X
	psha
	lda *__r0
	psha
	jsr _TLC2543
	ais #6
	tsx
	.dbline 41
	lda 26,X
	sta 2,X
	lda 27,X
	sta 3,X
	.dbline 42
	aix #4
	sthx *__r0
	tsx
	clr *__r2
	lda 28,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 3,X
	sta *__r3
	lda *__r2
	adc 2,X
	ldhx *__r0
	sta ,x
	lda *__r3
	sta 1,x
	tsx
	.dbline 43
	inc 28,X
	.dbline 44
L15:
	.dbline 35
	inc 29,X
L17:
	.dbline 35
	lda 29,X
	cmp #10
	bhi X0
	jmp L14
X0:
	.dbline 45
L11:
	.dbline 31
	inc ,X
L13:
	.dbline 31
	lda ,X
	cmp #20
	bhi X1
	jmp L10
X1:
	.dbline 48
;       {    
;         //3.1.1将通道j的AD转换结果存入内存buff     
;         TLC2543(cs,channel,buff);   //得到"空数据"--不要
;         TLC2543(cs,channel,buff);        
;         //3.1.2从内存buff取出数据-->ADValue[flag]中         
;         temp=*((unsigned int *)buff);         
;         ADVal[flag]=ADVal[flag]+temp;
;         flag++;    
;       }
;     } 
;        
;     //4 求22路A/D数据的16次平均值   
;     for(flag=0;flag<=10;flag++)     
	clr 28,X
	bra L21
L18:
	.dbline 49
	aix #4
	sthx *__r0
	tsx
	clr *__r2
	lda 28,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
	mov *__r3,*__rlo
	mov *__r2,*__rhi
	lda #20
	psha
	clra
	psha
	jsr __divmod16u
	ais #2
	mov *__rhi,*__r2
	mov *__rlo,*__r3
	lda *__r2
	ldhx *__r0
	sta ,x
	lda *__r3
	sta 1,x
	tsx
L19:
	.dbline 48
	inc 28,X
L21:
	.dbline 48
	lda 28,X
	cmp #10
	bls L18
	.dbline 50
;        ADVal[flag]=ADVal[flag]/20;
;     for(i=0;i<11;i++)
	clr 1,X
	bra L25
L22:
	.dbline 51
	clr *__r0
	lda 1,X
	sta *__r1
	lsl *__r1
	rol *__r0
	aix #4
	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 34,X
	sta *__r1
	lda *__r0
	adc 33,X
	sta *__r0
	lda *__r2
	ldhx *__r0
	sta ,x
	lda *__r3
	sta 1,x
	tsx
L23:
	.dbline 50
	inc 1,X
L25:
	.dbline 50
	lda 1,X
	cmp #11
	blo L22
	.dbline -2
L1:
	ais #30
	.dbline 0 ; func end
	rts
	.dbsym l j 0 c
	.dbsym l i 1 c
	.dbsym l temp 2 i
	.dbsym l ADVal 4 A[22:11]i
	.dbsym l buff 26 A[2:2]c
	.dbsym l flag 28 c
	.dbsym l channel 29 c
	.dbsym l ADValue 33 pi
	.dbsym l cs 32 c
	.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 67
;       ADValue[i] =ADVal[i];
; }
; 
; //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 71
;   INT8U temp;
;   
;   //1 初始化片选信号为1
;   CS_D |=1<<cs;    //定义PTC的第cs引脚为输出
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X3
X2:
	lsl *__r1
	rol *__r0
	dbnza X2
X3:
	clr *__r2
	lda 0x6
	ora *__r1
	sta *__r1
	lda *__r2
	ora *__r0
	mov *__r1,0x6
	.dbline 72
;   CS_P |=1<<cs;	   //C口的第cs引脚为高电平
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X5
X4:
	lsl *__r1
	rol *__r0
	dbnza X4
X5:
	clr *__r2
	lda 0x2
	ora *__r1
	sta *__r1
	lda *__r2
	ora *__r0
	mov *__r1,0x2
	.dbline 75
;   	
;   //2 相应片TLC2543的选CS=0,产生高到低的变化    
;   CS_P &= ~(1<<cs);      
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X7
X6:
	lsl *__r1
	rol *__r0
	dbnza X6
X7:
	com *__r1
	com *__r0
	clr *__r2
	lda 0x2
	and *__r1
	sta *__r1
	lda *__r2
	and *__r0
	mov *__r1,0x2
	.dbline 78
;   
;   //3 写控制字到相应片TLC2543   
;   SPDR = (channel<<4) | 0x0C;//入口通道、16位格式、MSB先送出、二进制
	lda 6,X
	sta *__r1
	lda 5,X
	sta *__r0
	lda #4
X8:
	lsl *__r1
	rol *__r0
	dbnza X8
	lda *__r1
	ora #12
	sta 0x12
L27:
	.dbline 81
L28:
	.dbline 81
;   
;   //4 等待发送器空
;   while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
	brclr #3,0x11,L27
L30:
	.dbline 84
L31:
	.dbline 84
;   
;   //5 等待接收器满
;   while ((SPSCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1
	brclr #7,0x11,L30
	.dbline 87
;   
;   //6 取出上次转换结果高字节 
;   *buf = SPDR; //*buf中存放的是D11~D4位   
	lda 8,X
	sta *__r1
	lda 7,X
	sta *__r0
	lda 0x12
	ldhx *__r0
	sta ,x
	tsx
	.dbline 88
;   SPDR = *buf;	//上次转换结果低字节(后四位为0),握手信号
	lda 7,X
	ldx 8,X
	psha
	pulh
	lda ,x
	tsx
	sta 0x12
L33:
	.dbline 91
L34:
	.dbline 91
;   
;   //7 等待发送结束  
;   while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
	brclr #3,0x11,L33
L36:
	.dbline 94
L37:
	.dbline 94
;   
;   //8 等待新数据到达
;   while ((SPSCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1 
	brclr #7,0x11,L36
	.dbline 97
;   
;   //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 100
;   
;   //10 TLC2543片选CS=1   
;   CS_P |=1<<cs;
	mov #0,*__r0
	mov #1,*__r1
	lda 4,X
	and #15
	beq X10
X9:
	lsl *__r1
	rol *__r0
	dbnza X9
X10:
	clr *__r2
	lda 0x2
	ora *__r1
	sta *__r1
	lda *__r2
	ora *__r0
	mov *__r1,0x2
	.dbline 103
;   	    
;   //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
X11:
	lsr *__r4
	dbnza X11
	lda *__r4
	ora *__r2
	ldhx *__r0
	sta ,x
	tsx
	.dbline 104
;   *buf = *buf>>4;    
	lda 7,X
	ldx 8,X
	psha
	pulh
	lda ,x
	tsx
	sta *__r0
	lda #4
X12:
	lsr *__r0
	dbnza X12
	mov *__r0,*__r1
	lda 8,X
	sta *__r3
	lda 7,X
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	.dbline -2
L26:
	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 + -