资源简介

用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

评论

共有 条评论