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

📄 adc11p.s

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 S
字号:
	.module ADC11P.c
	.area text
	.dbfile ADC11P.c
	.dbfunc e ADC11P _ADC11P fV
;              i -> 0,X
;              j -> 1,X
;           temp -> 2,X
;           buff -> 4,X
;           flag -> 6,X
;        channel -> 7,X
;        ADValue -> 11,X
;             cs -> 10,X
_ADC11P::
	.dbline -1
	ais #-8
	tsx
	.dbline 16
; //-------------------------------------------------------------------------*
; //文件描述:本文件包含了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                                                          *
; //-------------------------------------------------------------------------*
; void ADC11P(INT8U cs,INT16U *ADValue)
; {   
	.dbline 21
; 	INT8U i,j,channel,flag,buff[2]; 
;     INT16U temp; 
;      
;     //1 将A/D数据存放区清0   
;     for(flag=0;flag<=10;flag++)      
	clr 6,X
	bra L5
L2:
	.dbline 22
	clr *__r0
	lda 6,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add 12,X
	sta *__r1
	lda *__r0
	adc 11,X
	sta *__r0
	clra
	ldhx *__r0
	sta ,x
	clra
	sta 1,x
	tsx
L3:
	.dbline 21
	inc 6,X
L5:
	.dbline 21
	lda 6,X
	cmp #10
	bls L2
	.dbline 26
;     	ADValue[flag]=0; 
;     	
;     
;     //3 对11个通道采集数据,每一路采集16次,16次的数据总和-->ADValue   
;     for(j=1;j<=16;j++)   
	lda #1
	sta 1,X
	jmp L9
L6:
	.dbline 27
;     {  
	.dbline 28
;       flag=0; 
	clr 6,X
	.dbline 30
;       //3.1第0片TLC2543的0~10通道转换      
;       for(channel=0;channel<=10;channel++)      
	clr 7,X
	bra L13
L10:
	.dbline 31
	.dbline 33
	aix #4
	pshx
	pshh
	tsx
	aix #2
	clr *__r0
	lda 7,X
	psha
	lda *__r0
	psha
	clr *__r0
	lda 10,X
	psha
	lda *__r0
	psha
	jsr _TLC2543
	ais #6
	tsx
	.dbline 34
	aix #4
	pshx
	pshh
	tsx
	aix #2
	clr *__r0
	lda 7,X
	psha
	lda *__r0
	psha
	clr *__r0
	lda 10,X
	psha
	lda *__r0
	psha
	jsr _TLC2543
	ais #6
	tsx
	.dbline 36
	lda 4,X
	sta 2,X
	lda 5,X
	sta 3,X
	.dbline 37
	clr *__r0
	lda 6,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add 12,X
	sta *__r1
	lda *__r0
	adc 11,X
	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 38
	inc 6,X
	.dbline 39
L11:
	.dbline 30
	inc 7,X
L13:
	.dbline 30
	lda 7,X
	cmp #10
	bls L10
	.dbline 40
L7:
	.dbline 26
	inc 1,X
L9:
	.dbline 26
	lda 1,X
	cmp #16
	bhi X1
	jmp L6
X1:
	.dbline 43
;       {    
;         //3.1.1将通道j的AD转换结果存入内存buff     
;         TLC2543(cs,channel,buff);   //得到"空数据"--不要
;         TLC2543(cs,channel,buff);        
;         //3.1.2从内存buff取出数据-->ADValue[flag]中         
;         temp=*((unsigned int *)buff);         
;         ADValue[flag]=ADValue[flag]+temp;
;         flag++;    
;       }
;     } 
;        
;     //4 求22路A/D数据的16次平均值   
;     for(flag=0;flag<=10;flag++)     
	clr 6,X
	bra L17
L14:
	.dbline 44
	clr *__r0
	lda 6,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add 12,X
	sta *__r1
	lda *__r0
	adc 11,X
	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
L15:
	.dbline 43
	inc 6,X
L17:
	.dbline 43
	lda 6,X
	cmp #10
	bls L14
	.dbline -2
L1:
	ais #8
	.dbline 0 ; func end
	rts
	.dbsym l i 0 c
	.dbsym l j 1 c
	.dbsym l temp 2 i
	.dbsym l buff 4 A[2:2]c
	.dbsym l flag 6 c
	.dbsym l channel 7 c
	.dbsym l ADValue 11 pi
	.dbsym l cs 10 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 60
;        ADValue[flag]=ADValue[flag]/16;
; }
; 
; //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 64
;   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 65
;   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 68
;   	
;   //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 71
;   
;   //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
L19:
	.dbline 74
L20:
	.dbline 74
;   
;   //4 等待发送器空
;   while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
	brclr #3,0x11,L19
L22:
	.dbline 77
L23:
	.dbline 77
;   
;   //5 等待接收器满
;   while ((SPSCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1
	brclr #7,0x11,L22
	.dbline 80
;   
;   //6 取出上次转换结果高字节 
;   *buf = SPDR; //*buf中存放的是D11~D4位   
	lda 8,X
	sta *__r1
	lda 7,X
	sta *__r0
	lda 0x12
	ldhx *__r0
	sta ,x
	tsx
	.dbline 81
;   SPDR = *buf;	//上次转换结果低字节(后四位为0),握手信号
	lda 7,X
	ldx 8,X
	psha
	pulh
	lda ,x
	tsx
	sta 0x12
L25:
	.dbline 84
L26:
	.dbline 84
;   
;   //7 等待发送结束  
;   while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
	brclr #3,0x11,L25
L28:
	.dbline 87
L29:
	.dbline 87
;   
;   //8 等待新数据到达
;   while ((SPSCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1 
	brclr #7,0x11,L28
	.dbline 90
;   
;   //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 93
;   
;   //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 96
;   	    
;   //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 97
;   *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
L18:
	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 + -