📄 adc11p.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 + -