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);				
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值