打印

硬件spi读取TLC2543数据会位置乱?

[复制链接]
1999|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xu0801hua|  楼主 | 2016-1-8 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下:

/*************************************************************************
* 名称: SPI_MasterInit                                                                                                          
* 功能: SPI主机模式初始化                                                                                                              
* 参数: 无
* 返回: 无                                                                                                          
*************************************************************************/               
void SPI_MasterInit(void)
{
SPCTL  = 0XD1;
SPSTAT = 0XC0;
SPDAT  = 0;
IE2   |= 0X02;
}
/*************************************************************************
* 名称: void SPI_MasterTransmit(uint8_t cData)                                                                                                          
* 功能: SPI主机模式传送数据                                                                                                              
* 参数: cData 要传输的字节数据                                                                                                              
* 返回: SPI接收值                                                                                                          
*************************************************************************/
unsigned char SPI_MasterTransmit(unsigned char cData)
{
// SPISS = 0;                  //拉低从机的SS
SPDAT = cData; //* 启动数据传输
while (!(SPSTAT & SPIF));   //等待发送完成   //等待发送完成//等待传输结束
SPSTAT = SPIF | WCOL;       //清除SPI状态位
// SPISS = 1;                  //拉高从机的SS
return SPDAT;               //返回SPI数据
}

/******************主函数*********************/
void main(void)
{
unsigned char i;
P2M1 =P2M0=0;
P_SW1 = 0X04;
AUXR  = 0X40;
//sfr P_SW1       = 0xA2;             //外设功能切换寄存器1
SPI_MasterInit();
Timer_Init_1();
//TLC2543_Init();//2543初始化函数
while(1)
{
// UART1_Send_Char(0x55);
//for(i=0;i<9;i++)
//{
// aa[i]= Tlc2543_GetAdc(i);
// delay_1(8);
//}
aa[1]= Tlc2543_GetAdc(0);//Read_TLC2543(1);
delay_1(10);
aa[2]= Tlc2543_GetAdc(1);//Read_TLC2543(1);
delay_1(10);
aa[3]= Tlc2543_GetAdc(2);//Read_TLC2543(0);
delay_1(10);
aa[4]= Tlc2543_GetAdc(3);//Read_TLC2543(2);
delay_1(10);
aa[5]= Tlc2543_GetAdc(4);//Read_TLC2543(3);
delay_1(10);
aa[8]= Tlc2543_GetAdc(7);//Read_TLC2543(3);
for(i=0;i<7;i++)
{
AD_data[i]=aa[i];
}
Uart_RX_Tab_1[0]=aa[1]>>8;
Uart_RX_Tab_1[1]=aa[1]&0xff;
Uart_RX_Tab_1[2]=0xaa;
Uart_RX_Tab_1[3]=aa[2]>>8;
Uart_RX_Tab_1[4]=aa[2]&0xff;
Uart_RX_Tab_1[5]=0x55;
Uart_RX_Tab_1[6]=aa[3]>>8;
Uart_RX_Tab_1[7]=aa[3]&0xff;
Uart_RX_Tab_1[8]=0xbb;
Uart_RX_Tab_1[9]=aa[4]>>8;
Uart_RX_Tab_1[10]=aa[4]&0xff;
Uart_RX_Tab_1[11]=0xcc;
Uart_RX_Tab_1[12]=aa[5]>>8;
Uart_RX_Tab_1[13]=aa[5]&0xff;
Uart_RX_Tab_1[14]=0xdd;
Uart_RX_Tab_1[15]=aa[6]>>8;
Uart_RX_Tab_1[16]=aa[6]&0xff;
Uart_RX_Tab_1[17]=0xee;
Uart_RX_Tab_1[18]=aa[7]>>8;
Uart_RX_Tab_1[19]=aa[7]&0xff;
Uart_RX_Tab_1[20]=0xff;
Uart_RX_Tab_1[21]=aa[8]>>8;
Uart_RX_Tab_1[22]=aa[8]&0xff;
UART1_Send_String(Uart_RX_Tab_1,23);
Main_Test();
P26=~P26;
}
}

