用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

}

这是我复制的,一搜一大堆轮裂

#include <reg52.h>

sbit SPI_DI =P0^1//MMC数据输入

sbit SPI_DO =P0^0//MMC数据输出,可不接

sbit SPI_SCL=P0^2//时钟线

void Write_Byte(unsigned char value)

{

unsigned char i

for (i=0i<8i++)

{

if (((value>>(7-i))&0x01)==0x01)

SPI_DI=1

else SPI_DI=0

SPI_SCL=0

delay(5)

/念桐缓/必须要加延时,否则会因为 *** 作太快而不响应。

SPI_SCL=1

delay(5)

//必须要加延时,否则会因为仔模 *** 作太快而不响应。

}

}

unsigned char Read_Byte()

{

unsigned char temp=0

unsigned char i

for (i=0i<8i++)

{

SPI_DO=1

SPI_SCL=0

delay(5)

temp=(temp<<1)+(unsigned char)SPI_DO

SPI_SCL=1

delay(5)

}

return (temp)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存