这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 8051单片机以SPI总线读写MicroChip的25AA320EEPROM的电

共28条 1/3 1 2 3 跳转至

8051单片机以SPI总线读写MicroChip的25AA320EEPROM的电路和源码

工程师
2021-11-07 16:24:26     打赏

8051单片机以SPI总线读写MicroChip的25AA320 EEPROM的电路和源码:


image.png


# include <reg51.h>    //包含单片机寄存器的头文件

# include <intrins.h>   //包含_nop_()函数定义的头文件

sbit CS=P1^3;

sbit SO=P1^2;

sbit SI=P1^1;

sbit SCK=P1^0;

//SCK=0;

//CS=1;

/**************延时n微秒***************/

void delaynus(unsigned char n,unsigned char i)

{

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

}

/**************写允许函数**************/

void wren(unsigned char enable,unsigned char i)

{

        CS=0;

        enable=0x06;

        SCK=0;

        delaynus(1,2);

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

        {

        SI=enable&0x80;

        delaynus(1,2);

        SCK=1;

        enable<<=1;

        delaynus(1,2);

        SCK=0;

        }

        CS=1;

        delaynus(1,5);

}

/****************写禁止函数***************/

/**void wrds(unsigned char dis,unsigned char i)

{

        CS=0;

        dis=0x04;

        SCK=0;

        delaynus(1,2);

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

        {

        SI=dis&0x80;

        delaynus(1,2);

        SCK=1;

        dis<<=1;

        delaynus(1,2);

        SCK=0;

        }

        CS=1;

}

/****************写指令函数***************/

void wrin(unsigned char write,unsigned char i)

{

        CS=0;

        write=0x02;

        SCK=0;

        delaynus(1,2);

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

        {

        SI=write&0x80;

        delaynus(1,2);

        SCK=1;

        write<<=1;

        delaynus(1,2);

        SCK=0;

        }

}

/****************写地址函数***************/

void wrad(unsigned char adh,unsigned char adl,unsigned char i)

{

        CS=0;

        SCK=0;

        delaynus(1,2);

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

        {

        SI=adh&0x80;

        delaynus(1,2);

        SCK=1;

        adh<<=1;

        delaynus(1,2);

        SCK=0;

        }

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

        {

        SI=adl&0x80;

        delaynus(1,2);

        SCK=1;

        adl<<=1;

        delaynus(1,2);

        SCK=0;

        }        

}

/****************写数据函数***************/

void wrda(unsigned char i,unsigned char dataa)

{

        CS=0;

        SCK=0;

        delaynus(1,2);

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

        {

        SI=(dataa&0x80);

        delaynus(1,2);

        SCK=1;

        dataa=(dataa<<1);

        delaynus(1,2);

        SCK=0;

        }

}

/****************读命令函数***************/

void rdin(unsigned char read,unsigned char i)

{

        CS=0;

        SCK=0;

        delaynus(1,2);

        read=0x03;

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

        {

        SI=read&0x80;

        delaynus(1,2);

        SCK=1;

        read=(read<<=1);

        delaynus(1,2);

        SCK=0;

        }

}

/****************读数据函数***************/

unsigned char rdda()

{

        unsigned char i;

        unsigned char dat=0;

        delaynus(1,2);

        SCK=0;

        CS=0;

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

        {

        SCK=1;

        dat<<=1;

        if (SO==1)

        dat|=0x01;

        delaynus(1,2);

        SCK=0;

        delaynus(1,2);

        }

        CS=1;

        return dat;

}

main()

{

        CS=0;

        wren(0x06,0x00);

        wrin(0x02,0);

        wrad(0x00,0x00,0);

        wrda(0,0x80);

        CS=1;

        delaynus(1,20);

        CS=0;

        rdin(0x03,0);

        wrad(0x00,0x00,0);

        delaynus(1,2);

        ACC=rdda();

        P3=ACC;

        CS=1;

}





关键词: MicroChip     25AA320     EEPROM         

专家
2021-11-07 19:45:05     打赏
2楼

感谢分享


专家
2021-11-07 20:35:44     打赏
3楼

看看


院士
2021-11-07 21:10:23     打赏
4楼

学习了,谢谢分享。


专家
2021-11-07 21:18:56     打赏
5楼

谢谢分享



院士
2021-11-07 22:21:37     打赏
6楼

代码


专家
2021-11-08 00:02:45     打赏
7楼

感谢楼主的分享,很实用了。


专家
2021-11-08 00:05:46     打赏
8楼

感谢楼主的分享,很实用了。


专家
2021-11-08 00:16:52     打赏
9楼

感谢楼主提供分享,很实用了。


高工
2021-11-08 00:20:05     打赏
10楼

好厉害


共28条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]