|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
[轉(zhuǎn)帖]最新的93C46/93c06/93c46/93c56/93c66/93c86的驅(qū)... |
| 作者:liuli9230 欄目:單片機 |
〖說明〗SPI總線驅(qū)動程序 包括的普通封裝標(biāo)準(zhǔn)模式,特殊封裝標(biāo)準(zhǔn)模式 默認11.0592MHZ的晶振。 〖文件〗93CXX.C ﹫2003/5/12 〖作者〗董石權(quán)(司馬東飛) dongshiquan@163.com QQ:52455690 http://www.mcuzb.com/ 〖版本〗V3.00A Build 0803 〖公告〗請各位同僚尊重使用權(quán)。。。。。。。。。! —————————————————————*/ /*通用93C06-93C86系列使用說明 93C06=93C4693c56=93c6693c76=93C86 dipx 可以自行定義*/ #include "reg51.h" #include "intrins.h" /*----------------------------------------------------- SPI93cXX系列時序函數(shù)調(diào)用(普通封裝) 調(diào)用方式:自行定義﹫2001/05/12 函數(shù)說明:私有函數(shù),封裝各接口定義 -----------------------------------------------------*/ #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系列時序函數(shù)調(diào)用(普通封裝) 調(diào)用方式:void high46(void) ---高8位函數(shù)調(diào)用 void low46(void) ---低8位函數(shù)調(diào)用﹫2001/05/12 函數(shù)說明:私有函數(shù),SPI專用93C46普通封裝驅(qū)動程序 -----------------------------------------------------*/ 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系列時序函數(shù)調(diào)用(特殊封裝) 調(diào)用方式:自行定義﹫2001/05/12 函數(shù)說明:私有函數(shù),特殊封裝各接口定義 -----------------------------------------------------*/ #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系列時序函數(shù)調(diào)用(特殊封裝) 調(diào)用方式:void high46a(void) ---高8位函數(shù)調(diào)用 void low46a(void) ---低8位函數(shù)調(diào)用﹫2001/05/12 函數(shù)說明:私有函數(shù),SPI專用93C46特殊封裝驅(qū)動程序 -----------------------------------------------------*/ 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系列函數(shù)調(diào)用(舉例) 調(diào)用方式:bit write93c56_word(unsigned int address,unsigned int dat) ﹫2001/05/12 函數(shù)說明:私有函數(shù),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系列函數(shù)調(diào)用(舉例) 調(diào)用方式:bit write93c57_word(unsigned int address,unsigned int dat) ﹫2001/05/12 函數(shù)說明:私有函數(shù),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系列函數(shù)調(diào)用(舉例) 調(diào)用方式:bit write93c56_word(unsigned int address,unsigned int dat) ﹫2001/05/12 函數(shù)說明:私有函數(shù),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系列函數(shù)調(diào)用(舉例) 調(diào)用方式:bit write93c76_word(unsigned int address,unsigned int dat) ﹫2001/05/12 函數(shù)說明:私有函數(shù),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(); high |
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |