历史上的今天
返回首页

历史上的今天

今天是:2025年05月28日(星期三)

正在发生

2021年05月28日 | 93C46/93c06/93c46/93c56/93c66/93c86的驱动程序(C51)

2021-05-28 来源:eefocus

简介:SPI总线驱动程序 包括的普通封装标准模式,特殊封装标准模式 。


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

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

93c06=93c4693c56=93c6693c76=93c86

dipx 可以自行定义*/

#include "reg51.h"

#include "intrins.h"

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

SPI93cXX系列时序函数调用(普通封装)

调用方式:自行定义

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

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

#define di_93 dip3

#define sk_93 dip2

#define cs_93 dip1

#define do_93 dip4

#define gnd_93 dip5

#define org_93 dip6

sbit cs_93=P1^0;

sbit sk_93=P1^1;

sbit di_93=P1^2;

sbit do_93=P1^3;

sbit org_93=P0^4;

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

SPI93cXX系列时序函数调用(普通封装)

调用方式:void high46(void) ---高8位函数调用

void low46(void) ---低8位函数调用

函数说明:私有函数,SPI专用93c46普通封装驱动程序

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

void high46(void)

{

di_93=1;

sk_93=1; _nop_();

sk_93=0;_nop_();

}

void low46(void)

{

di_93=0;

sk_93=1;_nop_();

sk_93=0;_nop_();

}

void wd46(unsigned char dd)

{

unsigned char i;

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

{

if (dd>=0x80) high46();

else low46();

dd=dd<<1;

}

}

unsigned char rd46(void)

{

unsigned char i,dd;

do_93=1;

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

{

dd<<=1;

sk_93=1;_nop_();

sk_93=0;_nop_();

if (do_93) dd|=1;

}

return(dd);

}

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

SPI93cXX系列时序函数调用(特殊封装)

调用方式:自行定义

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

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

#define di_93a dip5

#define sk_93a dip4

#define cs_93a dip3

#define do_93a dip6

#define gnd_93a dip7

#define vcc_93a out_vcc(2)

sbit cs_93a=P1^0;

sbit sk_93a=P1^1;

sbit di_93a=P1^2;

sbit do_93a=P1^3;

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

SPI93cXX系列时序函数调用(特殊封装)

调用方式:void high46a(void) ---高8位函数调用

void low46a(void) ---低8位函数调用

函数说明:私有函数,SPI专用93c46特殊封装驱动程序

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

void high46a(void)

{

di_93a=1;

sk_93a=1;_nop_();

sk_93a=0;_nop_();

}

void low46a(void)

{

di_93a=0;

sk_93a=1;_nop_();

sk_93a=0;

_nop_();

}

void wd46a(unsigned char dd)

{

unsigned char i;

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

{

if (dd>=0x80) high46a();

else low46a();

dd=dd<<1;

}

}

unsigned char rd46a(void)

{

unsigned char i,dd;

do_93a=1;

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

{

dd<<=1;

sk_93a=1;_nop_();

sk_93a=0;_nop_();

if (do_93a) dd|=1;

}

return(dd);

}

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

SPI93c46系列函数调用(举例)

调用方式:bit write93c56_word(unsigned int address,unsigned int dat)

函数说明:私有函数,SPI专用

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

void ewen46(void)

{

_nop_();

cs_93=1;

high46();

wd46(0x30);

cs_93=0;

}

unsigned int read93c46_word(unsigned char address)

{

unsigned int dat;

unsigned char dat0,dat1;

gnd_93a=0;

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;_nop_();

address=address>>1;

address=address|0x80;

address=address|0x80;

high46();

wd46(address);

dat1=rd46();

dat0=rd46();

cs_93=0;

dat=dat1*256+dat0;

return(dat);

}

bit write93c46_word(unsigned char address,unsigned int dat)

{

unsigned char e,temp=address;

e=0;

while (e<3)

{

gnd_93a=0;

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;

ewen46();

_nop_();

cs_93=1;

_nop_();

high46();

address|=0x80;

address>>=1;//??

address|=0x40;

wd46(address);

wd46(dat/256);

wd46(dat%256);

cs_93=0;

_nop_();

cs_93=1;

time=0;do_93=1;

while (1)

{

if (do_93==1) break;

if (time>20) break;

}

cs_93=0;

if (read93c46_word(temp)==dat)

{

return(0);

}

e++;

}

return(1);

}

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

SPI93c57系列函数调用(举例)

调用方式:bit write93c57_word(unsigned int address,unsigned int dat)

函数说明:私有函数,SPI专用

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

void ewen57(void)

{

_nop_();

cs_93=1;

dip7=0;

high46();

low46();

wd46(0x60);

cs_93=0;

}

unsigned int read93c57_word(unsigned int address)

{

unsigned int dat;

unsigned char dat0,dat1;

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;

address=address>>1;

high46();

high46();

wd46(address);

dat1=rd46();

dat0=rd46();

cs_93=0;

dat=dat1*256+dat0;

return(dat);

}

bit write93c57_word(unsigned int address,unsigned int dat)

{

unsigned char e;

unsigned int temp=address;

e=0;

while (e<3)

{

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;

ewen57();

cs_93=1;

_nop_();

high46();

low46();

address>>=1;

address|=0x80;

wd46(address);

wd46(dat/256);

wd46(dat%256);

cs_93=0;

_nop_();

cs_93=1;

time=0;

do_93=1;

while (1)

{

if (do_93==1) break;

if (time>20) break;

}

cs_93=0;

if (read93c57_word(temp)==dat)

{

return(0);

}

e++;

}

return(1);

}

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

SPI93c56系列函数调用(举例)

调用方式:bit write93c56_word(unsigned int address,unsigned int dat)

函数说明:私有函数,SPI专用

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

void ewen56(void)

{

_nop_();

cs_93=1;

high46();

low46();

low46();

wd46(0xc0);

cs_93=0;

}

unsigned int read93c56_word(unsigned char address)

{

unsigned int dat;

unsigned char dat0,dat1;

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;

address=address>>1;

high46();

high46();

low46();

wd46(address);

dat1=rd46();

dat0=rd46();

cs_93=0;

dat=dat1*256+dat0;

return(dat);

}

bit write93c56_word(unsigned char address,unsigned int dat)

{

unsigned char e;

unsigned int temp=address;

e=0;

while (e<3)

{

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;

ewen56();

_nop_();

cs_93=1;

_nop_();

high46();

low46();

high46();

address>>=1;

wd46(address);

wd46(dat/256);

wd46(dat%256);

cs_93=0;

_nop_();

cs_93=1;

TH0=0;

time=0;

do_93=1;

while (1)

{

if (do_93==1) break;

if (time) break;

}

cs_93=0;

if (read93c56_word(temp)==dat)

{

return(0);

}

e++;

}

return(1);

}

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

SPI93c76与SPI93c86系列函数调用(举例)

调用方式:bit write93c76_word(unsigned int address,unsigned int dat)

函数说明:私有函数,SPI专用

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

void ewen76(void)

{

_nop_();

cs_93=1;

dip7=1;

high46();

low46();

low46();

high46();

high46();

wd46(0xff);

cs_93=0;

}

unsigned int read93c76_word(unsigned int address)

{

unsigned char dat0,dat1;

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;

address>>=1;

high46();

high46();

low46();

if((address&0x200)==0x200) high46();

else low46();

if ((address&0x100)==0x100) high46();

else low46();

wd46(address);

dat1=rd46();

dat0=rd46();

cs_93=0;

return(dat1*256|dat0);

}

bit write93c76_word(unsigned int address,unsigned int dat)

{

unsigned char e;

unsigned int temp=address;

e=0;

address>>=1;

while (e<3)

{

gnd_93=0;

cs_93=sk_93=0;

org_93=1;

cs_93=1;

ewen76();

_nop_();

cs_93=1;

high46();

low46();

high46();

if((address&0x200)==0x200) high46();

else low46();

if ((address&0x100)==0x100) high46();

else low46();

wd46(address);

wd46(dat/256);

wd46(dat%256);

cs_93=0;_nop_();cs_93=1;

time=0;do_93=1;

while (1)

{

if (do_93==1) break;

if (time>10) break;

}

cs_93=0;

e++;

}

return(1);

}

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

主函数调用(举例)

调用方式:main()

函数说明:私有函数,SPI专用

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

main()

{ bit b;

unsigned int i;

unsigned int j[32],k;

for(i=0;i<32;i++)

j[i]=read93c56_word(i);

for(i=0;i<32;i++)

write93c56_word(i,0x0909);

i=0;

b=write93c56_word(i,0x0909);

j[i]=read93c56_word(i);

i=1;

b=write93c56_word(i,0x1111);

j[i]=read93c56_word(i);

i=2;

b=write93c56_word(i,0x2222);

j[i]=read93c56_word(i);

}


推荐阅读

史海拾趣

DRI Relays Inc公司的发展小趣事

DRI Relays Inc公司成立于XX年代,当时电子继电器市场正处于快速发展阶段。公司创始人XXX凭借对市场趋势的敏锐洞察,决定投身于这一领域。然而,创业之初,公司面临资金短缺、技术瓶颈和市场竞争激烈等多重挑战。为了突破困境,XXX带领团队日夜兼程地研发新产品,不断改进技术,同时积极寻找投资者。在一次行业展会上,公司的新产品因其独特的设计和高性能吸引了众多客户的关注,为公司赢得了宝贵的订单和资金支持。

东科半导体(DK)公司的发展小趣事

随着公司产品的不断升级和市场需求的不断增长,东科半导体(DK)公司开始积极拓展国内外市场。公司加强与全球知名企业的合作,产品成功进入苹果、华为、OPPO等一线品牌的供应链。同时,东科还积极参加国际电子展会和论坛,展示公司的最新技术和产品,提升了公司的品牌知名度和影响力。

Dymec公司的发展小趣事

随着业务的不断拓展,Dymec公司逐渐意识到品质对于品牌的重要性。公司决定加大对产品质量的投入,从原材料采购到生产流程,再到质量检测,每一个环节都严格把控。这种对品质的执着追求使得Dymec公司的产品在市场上获得了良好的口碑,公司也逐渐成为了电子连接器行业的知名品牌。

BusBoard公司的发展小趣事

随着公司规模的扩大和产品线的丰富,BusBoard公司开始积极寻求市场扩张的机会。通过与国内外知名电子设备制造商建立合作关系,BusBoard公司的产品逐渐打入国际市场。同时,公司还积极参与行业交流和展会,与同行分享经验、探讨合作,共同推动电子行业的发展。这种合作共赢的理念使得BusBoard公司在市场上获得了更多的机会和资源。

Eagle Plastic Devices公司的发展小趣事

随着全球环保意识的不断提高,Eagle Plastic Devices公司也开始将环保理念融入产品研发和生产过程中。公司采用环保材料、改进生产工艺、降低能耗和排放等措施,努力降低产品对环境的影响。同时,公司还积极参与环保公益活动,倡导绿色消费和可持续发展。这些举措不仅提升了公司的品牌形象,也为公司带来了更多的市场机遇。

Focus公司的发展小趣事

在数字化转型的大潮中,一家名为Focus的电子产品制造商(虚构)意识到传统制造模式的局限性,决定实施全面的数字化转型战略。公司首先引入了先进的ERP系统和智能制造技术,实现了生产流程的自动化和智能化。同时,为了快速扩大市场份额和增强技术实力,Focus积极寻求并购机会,先后收购了多家在物联网、人工智能等领域具有核心竞争力的初创企业。通过资源整合和优势互补,Focus迅速成长为行业内的领军企业。

问答坊 | AI 解惑

摩托罗拉出售汽车电子部 潜心发展通讯技术

   据外电报道,手机制造商摩托罗拉周一表示,公司将把其汽车电子业务部以10亿美元的价格出售给德国的一家轮胎公司大陆公司,这样摩托罗拉就可以更加专心致志地把重点放在发展通讯技术上。   这个拥有4500名员工的部门去 ...…

查看全部问答>

消费类电子产品仍然主宰MCU市场

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 2006年,在消费类电子产品制造继续快速发展的带动下,中国MCU市场依旧保持了较好的发展势头,增长率继续维持在25%以上的高水平。从应用领域来看,一方面,消费电子产品仍是中国MCU市场需求的主 ...…

查看全部问答>

IR2110的问题

不知道大家有没有人用过IR2110的,我调了好长时间有一个问题始终无法解决。还请知道的人帮忙提示一下。 具体电路图如图所示: 当DTP结束,即上面的功率管截止的时候,下面的功率管的控制信号就会有一个类似于下降沿干扰的信号产生使得下面的功率 ...…

查看全部问答>

模数转换后的8路二进制数用7段译码显示器输出电路---要硬件的

模数转换后的8路二进制数用7段译码显示器输出电路---要硬件的。。。。。。。。。。。。。。急急急,我作的毕业设计急用,哪位高手指点指点,发个图过来啊谢谢了…

查看全部问答>

21个详细且精湛的模拟电子技术问答

21个详细且精湛的模拟电子技术问答,内容包括: 01 电压基准及时间基准 O2 压频转换器 03 高速比较器 04 运算放大器 05 数模转换器 06 Σ ?Δ模数转换器 07 数据转换器的噪声及其它问题 08 运算放大器的噪声 09 运算放大器的建立时间 10 串行数据转 ...…

查看全部问答>

未来电源的新功率半导体器件

这篇文章介绍了一些新型器件在电源设计上的应用,对电源设计人员来说,值得一读。 上传宣言:分享资料,分享快乐。…

查看全部问答>

LTIB介绍和安装(一)

因为eewrold每个帖子指数限制是1万字,只能切开分几个帖子,顺便说下,这个字数限制实在是没理由。 LTIB (Linux Target Image Builder)是飞思卡尔公司开发的一个工具,用于简化嵌入式bsp开发的工具,基本上就是一些脚本加上预先制作成功交叉工 ...…

查看全部问答>

PC连接windows mobile串口通信的问题

我用数据线连接mobile的USB口和电脑的USB口。想用串口通信的方法,写程序让这两个设备通信,这样可行吗?用CreateFile函数,但我不知道具体到哪一个串口。一个一个的试过了也没有成功接收到数据。手机上面的那个USB口我怎么才能知道是哪个口呢?电 ...…

查看全部问答>

知名公司高薪诚聘 hardwarePE

知名公司招聘硬件产品工程师,要求有硬件电路设计经验,熟练使用各种电子测试设备。 如下jd,有意者可咨询alice Job Title Hardware PE  (Shanghai) Roles and Responsibilities 1. This position will be to work as a member of ...…

查看全部问答>

谁有MPEG-2标准中文版,免费的下载地址.谢谢了...

谁有MPEG-2标准中文版,免费的下载地址.谢谢了...偶没有分了.帮帮忙.!!…

查看全部问答>