資源簡介
用51單片機IO口模擬SPI接口和EEPROM 25LC1024芯片通信。進行讀寫操作,供大家學習之用。

代碼片段和文件信息
#include?
#include//包含_nop_()函數
//定義命令
#define?READ?0x03
#define?WRITE?0x02
#define?WREN?0x06
#define?WRDI?0x04
#define?RDSR?0x05
#define?WRSR?0x01
#define?PE?0x42
#define?SE?0xd8
#define?CE?0xc7
#define?RDID?0xab
#define?DPD?0xb9
//端口定義
sbit?SCK?=?P1^4;
sbit?MOSI?=?P1^5;
sbit?MISO?=?P1^6;
sbit?CS?=?P1^7;
//延時程序
void?delay_ms(int?n)
{
int?i?j;
for(i=0;i for(j=0;j<1000;++j);
}
//延時程序
void?delay_ns(void)?//延時>4us
{
_nop_();//空指令
_nop_();
_nop_();
_nop_();
}
//SPI寫一個byte
void?SPI_byte_write(const?char?*dat)
{
char?tmp?=?*dat?i;
for(i=0;i<8;++i){
SCK?=?0;
MOSI?=?(bit)(tmp?>>?7);?//先輸出高bit
tmp?<<=?1;?//數據左移一位
SCK?=?1;?//SCK為高發送bit
delay_ns();?//延時防止芯片為響應
}
}
//SPI讀一個byte
void?SPI_byte_read(char?*dat)
{
char?tmp?=?0?i;
for(i=0;i<8;++i){
SCK?=?0;
tmp?<<=?1;?//左移一位
tmp?|=?MISO;?//接收最高位
SCK?=?1;//SCK為高接收bit
delay_ns();
}
*dat?=?tmp;
}
//SPI寫多個byte
void?SPI_nbyte_write(const?char?*addr?const?char?*dat?char?num)
{
char?inst_wren?=?WREN?inst_write?=?WRITE?i;
CS?=?0;
SPI_byte_write(&inst_wren);?//寫使能
CS?=?1;
delay_ms(1);
CS?=?0;
SPI_byte_write(&inst_write);?//寫指令
for(i=0;i<3;++i){
SPI_byte_write(addr?+?i);//寫地址
}
for(i=0;i SPI_byte_write(dat?+?i);//寫數據
}
CS?=?1;
}
//SPI讀多個byte
void?SPI_nbyte_read(const?char?*addr?char?*dat?char?num)
{
char?inst?=?READ?i;
CS?=?0;
SPI_byte_write(&inst);?//讀指令
for(i=0;i<3;++i){
SPI_byte_write(addr?+?i);//寫地址
}
for(i=0;i SPI_byte_read(dat?+?i);//寫數據
}
CS?=?1;
}
char?dat[]?=?{0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f
0x770x7c0x390x5e0x790x71};//0~F的字形碼
char?save[16]?=?{0};
const?char?addr[3]?=?{0x00?0x00?0x00};//讀寫的地址
int?main(void)
{
???int?i;
???SPI_nbyte_write(addr?dat?16);//寫入數據
???delay_ms(30);
???SPI_nbyte_read(addr?save?16);//讀出數據
???for(i=0;i<16;i++)
???{
P3=save[i];//數碼管顯示
delay_ms(60);
}
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-10-13?22:21??SPI\
?????文件?????????871??2013-10-13?14:55??SPI\IIC.plg
?????文件??????222744??2013-10-13?20:55??SPI\Last?Loaded?SPI.DBK
?????文件????????7397??2013-10-13?21:16??SPI\SPI
?????文件??????222744??2013-10-13?21:17??SPI\SPI.DSN
?????文件????????5420??2013-10-13?21:16??SPI\SPI.LST
?????文件???????10649??2013-10-13?21:16??SPI\SPI.M51
?????文件????????7797??2013-10-13?21:16??SPI\SPI.OBJ
?????文件?????????911??2013-10-13?21:17??SPI\SPI.PWI
?????文件????????2188??2013-10-13?23:08??SPI\SPI.c
?????文件????????1884??2013-10-13?21:16??SPI\SPI.hex
?????文件??????????54??2013-10-13?21:16??SPI\SPI.lnp
?????文件????????1308??2013-10-13?21:17??SPI\SPI.plg
?????文件???????55656??2013-10-13?21:17??SPI\SPI.uvopt
?????文件???????13395??2013-10-13?14:59??SPI\SPI.uvproj
?????文件???????55658??2013-10-13?20:47??SPI\SPI_uvopt.bak
?????文件???????????0??2013-10-13?14:57??SPI\SPI_uvproj.bak
?????文件????????6376??2009-05-07?14:37??SPI\STARTUP.A51
?????文件???????14062??2013-10-13?21:16??SPI\STARTUP.LST
?????文件?????????758??2013-10-13?21:16??SPI\STARTUP.OBJ
評論
共有 條評論