用51单片机引脚实现spi功能的程序

用51单片机引脚实现spi功能的程序,第1张

可以的,但SPI接口的器件有多种工作方式,如高位在桥春衡前还是低位在森尺前,空闲时时钟线高电平还是低电平

第一个跳变沿还是第二个跳变沿数据有效,程序是不同的,下面程序供参考

sbit CLK=P2^2

sbit MOSI=P2^3 //发送方方管脚配敏做置

sbit MISO=P2^4

sbit BIT0=ACC^0

sbit BIT7=ACC^7//

void Write(uchar byte)//写数据

{

uchar i

ACC=byte

i=8

while(i)

{

MOSI=BIT7

CLK=1// output 'uchar', MSB to MOSI

_nop_()

_nop_() // shift next bit into MSB..

_nop_()

_nop_()

ACC<<=1

CLK=0 // Set SCK high..

i-- // ..then set SCK low again

_nop_()

}

}

/****************************************************************************************************

/*函数:Read(uchar reg)

/*功能:NRF24L01的读时序

/****************************************************************************************************/

uchar Read(void)

{

uchar i

i=8

sbit BIT0=ACC^0

sbit BIT7=ACC^7

while(i)

{

CLK=1// output 'uchar', MSB to MOSI

_nop_()

_nop_()

_nop_()

_nop_() // shift next bit into MSB..

ACC<<=1

BIT0=MISO

CLK=0 // Set SCK high..

i-- // ..then set SCK low again

_nop_()

//led1=~led1

}

return ACC // return register value

}

void SpiWriteRegister (uchar reg, uchar value)

{

RF_NSEL = 0 // 片选拉低启动SPI通讯

SPI0DAT = (reg|0x80) // 写入1个字节寄存器地址

while( SPIF == 0) // 等待SPI传输完成

SPIF = 0

SPI0DAT = value // 继续写入第二个字节(寄存器值)

while( SPIF == 0) // 等待SPI传输完成

SPIF = 0

RF_NSEL = 1 // 片选拉高结束SPI通讯

}

//-----------------------------------------------------------------------------

//函数描述: SPI读取函数

//相关参数:

//返回信息:

//

//-----------------------------------------------------------------------------

uchar SpiReadRegister (uchar reg)

{

RF_NSEL = 0// 片选拉低启动SPI通讯

SPI0DAT = reg // 写入1个字节的寄存器地址

while( SPIF == 0) // 等待SPI传输完成

SPIF = 0

SPI0DAT = 0xFF // 写一个Dummy字节(因为要读取的话必须用写入来启动一个交换数据的传输),当写入完成后从机的数据也完成了读入。

while( SPIF == 0) // 等待SPI传输配段完成

SPIF = 0

RF_NSEL = 1 // 片选拉高结束SPI通讯

return SPI0DAT// 返回读取的值(在SPI0DAT=0xFF中完成读取)

}

需要注意的是读写 *** 作实际上完成的都是数据的交换,即主机传送1个字节给从机,从机同时传送1个字节给主机。所以读 *** 作看起来像是写数据,但实际上培没誉写入完成后就可以从SPI0DAT中获得从机的察销应答数据了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12543222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存