终于能通讯了,发个感慨。折磨人啊。我是用SPI进行通讯的,驱动了3路直流电机。
不容易,跟大家分享一下。下面是我的程序,只能提供到此地步了。继续努力弄其他的。
#define SCK P1.2
#define SO P1.0
#define SI P1.1
#define RESET P1.3
void delay(void)
{
unsigned char i;
for(i=0;i<50;i++);
}
void delayms(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++)
;
}
void SPISendByte(unsigned char data)
{
unsigned char n,temp;
temp=data;
for(n=0;n<8;)
{
SCK=0;
if(temp&0x80)
SO=1;
else
SO=0;
delay();
SCK=1;
delay();
n++;
temp=(temp<<1);
}
SCK=0;
}
void main( void )
{
/*添加必要的初始化程序*/
RESET=0; /*先复位*/
SCK=0; /*SCK信号,上电后要输出低*/
SO=0;
delayms(5);
RESET=1;
delayms(5);
SPISendByte(0x5c); /*寄存器控制字*/
SPISendByte(0x00); /*对应寄存器的值*/
delayms(1); /*两帧数据之间要加>1ms的延时,同一帧的两组数据之间不用*/
SPISendByte(0x50); /*通道1*/
SPISendByte(0xc0);
delayms(1);
SPISendByte(0x53);
SPISendByte(0x80);
delayms(1);
SPISendByte(0x54); /*通道2*/
SPISendByte(0xc0);
delayms(1);
SPISendByte(0x57);
SPISendByte(0x80);
delayms(1);
SPISendByte(0x58); /*通道3*/
SPISendByte(0xe0);
delayms(1);
SPISendByte(0x5b);
SPISendByte(0x80);
delayms(1);
delayms(1000);
SPISendByte(0x50); /*通道1停*/
SPISendByte(0x00);
while(1)
{
}
}