我想用att7022和51读取电流电压有效值。现在spi能写进去数据和命令,但就是读不到数据 是我spiread函数有问题还是?纠结了一天了 代码如下。示波器测试spiwrite函数正常
- SPIRead(unsigned char Cmd)
- {
- unsigned char ucI,ucK,datatemp;
- unsigned char SPIData[3];
-
- SPI_SCS_1 ;
- Delay_US(5);
- SPI_SCS_0 ;
- Delay_US(10);
- SPI_SCK_0 ;
- for(ucI=0;ucI<8;ucI++) //发送读数据命令,下降沿接收数据,高位在前,低位在后
- {
- if( Cmd & 0x80 )
- SPI_MOSI_1;
- else
- SPI_MOSI_0;
- Cmd<<=1;
- SPI_SCK_1 ;
- Delay_US(10);
- SPI_SCK_0 ;
- Delay_US(10);
- }
- SPI_MOSI_0;
- Delay_US(20);
- for(ucK=0;ucK<3;ucK++) //==开始接收数据 24bit Data===
- {
- SPIData[ucK]=0;
- for(ucI=0;ucI<8;ucI++)
- {
- SPIData[ucK]<<=1;
- SPI_SCK_1 ;
- Delay_US(10);
- if(SPI_MISO)
- SPIData[ucK]=SPIData[ucK]|0X80 ;
- SPI_SCK_0 ;
- Delay_US(10);
-
-
- }
- }
- Delay_US(10);
- SPI_SCS_1 ;
- datatemp=ArrayTogether(SPIData,3);
- return datatemp;
- }
复制代码
- long ArrayTogether(unsigned char *temp,unsigned char len)
- {
- long retData;
- unsigned char i;
- retData=0;
- for(i=0;i<len;i++)
- {
- retData=retData<<8;
- retData=retData+(unsigned long)temp[i];
- }
- return retData;
- }
复制代码
测量芯片的晶振和各电压是否正常,芯片是否损坏等
注意:有的7022芯片只支持3.3V电源,51一般是5V电源
内部ID的地址是多少?我在数据手册上没找到
地址为0,你有没有电平转换,51是5V的 芯片是3.3V的
一周热门 更多>