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

📄 assist~1.lst

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
  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 + -