得到的结果:
07 F0 AA 00 00 55 06 AC BB 05 C8 CC 0A 44 DD 00 00 EE 00 00 FF 00 00
02 C4 AA 0D 38 55 06 BC BB 05 CC CC 0A 48 DD 00 00 EE 00 00 FF 00 04
02 C0 AA 0D 3C 55 06 B8 BB 05 CC CC 0A 4C DD 00 00 EE 00 00 FF 00 04
02 C4 AA 0D 38 55 06 B8 BB 05 C8 CC 0A 48 DD 00 00 EE 00 00 FF 00 00
02 C4 AA 0D 3C 55 06 B4 BB 05 D0 CC 0A 4C DD 00 00 EE 00 00 FF 00 00
02 C4 AA 0D 34 55 06 B8 BB 05 CC CC 0A 4C DD 00 00 EE 00 00 FF 00 04
02 C4 AA 0D 3C 55 06 B8 BB 05 CC CC 0A 4C DD 00 00 EE 00 00 FF 00 00
02 C4 AA 0D 3C 55 06 BC BB 05 CC CC 0A 4C DD 00 00 EE 00 00 FF 00 00
02 C4 AA 0D 3C 55 06 BC BB 05 CC CC 0A 50 DD 00 00 EE 00 00 FF 00 04
02 C0 AA 0D 38 55 06 B8 BB 05 CC CC 0A 4C DD 00 00 EE 00 00 FF 00 00
02 C4 AA 0D 38 55 06 BC BB 05 D0 CC 0A 4C DD 00 00 EE 00 00 FF 00 04
02 C4 AA 0D 3C 55 06 C0 BB 05 D0 CC 0A 48 DD 00 00 EE 00 00 FF 00 04
02 C8 AA 0D 40 55 06 B4 BB 05 D0 CC 0A 4C DD 00 00 EE 00 00 FF 00 00
02 C8 AA 0D 3C 55 06 B8 BB 05 C8 CC 0A 50 DD 00 00 EE 00 00 FF 00 04
02 C0 AA 0D 40 55 06 B8 BB 05 CC CC 0A 4C DD 00 00 EE 00 00 FF 00 04
02 C4 AA 0D 3C 55 06 B8 BB 05 C8 CC 0A 44 DD 00 00 EE 00 00 FF 00 04

“02 C4”是第7通道的值,现在在第一通道的位置上了
“0D 3C”是第0通道的值,现在在第二通道的位置上了
“06 B8”是第1通道的值,现在在第三通道的位置上了
“05 C8”是第2通道的值,现在在第四通道的位置上了

相关帖子

沙发
JY-DX-JY| | 2016-1-9 10:44 | 只看该作者
时序问题吧

使用特权

评论回复
板凳
xu0801hua|  楼主 | 2016-1-9 15:23 | 只看该作者
是stc单片机硬件spi总线,难道是单片机问题?

使用特权

评论回复
地板
urdxg| | 2017-1-11 21:15 | 只看该作者
楼主解决问题了吗?

使用特权

评论回复
5
ar3000a| | 2017-2-27 21:45 | 只看该作者
肯定的回复来了: 换掉单片机吧。此处没有贬低或赞扬某家产品的意思,只是没人说这些问题,始终就是个问题。希望厂家有更容易的渠道能获知并改进问题,而不是推出越来越多而重复的型号。

使用特权

评论回复
6
徕泽| | 2017-2-27 22:10 | 只看该作者
ar3000a 发表于 2017-2-27 21:45
肯定的回复来了: 换掉单片机吧。此处没有贬低或赞扬某家产品的意思,只是没人说这些问题,始终就是个问题。 ...

使用特权

评论回复
7
wukong098| | 2017-3-1 09:36 | 只看该作者
aa[1]= Tlc2543_GetAdc(0);这样的句子再写一次或2次.因为读的是上一通道的数据.2543会有这问题.不过读出的数据末位跳跃有点历害 不知如何解决

使用特权

评论回复
8
xu0801hua|  楼主 | 2017-5-3 08:07 | 只看该作者
wukong098 发表于 2017-3-1 09:36
aa[1]= Tlc2543_GetAdc(0);这样的句子再写一次或2次.因为读的是上一通道的数据.2543会有这问题.不过读出的 ...

这和硬件有关系,你可以采用软件进行滤波

使用特权

评论回复
9
xu0801hua|  楼主 | 2018-9-4 08:49 | 只看该作者
以上的问题我已解决,现上传驱动代码,作为参考;此驱动是采用模拟的SPI

TLC2543-模拟SPI.rar

1.71 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

81

帖子

1

粉丝