《飞思卡尔8位单片机MC9S0808程序SPI应用实例.doc》由会员分享,可在线阅读,更多相关《飞思卡尔8位单片机MC9S0808程序SPI应用实例.doc(3页珍藏版)》请在金锄头文库上搜索。
1、(2)编程方法下面给出基于上述电路的A/D采集子程序。SPI编程例*TLC2543芯片A/D转换子程序(TLC2543Z.ASM)-*TLC2543的接线: * I/O LOCK(18)接MC68HC908GP32的SPSCK(18) * DATA INPUT(17)接MC68HC908GP32的MOSI(17) * DATA OUT (16)接MC68HC908GP32的MISO(16) * 0-2片的片选CS(15)接分别接MC68HC908GP32的PTC0 1 2 *入口:A-片号(相应位为0),X-通道号0,1,2 .10 *出口:内存TLC2543D连续两个地址为取出的数(高4位、
2、低8位) *例: * LDA #%11111101 ;第1片TLC2543 * LDX #$2 ;启动2通道转换,取出上一次调用启动的通道数据 * JSR TLC2543 ;取出的数据在内存TLC2543D,TLC2543D+1中 *-*TLC2543: MOV #$FF,PTC ;TLC2543片选CS=1 NOP AND PTC ;相应片TLC2543的选CS=0,产生高到低的变化 STA PTC ;BCLR 4,PTC ;发送控制字,取出上次转换结果高字节 TXA ;入口通道放入控制字的高字节 LDX #$10 MUL ADD #%00001100 ;入口通道、16位格式、MSB先送出、
3、二进制 STA SPDR ;送入SPDR,发送控制字到TLC2543并接收数据 NOP BRCLR 3,SPSCR,* ;为0等待,也就是等待SPTE(即位3)为1 ;发送完毕 BRCLR 7,SPSCR,* ;为0等待,也就是等待SPRF(即位7)为1 LDA SPDR ;取接收的数据 STA TLC2543D ;放入内存 ;取出上次转换结果低字节(后四位为0),送向TLC2543的字节任意 STA SPDR ;送入SPDR,发送控制字到TLC2543并接收数据 NOP BRCLR 3,SPSCR,* ;为0等待,也就是等待SPTE(即位3)为1 ;发送完毕 BRCLR 7,SPSCR,*
4、;为0等待,也就是等待SPRF(即位7)为1 LDA SPDR ;取接收的数据 STA TLC2543D+1 ;放入内存 MOV #$FF,PTC ;TLC2543片选CS=1;使TLC2543D放高4位,TLC2543D+1放低8位 LDA #$F0 AND TLC2543D+1 NSA STA TLC2543D+1 LDA TLC2543D AND #$0F NSA ORA TLC2543D+1 STA TLC2543D+1 LDA TLC2543D AND #$F0 NSA STA TLC2543D RTS(3)应用举例下列程序段利用上述子程序实现33路A/D数据的采集,并进行平均值滤波
5、。每一路取16次求平均。SPI编程例*A/D转换并求平均值(33路)子程序(AD66P.ASM)-*功能:采集TLC2543(0)-(2)片,共33通道,取16次平均值放入内存ADValue * 开始的地址中 *入口:无 *调用:TLC2543Z *占用内存:第0页R0,R1,R2,R3 *-*AD33P: ;A/D数据区清零 LDHX #$0 MOV #!66,R0 LDA #$00AD_0: STA ADValue,X AIX #$1 DBNZ R0,AD_0 MOV #!16,R3 ;采集次数AD16: MOV #!00,R0 ;存放A/D数据的内存的基值 MOV #%11111110,
6、R1 ;初始片号:第0片 MOV #$00,R2 ;初始通道号ADPP: LDA R1 ;R1决定哪一片TLC2543 LDX #$0 ;启动0通道转换,取出空数据,不要 JSR TLC2543 ;取出的数据在内存TLC2543D,TLC2543D+1中ADP0: ;TLC2543的入口为A、X LDA R1 ;R1决定是哪一片TLC2543 INC R2 ;通道号+1 LDX R2 ;启动R2通道转换,取出R2-1通道数据 CPX #!11 BLO ADP2 ;小于转移ADP1: LDHX #$00 STX R2 ;R2为0作为完成一片标志ADP2: JSR TLC2543 ;取出的数据在内
7、存TLC2543D,TLC2543D+1中 LDA TLC2543D+1 ;低8位-A LDX R0 ;地址基值 INCX ;移到低8位上 ADD ADValue,X ;与上次低8位相加 STA ADValue,X ;放回原处 DECX ;地址退1,回到高8位 LDA TLC2543D ;取出高4位-A ADC ADValue,X ;与高位带进位相加 STA ADValue,X ;放回原处 INC R0 ;地址基值+2 INC R0 LDX R2 CBEQX #$00,ADP3 ;若为0,下一片TLC2543 BRA ADP0ADP3: LDA R1 ;下一片片号 SEC ROLA STA R
8、1 CBEQA #%11110111,ADP6 ;完成3片一次采集 BRA ADPPADP6: ;完成3片一次采集,继续 DBNZ R3,AD16;求16次平均 MOV #$00,R0 MOV #!33,R1 ;共33路ADP7: LDX R0 INCX LDA ADValue,X AND #$F0 NSA STA ADValue,X DECX LDA ADValue,X NSA PSHA AND #$0F STA ADValue,X ;高4位完成 PULA AND #$F0 INCX ADD ADValue,X STA ADValue,X ;低8位完成 INC R0 ;基址+2 INC R0 DBNZ R1,ADP7RTS