📄 adc11p.lis
字号:
0103 ; cs -> 3,X
0103 _TLC2543::
0103 .dbline -1
0103 A7FF ais #-1
0105 95 tsx
0106 .dbline 60
0106 ; ADValue[flag]=ADValue[flag]/16;
0106 ; }
0106 ;
0106 ; //TLC2543芯片A/D转换子程序(TLC2543.c)--------------------------------------*
0106 ; //TLC2543的接线: *
0106 ; // ① I/O LOCK(18)接MC08HC908GP32的SPSCK(18) *
0106 ; // ② DATA INPUT(17)接MC08HC908GP32的MOSI(17) *
0106 ; // ③ DATA OUT (16)接MC08HC908GP32的MISO(16) *
0106 ; // ④ 0-1片的片选CS(15)接分别接MC08HC908GP32的PTC0~1 *
0106 ; //参 数:cs-片号,cs=0~7对应PTC0~7 *
0106 ; // channel-通道号0,1,2 ...10 buf-存放数据的首址 *
0106 ; //返 回:内存buf开始连续两个地址为取出的数(高4位、低8位) *
0106 ; //说 明:(070418)将CS_D=0xff; CS_P=0xff *
0106 ; // 改为CS_D|=1<<cs; CS_P|= 1<<cs;以避免影响PTC其他口 *
0106 ; //-------------------------------------------------------------------------*
0106 ; void TLC2543(INT16U cs,INT16U channel,INT8U *buf)
0106 ; {
0106 .dbline 64
0106 ; INT8U temp;
0106 ;
0106 ; //1 初始化片选信号为1
0106 ; CS_D |=1<<cs; //定义PTC的第cs引脚为输出
0106 6E0000 mov #0,*__r0
0109 6E0100 mov #1,*__r1
010C E604 lda 4,X
010E A40F and #15
0110 2706 beq X3
0112 X2:
0112 3800 lsl *__r1
0114 3900 rol *__r0
0116 4BFA dbnza X2
0118 X3:
0118 3F00 clr *__r2
011A B606 lda 0x6
011C BA00 ora *__r1
011E B700 sta *__r1
0120 B600 lda *__r2
0122 BA00 ora *__r0
0124 4E0006 mov *__r1,0x6
0127 .dbline 65
0127 ; CS_P |=1<<cs; //C口的第cs引脚为高电平
0127 6E0000 mov #0,*__r0
012A 6E0100 mov #1,*__r1
012D E604 lda 4,X
012F A40F and #15
0131 2706 beq X5
0133 X4:
0133 3800 lsl *__r1
0135 3900 rol *__r0
0137 4BFA dbnza X4
0139 X5:
0139 3F00 clr *__r2
013B B602 lda 0x2
013D BA00 ora *__r1
013F B700 sta *__r1
0141 B600 lda *__r2
0143 BA00 ora *__r0
0145 4E0002 mov *__r1,0x2
0148 .dbline 68
0148 ;
0148 ; //2 相应片TLC2543的选CS=0,产生高到低的变化
0148 ; CS_P &= ~(1<<cs);
0148 6E0000 mov #0,*__r0
014B 6E0100 mov #1,*__r1
014E E604 lda 4,X
0150 A40F and #15
0152 2706 beq X7
0154 X6:
0154 3800 lsl *__r1
0156 3900 rol *__r0
0158 4BFA dbnza X6
015A X7:
015A 3300 com *__r1
015C 3300 com *__r0
015E 3F00 clr *__r2
0160 B602 lda 0x2
0162 B400 and *__r1
0164 B700 sta *__r1
0166 B600 lda *__r2
0168 B400 and *__r0
016A 4E0002 mov *__r1,0x2
016D .dbline 71
016D ;
016D ; //3 写控制字到相应片TLC2543
016D ; SPDR = (channel<<4) | 0x0C;//入口通道、16位格式、MSB先送出、二进制
016D E606 lda 6,X
016F B700 sta *__r1
0171 E605 lda 5,X
0173 B700 sta *__r0
0175 A604 lda #4
0177 X8:
0177 3800 lsl *__r1
0179 3900 rol *__r0
017B 4BFA dbnza X8
017D B600 lda *__r1
017F AA0C ora #12
0181 B712 sta 0x12
0183 L19:
0183 .dbline 74
0183 L20:
0183 .dbline 74
0183 ;
0183 ; //4 等待发送器空
0183 ; while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
0183 0711FD brclr #3,0x11,L19
0186 L22:
0186 .dbline 77
0186 L23:
0186 .dbline 77
0186 ;
0186 ; //5 等待接收器满
0186 ; while ((SPSCR & (1<<ReFullBit)) == 0); //为0等待,也就是等待SPRF为1
0186 0F11FD brclr #7,0x11,L22
0189 .dbline 80
0189 ;
0189 ; //6 取出上次转换结果高字节
0189 ; *buf = SPDR; //*buf中存放的是D11~D4位
0189 E608 lda 8,X
018B B700 sta *__r1
018D E607 lda 7,X
018F B700 sta *__r0
0191 B612 lda 0x12
0193 5500 ldhx *__r0
0195 F7 sta ,x
0196 95 tsx
0197 .dbline 81
0197 ; SPDR = *buf; //上次转换结果低字节(后四位为0),握手信号
0197 E607 lda 7,X
0199 EE08 ldx 8,X
019B 87 psha
019C 8A pulh
019D F6 lda ,x
019E 95 tsx
019F B712 sta 0x12
01A1 L25:
01A1 .dbline 84
01A1 L26:
01A1 .dbline 84
01A1 ;
01A1 ; //7 等待发送结束
01A1 ; while ((SPSCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
01A1 0711FD brclr #3,0x11,L25
01A4 L28:
01A4 .dbline 87
01A4 L29:
01A4 .dbline 87
01A4 ;
01A4 ; //8 等待新数据到达
01A4 ; while ((SPSCR & (1<<ReFullBit)) == 0); //为0等待,也就是等待SPRF为1
01A4 0F11FD brclr #7,0x11,L28
01A7 .dbline 90
01A7 ;
01A7 ; //9 取出上次转换结果的低4位
01A7 ; *(buf+1) = SPDR;// *(buf+1)中存放D3~D0位(后四位为0)
01A7 E608 lda 8,X
01A9 AB01 add #1
01AB B700 sta *__r1
01AD E607 lda 7,X
01AF A900 adc #0
01B1 B700 sta *__r0
01B3 B612 lda 0x12
01B5 5500 ldhx *__r0
01B7 F7 sta ,x
01B8 95 tsx
01B9 .dbline 93
01B9 ;
01B9 ; //10 TLC2543片选CS=1
01B9 ; CS_P |=1<<cs;
01B9 6E0000 mov #0,*__r0
01BC 6E0100 mov #1,*__r1
01BF E604 lda 4,X
01C1 A40F and #15
01C3 2706 beq X10
01C5 X9:
01C5 3800 lsl *__r1
01C7 3900 rol *__r0
01C9 4BFA dbnza X9
01CB X10:
01CB 3F00 clr *__r2
01CD B602 lda 0x2
01CF BA00 ora *__r1
01D1 B700 sta *__r1
01D3 B600 lda *__r2
01D5 BA00 ora *__r0
01D7 4E0002 mov *__r1,0x2
01DA .dbline 96
01DA ;
01DA ; //11 整合后*buf存放高四位(D11~D8),*(buf+1)中存放低八位(D7~D0)
01DA ; *(buf+1) = (*(buf+1)>>4) | (*buf<<4);
01DA E608 lda 8,X
01DC AB01 add #1
01DE B700 sta *__r1
01E0 E607 lda 7,X
01E2 A900 adc #0
01E4 B700 sta *__r0
01E6 E607 lda 7,X
01E8 EE08 ldx 8,X
01EA 87 psha
01EB 8A pulh
01EC F6 lda ,x
01ED 62 nsa
01EE A4F0 and #-16
01F0 B700 sta *__r2
01F2 5500 ldhx *__r0
01F4 F6 lda ,x
01F5 B700 sta *__r4
01F7 A604 lda #4
01F9 X11:
01F9 3400 lsr *__r4
01FB 4BFC dbnza X11
01FD B600 lda *__r4
01FF BA00 ora *__r2
0201 5500 ldhx *__r0
0203 F7 sta ,x
0204 95 tsx
0205 .dbline 97
0205 ; *buf = *buf>>4;
0205 E607 lda 7,X
0207 EE08 ldx 8,X
0209 87 psha
020A 8A pulh
020B F6 lda ,x
020C 95 tsx
020D B700 sta *__r0
020F A604 lda #4
0211 X12:
0211 3400 lsr *__r0
0213 4BFC dbnza X12
0215 4E0000 mov *__r0,*__r1
0218 E608 lda 8,X
021A B700 sta *__r3
021C E607 lda 7,X
021E B700 sta *__r2
0220 B600 lda *__r1
0222 5500 ldhx *__r2
0224 F7 sta ,x
0225 95 tsx
0226 .dbline -2
0226 L18:
0226 A701 ais #1
0228 .dbline 0 ; func end
0228 81 rts
0229 .dbsym l temp 0 c
0229 .dbsym l buf 7 pc
0229 .dbsym l channel 5 i
0229 .dbsym l cs 3 i
0229 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -