93c66与spi驱动程序

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SPI总线在单片机系统中的实现

2007-04-28 10:56

来源:mcuzb

//-----------------------函数声明,变量定义------------------------------------------#include

#include

sbit SCK=P1^0; // 将p1.0口模拟时sbit MOSI=P1^1; // 将p1.1口模拟主机sbit MISO=P1^2; // 将p1.2口模拟主机sbit SS1=P1^3; // 将p1.3口模拟片

#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则发送位 {

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 if(MISO == 1)

tdata = tdata|0x01; // 若接收到的位为1,则数据的最后一位置1

else

tdata = tdata&0xfe; // 否则数据的最后一位置0

}

{

if((ch&0x80) == 0x80) // 若要发送的数据最高位为

{

MOSI = 1; // 传送位1

}

else

{

MOSI = 0; // 否则传送位0

}

ch = ch<<1; // 数据左移一位

}

SCK=1;

}

return(tdata);

93C46/93c06/93c56/93c66/93c86的驱动程序(C51)

时间:2007-04-03 来源: 作者: 点击:1140 字体大小:【大中小】

/*————————————————————

〖说明〗SPI总线驱动程序包括的普通封装标准模式,特殊封装标准模式

默认11.0592Mhz的晶振。

〖文件〗93CXX.C ﹫2003/5/12

—————————————————————*/

/*通用93c06-93c86系列使用说明

93c06=93c4693c56=93c6693c76=93c86

dipx 可以自行定义*/

#include "reg51.h"

#include "intrins.h"

/*-----------------------------------------------------

SPI 93cXX系列时序函数调用(普通封装)

调用方式:自行定义﹫2001/05/12

函数说明:私有函数,封装各接口定义

-----------------------------------------------------*/

#define di_93 dip3

#define sk_93 dip2

#define cs_93 dip1

#define do_93 dip4

相关文档
最新文档