———————–函数声明,变量定义——————————————————–includeinclu
//———————–函数声明,变量界说——————————————————–
#include
#include
sbit SCK=P1^0;// 将p1.0口模仿时钟输出
sbit MOSI=P1^1;// 将p1.1口模仿主机输出
sbit MISO=P1^2;// 将p1.1口模仿主机输入
sbit SS1=P1^3;// 将p1.1口模仿片选
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
//————————————————————————————————–
// 函数称号: SPISendByte
// 进口参数: ch
// 函数功用: 发送一个字节
//————————————————————————————————–
void SPISendByte(unsigned char ch)
{
unsigned char idata n=8;// 向SDA上发送一位数据字节,共八位
SCK = 1 ;//时钟置高
SS1 = 0 ;//挑选从机
while(n–)
{
delayNOP();
SCK = 0 ;//时钟置低
if((ch&0x80) == 0x80)// 若要发送的数据最高位为1则发送位1
{
MOSI = 1;// 传送位1
}
else
{
MOSI = 0;// 不然传送位0
}
delayNOP();
ch = ch<<1;// 数据左移一位
SCK = 1 ;//时钟置高
}
}
//————————————————————————————————–
// 函数称号: SPIreceiveByte
// 回来接纳的数据
// 函数功用: 接纳一字节子程序
//————————————————————————————————–
unsigned char SPIreceiveByte()
{
unsigned char idata n=8;// 从MISO线上读取一上数据字节,共八位
unsigned char tdata;
SCK = 1;//时钟为高
SS1 = 0;//挑选从机
while(n–)
{
delayNOP();
SCK = 0;//时钟为低
delayNOP();
tdata = tdata<<1;// 左移一位,或_crol_(temp,1)
if(MISO == 1)
tdata = tdata|0x01;// 若接纳到的位为1,则数据的最终一方位1
else
tdata = tdata&0xfe;// 不然数据的最终一方位0
SCK=1;
}
return(tdata);
}
//————————————————————————————————–
// 函数称号: SPIsend_receiveByte
// 进口参数: ch
// 回来接纳的数据
// 函数功用:串行输入/输出子程序
//————————————————————————————————–
unsigned char SPIsend_receiveByte(unsigned char ch)
{
unsigned char idata n=8;// 从MISO线上读取一上数据字节,共八位
unsigned char tdata;
SCK = 1;//时钟为高
SS1 = 0;//挑选从机
while(n–)
{
delayNOP();
SCK = 0;//时钟为低
delayNOP();
{
tdata = tdata<<1;// 左移一位,或_crol_(temp,1)
if(MISO == 1)
tdata = tdata|0x01;// 若接纳到的位为1,则数据的最终一方位1
else
tdata = tdata&0xfe;// 不然数据的最终一方位0
}
{
if((ch&0x80) == 0x80)// 若要发送的数据最高位为1则发送位1
{
MOSI = 1;// 传送位1
}
else
{
MOSI = 0;// 不然传送位0
}
ch = ch<<1;// 数据左移一位
}
SCK=1;
}
return(tdata);
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/258421.html