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

来源:互联网 发布:js控制select默认选中 编辑:程序博客网 时间:2024/06/15 21:49

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

 

0 0
原创粉丝点击