📄 assist~1.lst
字号:
temp --> X+1
channel --> X+3
cs --> X+4
buff --> X+5
flag --> X+7
i --> X+8
ADValue --> X+11
835D A7 F7 aiS #-9
835F 95 tSX
(0019) }
(0020) //------------------------------------------------------------------*
(0021) /*A/D转换并求平均值(22路)子程序(AD22P.ASM)-----------------------*
(0022) *功能:采集TLC2543(0)-(1)片,共22通道,取16次平均值放入内存ADValue *
(0023) *入口:无 *
(0024) *出口:ADValue--22路通道的16次平均采样值 *
(0025) *调用:TLC2543Z *
(0026) *-----------------------------------------------------------------*/
(0027) void ADC22P(INT16U *ADValue)
(0028) {
8360 6F 07 clr 7,X
8362 20 20 bra 0x8384
(0029) INT8U i,j,flag,buff[2];
(0030) INT8U cs,channel;
(0031) INT16U temp;
(0032) //A/D数据区清0
(0033) for(flag=0;flag<=21;flag++)
(0034) ADValue[flag]=0;
8364 3F 40 clr *__r0
8366 E6 07 ldA 7,X
8368 B7 41 stA *__r1
836A 38 41 lsl *__r1
836C 39 40 rol *__r0
836E B6 41 ldA *__r1
8370 EB 0C add 12,X
8372 B7 41 stA *__r1
8374 B6 40 ldA *__r0
8376 E9 0B adc 11,X
8378 B7 40 stA *__r0
837A 4F clrA
837B 55 40 ldHX *__r0
837D F7 stA 0,X
837E 4F clrA
837F E7 01 stA 1,X
8381 95 tSX
8382 6C 07 inc 7,X
8384 E6 07 ldA 7,X
8386 A1 15 cmp #21
8388 23 DA bls 0x8364
(0035) //启动第0片TLC2543的0通道转换,得到"空数据"--不要
(0036) //对22个通道采集数据,每一路采集16次,16次的数据总和-->ADValue
(0037) for(j=0;j<16;j++)
838A 7F clr 0,X
838B CC 842B jmp 0x842B
(0038) {
838E 6F 07 clr 7,X
(0039) flag=0;
(0040) for(i=0;i<22;i++)
8390 6F 08 clr 8,X
8392 CC 8421 jmp 0x8421
(0041) {
8395 E6 08 ldA 8,X
8397 AE 0B ldX #11
8399 8C clrH
839A 52 div
839B 95 tSX
839C E7 04 stA 4,X
(0042) cs=i/11;
(0043) channel=i%11;
839E E6 08 ldA 8,X
83A0 AE 0B ldX #11
83A2 8C clrH
83A3 52 div
83A4 8B pshH
83A5 86 pulA
83A6 95 tSX
83A7 E7 03 stA 3,X
(0044) TLC2543(cs,channel,buff);
83A9 AF 05 aiX #5
83AB 89 pshX
83AC 8B pshH
83AD 95 tSX
83AE AF 02 aiX #2
83B0 3F 40 clr *__r0
83B2 E6 03 ldA 3,X
83B4 87 pshA
83B5 B6 40 ldA *__r0
83B7 87 pshA
83B8 3F 40 clr *__r0
83BA E6 04 ldA 4,X
83BC 87 pshA
83BD B6 40 ldA *__r0
83BF 87 pshA
83C0 CD 8473 jsr _TLC2543
83C3 A7 06 aiS #6
83C5 95 tSX
(0045) TLC2543(cs,channel,buff);
83C6 AF 05 aiX #5
83C8 89 pshX
83C9 8B pshH
83CA 95 tSX
83CB AF 02 aiX #2
83CD 3F 40 clr *__r0
83CF E6 03 ldA 3,X
83D1 87 pshA
83D2 B6 40 ldA *__r0
83D4 87 pshA
83D5 3F 40 clr *__r0
83D7 E6 04 ldA 4,X
83D9 87 pshA
83DA B6 40 ldA *__r0
83DC 87 pshA
83DD CD 8473 jsr _TLC2543
83E0 A7 06 aiS #6
83E2 95 tSX
(0046) //从内存buff取出数据-->ADValue[flag]中
(0047) temp=*((unsigned int *)buff);
83E3 E6 05 ldA 5,X
83E5 E7 01 stA 1,X
83E7 E6 06 ldA 6,X
83E9 E7 02 stA 2,X
(0048) ADValue[flag]=ADValue[flag]+temp;
83EB 3F 40 clr *__r0
83ED E6 07 ldA 7,X
83EF B7 41 stA *__r1
83F1 38 41 lsl *__r1
83F3 39 40 rol *__r0
83F5 B6 41 ldA *__r1
83F7 EB 0C add 12,X
83F9 B7 41 stA *__r1
83FB B6 40 ldA *__r0
83FD E9 0B adc 11,X
83FF B7 40 stA *__r0
8401 55 40 ldHX *__r0
8403 E6 01 ldA 1,X
8405 B7 43 stA *__r3
8407 F6 ldA 0,X
8408 95 tSX
8409 B7 42 stA *__r2
840B B6 43 ldA *__r3
840D EB 02 add 2,X
840F B7 43 stA *__r3
8411 B6 42 ldA *__r2
8413 E9 01 adc 1,X
8415 55 40 ldHX *__r0
8417 F7 stA 0,X
8418 B6 43 ldA *__r3
841A E7 01 stA 1,X
841C 95 tSX
(0049) flag++;
841D 6C 07 inc 7,X
(0050) }
841F 6C 08 inc 8,X
8421 E6 08 ldA 8,X
8423 A1 16 cmp #22
8425 24 03 bcc 0x842A
8427 CC 8395 jmp 0x8395
(0051) }
842A 7C inc 0,X
842B F6 ldA 0,X
842C A1 10 cmp #16
842E 24 03 bcc 0x8433
8430 CC 838E jmp 0x838E
(0052) //求22路A/D数据的16次平均值
(0053) for(flag=0;flag<=21;flag++)
8433 6F 07 clr 7,X
8435 20 33 bra 0x846A
(0054) ADValue[flag]=ADValue[flag]/16;
8437 3F 40 clr *__r0
8439 E6 07 ldA 7,X
843B B7 41 stA *__r1
843D 38 41 lsl *__r1
843F 39 40 rol *__r0
8441 B6 41 ldA *__r1
8443 EB 0C add 12,X
8445 B7 41 stA *__r1
8447 B6 40 ldA *__r0
8449 E9 0B adc 11,X
844B B7 40 stA *__r0
844D 55 40 ldHX *__r0
844F E6 01 ldA 1,X
8451 B7 43 stA *__r3
8453 F6 ldA 0,X
8454 B7 42 stA *__r2
8456 A6 04 ldA #4
8458 34 42 lsr *__r2
845A 36 43 ror *__r3
845C 4B FA dbnzA 0x83EC
845E B6 42 ldA *__r2
8460 55 40 ldHX *__r0
8462 F7 stA 0,X
8463 B6 43 ldA *__r3
8465 E7 01 stA 1,X
8467 95 tSX
8468 6C 07 inc 7,X
846A E6 07 ldA 7,X
846C A1 15 cmp #21
846E 23 C7 bls 0x8437
8470 A7 09 aiS #9
8472 81 rts
_TLC2543:
temp --> X+0
buf --> X+7
channel --> X+5
cs --> X+3
8473 A7 FF aiS #-1
8475 95 tSX
(0055) }
(0056) /*TLC2543芯片A/D转换子程序(TLC2543.c)--------------------------*
(0057) *TLC2543的接线: *
(0058) * ① I/O LOCK(18)接MC08HC908GP32的SPSCK(18) *
(0059) * ② DATA INPUT(17)接MC08HC908GP32的MOSI(17) *
(0060) * ③ DATA OUT (16)接MC08HC908GP32的MISO(16) *
(0061) * ④ 0-1片的片选CS(15)接分别接MC08HC908GP32的PTC0~1 *
(0062) *入口:cs-片号,channel-通道号0,1,2 ...10 buf-存放数据的首址 *
(0063) *出口:内存buf开始连续两个地址为取出的数(高4位、低8位) *
(0064) *--------------------------------------------------------------*/
(0065) void TLC2543(INT16U cs,INT16U channel,INT8U *buf)
(0066) {
8476 A6 FF ldA #-1
8478 B7 06 stA 0x06
(0067) INT8U temp;
(0068) CS_D=0xff; //定义PTC为输出
(0069) CS_P = 0xff; //C口全为高电平
847A A6 FF ldA #-1
847C B7 02 stA 0x02
(0070) //TLC2543片选CS=1
(0071) CS_P &= ~(1<<cs); //相应片TLC2543的选CS=0,产生高到低的变化
847E 6E 0040 mov #0,*__r0
8481 6E 0141 mov #1,*__r1
8484 E6 04 ldA 4,X
8486 A4 0F and #15
8488 27 06 beq 0x8490
848A 38 41 lsl *__r1
848C 39 40 rol *__r0
848E 4B FA dbnzA 0x84D1
8490 33 41 com *__r1
8492 33 40 com *__r0
8494 3F 42 clr *__r2
8496 B6 02 ldA 0x02
8498 B4 41 and *__r1
849A B7 41 stA *__r1
849C B6 42 ldA *__r2
849E B4 40 and *__r0
84A0 4E 4102 mov *__r1,0x02
(0072)
(0073) SPIDR = (channel<<4) | 0x0C;//入口通道、16位格式、MSB先送出、二进制
84A3 E6 06 ldA 6,X
84A5 B7 41 stA *__r1
84A7 E6 05 ldA 5,X
84A9 B7 40 stA *__r0
84AB A6 04 ldA #4
84AD 38 41 lsl *__r1
84AF 39 40 rol *__r0
84B1 4B FA dbnzA 0x84B5
84B3 B6 41 ldA *__r1
84B5 AA 0C orA #12
84B7 B7 12 stA 0x12
(0074) while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
84B9 07 11FD BRclr 3,0x11,0x84B9
(0075) //发送完毕
(0076) while ((SPISCR & (1<<ReFullBit)) == 0); //为0等待,也就是等待SPRF为1
84BC 0F 11FD BRclr 7,0x11,0x84BC
(0077) //发送控制字,取出上次转换结果高字节
(0078) *buf = SPIDR; //*buf中存放的是D11~D4位
84BF E6 08 ldA 8,X
84C1 B7 41 stA *__r1
84C3 E6 07 ldA 7,X
84C5 B7 40 stA *__r0
84C7 B6 12 ldA 0x12
84C9 55 40 ldHX *__r0
84CB F7 stA 0,X
84CC 95 tSX
(0079) SPIDR = *buf; //上次转换结果低字节(后四位为0),握手信号
84CD E6 07 ldA 7,X
84CF EE 08 ldX 8,X
84D1 87 pshA
84D2 8A pulH
84D3 F6 ldA 0,X
84D4 95 tSX
84D5 B7 12 stA 0x12
(0080) while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
84D7 07 11FD BRclr 3,0x11,0x84D7
(0081) //发送完毕
(0082) while ((SPISCR & (1<<ReFullBit)) == 0); //为0等待,也就是等待SPRF为1
84DA 0F 11FD BRclr 7,0x11,0x84DA
(0083) //接收到数据
(0084) *(buf+1) = SPIDR;// *(buf+1)中存放D3~D0位
84DD E6 08 ldA 8,X
84DF AB 01 add #1
84E1 B7 41 stA *__r1
84E3 E6 07 ldA 7,X
84E5 A9 00 adc #0
84E7 B7 40 stA *__r0
84E9 B6 12 ldA 0x12
84EB 55 40 ldHX *__r0
84ED F7 stA 0,X
84EE 95 tSX
(0085) CS_P= 0xff; //TLC2543片选CS=1
84EF A6 FF ldA #-1
84F1 B7 02 stA 0x02
(0086) //整合后*buf存放高四位(D11~D8),*(buf+1)中存放低八位(D7~D0)
(0087) *(buf+1) = (*(buf+1)>>4) | (*buf<<4);
84F3 E6 08 ldA 8,X
84F5 AB 01 add #1
84F7 B7 41 stA *__r1
84F9 E6 07 ldA 7,X
84FB A9 00 adc #0
84FD B7 40 stA *__r0
84FF E6 07 ldA 7,X
8501 EE 08 ldX 8,X
8503 87 pshA
8504 8A pulH
8505 F6 ldA 0,X
8506 62 nsa
8507 A4 F0 and #-16
8509 B7 42 stA *__r2
850B 55 40 ldHX *__r0
850D F6 ldA 0,X
850E B7 44 stA *__r4
8510 A6 04 ldA #4
8512 34 44 lsr *__r4
8514 4B FC dbnzA 0x8513
8516 B6 44 ldA *__r4
8518 BA 42 orA *__r2
851A 55 40 ldHX *__r0
851C F7 stA 0,X
851D 95 tSX
(0088) *buf = *buf>>4;
851E E6 07 ldA 7,X
8520 EE 08 ldX 8,X
8522 87 pshA
8523 8A pulH
8524 F6 ldA 0,X
8525 95 tSX
8526 B7 40 stA *__r0
8528 A6 04 ldA #4
852A 34 40 lsr *__r0
852C 4B FC dbnzA 0x852B
852E 4E 4041 mov *__r0,*__r1
8531 E6 08 ldA 8,X
8533 B7 43 stA *__r3
8535 E6 07 ldA 7,X
8537 B7 42 stA *__r2
8539 B6 41 ldA *__r1
853B 55 42 ldHX *__r2
853D F7 stA 0,X
853E 95 tSX
853F A7 01 aiS #1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -