SPI的硬件的确非常好用,但往往我们会遇到不能用硬件的情况,最近写了一个软件模拟的程序,亲测可用,现在贴出来,分享给大家,希望对你们有帮助。(这个程序是针对CPOL=1,CPHA=1的情况,若用于其他情况,请适当修改SCK)
[mw_shl_code=c,true]/**************************************************
函数:SOFT_SPI_RW()
描述: 根据SPI协议,写一字节数据到从机,同时从从机
读出一字节
**************************************************/
u8 SOFT_SPI_RW(u8 byte)
{
u8 i,Temp=0;
for(i=0;i<8;i++) // 循环8次
{
SPI1_SCK = 0; //拉低时钟
if(byte&0x80) SPI1_MOSI = 1; //若最到位为高,则输出高
else SPI1_MOSI = 0; //若最到位为低,则输出低
byte <<= 1; // 低一位移位到最高位
SPI1_SCK = 1; //拉高时钟
Temp <<= 1; //数据左移
if(SPI1_MISO) Temp++; //若从从机接收到高电平,数据自加一
SPI1_SCK = 0; //拉低时钟
}
return (Temp); //返回数据
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>