第一个跳变沿还是第二个跳变沿数据有效,程序是不同的,下面程序供参考
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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)