MCU编写按bit依次发送和接收的程序示例

1.  依次发送:

void Set_SDI (U32 Index)
{
	if (Index) SDI = 1;
	else SDI = 0;
}

 

void SPI_3W_SET_Cmd (U8 cmd)
{
	U32 kk;
	Set_SDI(0);		//set DC=0, for writting to Command register
	Set_SCL(0);
	Set_SCL(1);
	
	Set_SCL(0);
	for(kk=0;kk<8;kk++)
	{
		if((cmd & 0x80) == 0x80) Set_SDI(1);
		else Set_SDI(0);
		Set_SCL(1);
		Set_SCL(0);
		cmd = cmd <<1;
	}
	// Close open-drain mos
	Set_SCL(1);
	Set_SDI(1);	
}

该示例是按从高bit到低bit的顺序发送,如果想反过来,把

if((cmd & 0x80) == 0x80) Set_SDI(1);
cmd = cmd <<1;

语句更改为

if((cmd & 0x01) == 0x01) Set_SDI(1);
cmd = cmd >>1;

即可。

 

2.  依次接收:

U8 rdT;
rdT=0;
	for(kk=0;kk<8;kk++)
	{
		rdT = rdT<<1;
		Set_SCL(1);
		if(SDO==1) rdT |= 0x01;
		Set_SCL(0);				
	}


 

该示例中SDO为MCU接收pin脚,是bit单位。如果对于8bit或32bit不能位寻址的端口,可以将判断语句更改为

if(rGPEDAT&0x0800) rdT |= 0x01;


 

该示例是先按先高bit后低bit的顺序接收,如果想反过来,语句做如下更改即可

U8 rdT;
rdT =0;
for(kk=0;kk<8;kk++)
{
	rdT = rdT>>1;
	Set_SCL(1);
	if(SDO==1) rdT |= 0x80;
	Set_SCL(0);				
}

 

你可能感兴趣的:(MCU编写按bit依次发送和接收的程序示例)