hcn 你好。。。。我按照你提供的资料重新写了个简单的测试程序。。。我P1口是接了八个LED的。。。
调用命令0x06,写入数据0x55。。。然后读取376返回的数据。。。。如果数据为55的取反就证明376有正常工作,如果不是则证明376没有正常工作。。。。得到的数据依然是0x00。
以下是全部代码。。。。。现在的代码就简单多了
#include #include #include
sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5;
typedef signed char INT8; typedef signed int INT16; typedef signed long INT32;
typedef unsigned char UINT8; typedef unsigned int UINT16; typedef unsigned long UINT32;
#define SPI_SDO P32 //输出引脚 #define SPI_SDI P33 //输入引脚 #define SPI_SCS P34 //片选输入引脚 #define SPI_SCK P35 //输入时钟引脚
void Spi376OutByte(UINT8 d); //SPI输出8个位数据 UINT8 Spi376InByte(void); //SPI输入8个位数据 #define EndCH376Cmd(){SPI_SCS=1;} //SPI片选无效,结束通信 void WriteCH376Cmd(UINT8 mCmd); //向376写命令 void WriteCH376Data(UINTmData); //向376写数据 UINT8 ReadCH376Data(void); //从376读数据 void mDwlay0_5us(void); //延时子程序 void mDelayuS( UINT8 us );
main( ) { UINT8 a; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ; mDwlay0_5us() ;
WriteCH376Cmd(0x06); WriteCH376Data(0x55); a = ReadCH376Data(); if(a==0xaa) { P1=0xaa; } else { P1=a; } while ( 1 ) {
} }
void Spi376OutByte(UINT8 d) //SPI输出8个位数据 { UINT8 i; for(i=0;i<8;i++) { SPI_SCK=0; if(d&0x80)SPI_SDI=1; else SPI_SDI=0; d<<=1; SPI_SCK=1;/*上升沿采样输入*/ } }
UINT8 Spi376InByte(void) //SPI输入8个位数据 { UINT8 i,d; d=0; for(i=0;i<8;i++) { SPI_SCK=0;/*下降沿输出*/ d<<=1; if(SPI_SDO)d++; SPI_SCK=1; } return(d); }
void WriteCH376Cmd(UINT8 mCmd) //向376写命令 { SPI_SCS=1; mDwlay0_5us(); SPI_SCS=0; Spi376OutByte(mCmd); mDwlay0_5us();mDwlay0_5us();mDwlay0_5us(); }
void WriteCH376Data(UINT8 mData) //向376写数据 { Spi376OutByte(mData); }
UINT8 ReadCH376Data(void) //从376读数据 { return(Spi376InByte()); } void mDelayuS( UINT8 us ) { while ( us -- ); /* 24MHz MCS51 */ }
void mDwlay0_5us(void) { UINT8 i=80; while ( i -- ) { mDelayuS( 250 ); mDelayuS( 250 ); mDelayuS( 250 ); mDelayuS( 250 );
} }
返回的不是0x55的取反这说明,单片机与376 SPI通信没有成功。。。。 但我量了376的晶振两脚,每个脚对地都为2V左右,我是5V系统。。。应该晶振有起振。。。 但还是查不出问题出哪里/......