找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3420|回复: 17
打印 上一主题 下一主题
收起左侧

单片机24C02的读写程序搞了两天了,还是搞不定,有大佬帮忙看看的吗?

  [复制链接]
回帖奖励 2 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
本想做个外部存储,就是24C02程序搞了一段时间,始终无法写进和读出数据·····实在不知道哪里有问题,看到上网上很多版本,改来改去都没用······
单片机源程序如下:
  1. #include <reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long

  5. sbit sda=P3^3;
  6. sbit scl=P3^2;
  7. sbit s=P2^3;
  8. sbit b=P2^4;
  9. sbit d=P2^5;

  10. uchar i;
  11. uchar array1[]={0xF0,0x01,0x00,0x01,0x00,0x01,0x00,0x01};
  12. uchar array2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

  13. void delay(uint z)
  14. {
  15.         uint x,y;
  16.         for(x=z;x>0;x--)
  17.                 for(y=110;y>0;y--);
  18. }

  19. void start()//kaishi
  20. {
  21.         sda=1;
  22.         delay(10);
  23.         scl=1;
  24.         delay(50);
  25.         sda=0;
  26.         delay(50);
  27.               scl=0;
  28.               delay(20);
  29. }

  30. void stop()//tingzhi
  31. {
  32.         sda=0;
  33.         delay(10);
  34.         scl=1;
  35.         delay(50);
  36.         sda=1;
  37.         delay(40);
  38. }

  39. void respons()//yingda
  40. {
  41.         uchar i;
  42.         scl=1;
  43.         delay(10);
  44.         while((sda==1)&&(i<250))
  45.         i++;
  46.         scl=0;
  47.         delay(10);
  48. }

  49. void init()//chushihua
  50. {
  51.         sda=1;
  52.         delay(10);
  53.         scl=1;
  54.         delay(10);
  55. }

  56. void write_byte(uchar date)//xiezijie
  57. {
  58.         uchar i,temp;
  59.         temp=date;
  60.         for(i=0;i<8;i++)
  61.         {
  62.                 temp=temp<<1;
  63.                 scl=0;
  64.                 delay(10);
  65.                 sda=CY;
  66.                 delay(10);
  67.                 scl=1;
  68.                 delay(10);
  69.         }
  70.         scl=0;
  71.         delay(10);
  72.         sda=1;
  73.         delay(10);
  74. }
  75. uchar read_byte()//duzijie
  76. {
  77.         uchar i,k;
  78.         scl=0;
  79.         delay(10);
  80.         sda=1;
  81.         delay(10);
  82.         for(i=0;i<8;i++)
  83.         {
  84.                 scl=1;
  85.                 delay(10);
  86.                 k=(k<<1)|sda;
  87.                 scl=0;
  88.                 delay(10);
  89.         }
  90.         return k;
  91. }

  92. void write_add(uchar address,uchar date)
  93. {

  94.                 init();
  95.                 start();
  96.         write_byte(0xa0);
  97.         respons();
  98.         write_byte(address);
  99.         respons();
  100.                
  101.         write_byte(date);
  102.         respons();
  103.         stop();
  104.         
  105. }

  106. uchar read_add(uchar address)
  107. {
  108.         uchar date;
  109.         init();
  110.                 start();
  111.         write_byte(0xa0);
  112.         respons();
  113.         write_byte(address);
  114.         respons();
  115.         start();
  116.         write_byte(0xa1);
  117.         respons();
  118.         date=read_byte();
  119.         stop();
  120.         return date;
  121. }

  122. void writearray() //D′èëêy×é
  123. {
  124. uchar i=0;
  125. while(1)
  126. {
  127. write_add(i,array1[i]); //½«êy×éarray1ÖDμÄêy′óμØÖ·¡°0¡±òà′ÎD′èë′æ′¢Çø
  128. i++;
  129. if(i==8)
  130. break;
  131. }

  132. }

  133. void readarray()
  134. {
  135. uchar i=0;
  136. while(1)

  137. {
  138. array2[i]=read_add(i);
  139. i++;
  140. if(i==8)
  141. break;
  142. }

  143. }

  144. void main()
  145. {
  146.     //uchar j;
  147.                 init();
  148.           write_add(0x00,array1[0]);
  149.                 read_add(0x00);
  150.     while(1)
  151.                 {
  152.                 P1=array2[0];        
  153.                 }                        

  154. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 4#
ID:24758 发表于 2020-11-19 01:26 | 只看该作者
你说的无法读写的问题可以按以下两步解决:
1.修改delay(),我感觉你的delay()延时太长了。可试试
    void delay()
      {; ;}
  这个应该可以解决无法写的问题。
2.在 write_add(0x00,array1[0]);
                read_add(0x00);
之间加延时,也就是写完数据后稍等一会再进行读操作。如:
              write_add(0x00,array1[0]);              for(i=100;i>0;i--)      
                   for(j=100;j>0;j--)         
                        ;
              read_add(0x00);
这个应该可以解决无法读的问题。

附图:

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

沙发
ID:826942 发表于 2020-11-18 20:17 | 只看该作者
#include "i2c.h"
#include "intrins.h"

void i2c_delay(void)
{
        _nop_();_nop_();_nop_();_nop_();_nop_();
}

void i2c_start(void)
{
        SCL=1;
        SDA=1;
        i2c_delay();
        SDA=0;
        i2c_delay();
        SCL=0;
        i2c_delay();
}

void i2c_stop(void)
{
        SCL=1;
        SDA=0;
        i2c_delay();
        SDA=1;
        i2c_delay();

}

//主机应答从机
void send_ACK(bit ack)
{
        SCL=0;
        i2c_delay();
        if(ack==ACK)
        {
                SDA=0;
    i2c_delay();       
        }
        else
        {
                SDA=1;
    i2c_delay();       
        }
        SCL=1;
        i2c_delay();
        SCL=0;

}

//主机检查从机
bit check_ACK(void)
{
        bit ack;
        SCL=0;
        i2c_delay();
        SCL=1;
        _nop_();_nop_();
        if(SDA)
        {
                ack=NACK;
       
        }
        else
        {
                ack=ACK;
        }
        _nop_();_nop_();
        SCL=0;

        return(ack);
}

//发送数据,写
void i2c_send_byte(uint8 dat)
{
        uint8 i;
       
        for(i=0;i<8;i++)
  {
                SCL=0;
        i2c_delay();
                if(dat&0x80)
                {
                        SDA=1;
                }
                else
                {
                        SDA=0;
                }
                i2c_delay();
                SCL=1;     
                dat=dat<<1;
        }
}

//接收数据,读
uint8 i2c_read_byte(void)
{
        uint8 i,temp;
        for(i=0;i<8;i++)
  {
                SCL=0;
                i2c_delay();
                SCL=1;
          temp<<=1;
                if(SDA)
                {
                        temp|=0x01;
                }       
    i2c_delay();       
        }
                SCL=0;     //感觉应要拉低
        return(temp);
}
回复

使用道具 举报

板凳
ID:826942 发表于 2020-11-18 20:19 | 只看该作者
#include <reg52.h>
#include <intrins.h>
#include "24c02.h"
#define  NOP()   _nop_()   /* 定义空指令 */
#define  _Nop()  _nop_()   /*定义空指令*/

sbit     SCL=P2^0;     //I2C  时钟
sbit     SDA=P2^1;     //I2C  数据 普中定义

bit ack;                 /*应答标志位*/






//AT2402的功能函数
/*******************************************************************
                    向有子地址器件发送多字节数据函数               
函数原型: bit  ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);  
功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
          地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
          如果返回1表示操作成功,否则操作有误。
注意:    使用前必须已结束总线。
********************************************************************/
bit ISendStr(unsigned char  sla,unsigned char  suba,unsigned char  *s,unsigned char  no)
{
   unsigned char i;

   Start_I2c();               /*启动总线*/
   SendByte(sla);             /*发送器件地址*/
   if(ack==0)return(0);
   SendByte(suba);            /*发送器件子地址*/
   if(ack==0)return(0);

   for(i=0;i<no;i++)
   {   
     SendByte(*s);            /*发送数据*/
     if(ack==0)return(0);
     s++;
   }
   Stop_I2c();                /*结束总线*/

   return(1);
}

/*******************************************************************
                    向有子地址器件读取多字节数据函数               
函数原型: bit  RecndStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);  
功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
          地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
           如果返回1表示操作成功,否则操作有误。
注意:    使用前必须已结束总线。
********************************************************************/
bit IRcvStr(unsigned char  sla,unsigned char  suba,unsigned char  *s,unsigned char  no)
{
   unsigned char i;

   Start_I2c();                  /*启动总线*/
   SendByte(sla);                /*发送器件地址*/
   if(ack==0)return(0);
   SendByte(suba);               /*发送器件子地址*/
   if(ack==0)return(0);

   Start_I2c();                 /*重新启动总线*/
   SendByte(sla+1);
   if(ack==0)return(0);
   for(i=0;i<no-1;i++)
   {   
     *s=RcvByte();               /*发送数据*/
      Ack_I2c(0);                /*发送就答位*/  
     s++;
   }
   *s=RcvByte();
   Ack_I2c(1);                   /*发送非应位*/
   Stop_I2c();                   /*结束总线*/
   return(1);
}

/*******************************************************************
   

/*******************************************************************
                     起动总线函数               
函数原型: void  Start_I2c();  
功能:     启动I2C总线,即发送I2C起始条件.  
********************************************************************/
void Start_I2c()
{
  SDA=1;         /*发送起始条件的数据信号*/
  _Nop();
  SCL=1;
  _Nop();        /*起始条件建立时间大于4.7us,延时*/
  _Nop();
  _Nop();
  _Nop();
  _Nop();   
  SDA=0;         /*发送起始信号*/
  _Nop();        /* 起始条件锁定时间大于4μs*/
  _Nop();
  _Nop();
  _Nop();
  _Nop();      
  SCL=0;       /*钳住I2C总线,准备发送或接收数据 */
  _Nop();
  _Nop();
}

/*******************************************************************
                      结束总线函数               
函数原型: void  Stop_I2c();  
功能:     结束I2C总线,即发送I2C结束条件.  
********************************************************************/
void Stop_I2c()
{
  SDA=0;      /*发送结束条件的数据信号*/
  _Nop();       /*发送结束条件的时钟信号*/
  SCL=1;      /*结束条件建立时间大于4μs*/
  _Nop();
  _Nop();
  _Nop();
  _Nop();
  _Nop();
  SDA=1;      /*发送I2C总线结束信号*/
  _Nop();
  _Nop();
  _Nop();
  _Nop();
}

/*******************************************************************
                 字节数据发送函数               
函数原型: void  SendByte(UCHAR c);
功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
          此状态位进行操作.(不应答或非应答都使ack=0)     
           发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void  SendByte(unsigned char  c)
{
unsigned char  BitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
    {
     if((c<<BitCnt)&0x80)SDA=1;   /*判断发送位*/
       else  SDA=0;               
     _Nop();
     SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
      _Nop();
      _Nop();             /*保证时钟高电平周期大于4μs*/
      _Nop();
      _Nop();
      _Nop();         
     SCL=0;
    }
   
    _Nop();
    _Nop();
    SDA=1;                /*8位发送完后释放数据线,准备接收应答位*/
    _Nop();
    _Nop();   
    SCL=1;
    _Nop();
    _Nop();
    _Nop();
    if(SDA==1)ack=0;     
       else ack=1;        /*判断是否接收到应答信号*/
    SCL=0;
    _Nop();
    _Nop();
}

/*******************************************************************
                 字节数据接收函数               
函数原型: UCHAR  RcvByte();
功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),
          发完后请用应答函数应答从机。  
********************************************************************/   
unsigned char   RcvByte()
{
  unsigned char  retc;
  unsigned char  BitCnt;
  
  retc=0;
  SDA=1;                       /*置数据线为输入方式*/
  for(BitCnt=0;BitCnt<8;BitCnt++)
      {
        _Nop();           
        SCL=0;                  /*置时钟线为低,准备接收数据位*/
        _Nop();
        _Nop();                 /*时钟低电平周期大于4.7μs*/
        _Nop();
        _Nop();
        _Nop();
        SCL=1;                  /*置时钟线为高使数据线上数据有效*/
        _Nop();
        _Nop();
        retc=retc<<1;
        if(SDA==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */
        _Nop();
        _Nop();
      }
  SCL=0;   
  _Nop();
  _Nop();
  return(retc);
}

/********************************************************************
                     应答子函数
函数原型:  void Ack_I2c(bit a);
功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(bit a)
{
  
  if(a==0)SDA=0;              /*在此发出应答或非应答信号 */
  else SDA=1;
  _Nop();
  _Nop();
  _Nop();      
  SCL=1;
  _Nop();
  _Nop();                    /*时钟低电平周期大于4μs*/
  _Nop();
  _Nop();
  _Nop();  
  SCL=0;                     /*清时钟线,钳住I2C总线以便继续接收*/
  _Nop();
  _Nop();   
}

你参考我这个源码看看,我这是可以用的
回复

使用道具 举报

5#
ID:401564 发表于 2020-11-19 08:29 | 只看该作者
楼上有人说是延时太长,这个应该不会的
24C02对延时好像只有最短要求,但对最长并没有规定,我之前调试的时候是1秒钟一个时钟,那都是可以正常读写的
个人感觉应该是在下面的这个应答函数里面,你不觉得while循环下面的三个语句应该加一个{}吗?,你这个应该只查询了250次,很有可能还没有写入完成就退出了等待应答函数了
  • void respons()//yingda
  • {
  •         uchar i;
  •         scl=1;
  •         delay(10);
  •         while((sda==1)&&(i<250))
  •         i++;
  •         scl=0;
  •         delay(10);
  • }

回复

使用道具 举报

6#
ID:568565 发表于 2020-11-19 08:48 | 只看该作者
如果参考的网上的代码也不一定就是时序问题,可能就是简单的引脚定义不一致导致的
回复

使用道具 举报

7#
ID:213173 发表于 2020-11-19 14:10 | 只看该作者
楼主调试失败有两个原因。1.延时函数错误,2验证方式错误。其它代码没有问题。修改后经仿真验证无误:
void delay(uint z)//大致延时长度 T=z*2+5 us
{
        while(--z);
}
void main()
{
        P1=array2[0]; //显示原来数据
        delay(0xffff);//延长显示时间
        delay(0xffff);//延长显示时间
        write_add(0x00,array1[0]);//写EEPROM
        array2[0]=read_add(0x00);//读EEPROM并保存
        P1=array2[0]; //显示保存的数据
        while(1);        
}
回复

使用道具 举报

8#
ID:378732 发表于 2020-11-19 17:36 | 只看该作者
epson009 发表于 2020-11-19 01:26
你说的无法读写的问题可以按以下两步解决:
1.修改delay(),我感觉你的delay()延时太长了。可试试
    vo ...

请问这是什么软件操作的?
回复

使用道具 举报

9#
ID:845519 发表于 2020-11-20 09:16 | 只看该作者
建议对照I2C时序图检查一下程序细节,确保基础的I2C通信没问题;再对照24C02数据手册查看命令是否正确
回复

使用道具 举报

10#
ID:170498 发表于 2020-11-20 18:38 | 只看该作者
I2C总线上,接上拉电阻了吗?不接上拉不行的。
回复

使用道具 举报

11#
ID:367460 发表于 2020-11-21 16:31 | 只看该作者
刚写完是不能去读取的,最好加一段小延时,这个我以前也是这样
回复

使用道具 举报

12#
ID:188940 发表于 2020-12-30 13:36 | 只看该作者
epson009 发表于 2020-11-19 01:26
你说的无法读写的问题可以按以下两步解决:
1.修改delay(),我感觉你的delay()延时太长了。可试试
    vo ...

谢谢  之前忙 没看帖  现在搞好了  
回复

使用道具 举报

13#
ID:188940 发表于 2020-12-30 13:37 | 只看该作者
谢谢大家    之前忙 没看帖  现在搞好了  
回复

使用道具 举报

14#
ID:743654 发表于 2020-12-30 22:32 | 只看该作者
Coolguyisme 发表于 2020-12-30 13:37
谢谢大家    之前忙 没看帖  现在搞好了

什么问题,怎么解决的,说一下,后来人好参考。
回复

使用道具 举报

15#
ID:390416 发表于 2020-12-31 11:40 | 只看该作者
void IIC_Delay()
{
        _nop_();_nop_();_nop_();_nop_();_nop_();
}

void IIC_Init()
{
        P2M0&=0x3f;
        P2M1&=0x3f;
        SDA_GPIO=1;
        SCL_GPIO=1;
}

void IIC_Start()//IIC启动信号
{
        SDA_GPIO=1;
        SCL_GPIO=1;
        IIC_Delay();
        SDA_GPIO=0;
        IIC_Delay();
        SCL_GPIO=0;
        IIC_Delay();
}

void IIC_Stop()//IIC停止信号
{
        SDA_GPIO=0;
        SCL_GPIO=1;
       

        SDA_GPIO=1;
        IIC_Delay();
}

void IIC_Write_Byte(u8 IIC_Byte)//向总线发送一个字节
{
        u8 i;
        SCL_GPIO=0;
        SDA_GPIO=1;
        for(i=0;i<8;i++)
        {
                SDA_GPIO=(bit)(IIC_Byte&0x80);
                IIC_Byte<<=1;
                IIC_Delay();
                SCL_GPIO=1;
                IIC_Delay();
                SCL_GPIO=0;
                IIC_Delay();
        }
}

u8 IIC_Read_Byte()
{
        u8 i,Value;
        SCL_GPIO=0;
        SDA_GPIO=1;
        for(i=0;i<8;i++)
        {
                Value=(Value<<1)|SDA_GPIO;
                IIC_Delay();
                SCL_GPIO=1;
                IIC_Delay();
                SCL_GPIO=0;
                IIC_Delay();
        }
        return Value;
}

u8 IIC_Read_Ack()//单片机检测IIC从机发来的应答信号
{
        u8 ack=1,i=0;
        SCL_GPIO=1;
        IIC_Delay();
        while((ack)&&(i<5))
        {
                ack=SDA_GPIO;
                i++;
        }
        SCL_GPIO=0;
        return ack;
}

void IIC_Write_Ack(bit ack)//单片机发送应答给从机
{
        SDA_GPIO=ack;
        IIC_Delay();
        SCL_GPIO=1;
        IIC_Delay();
        SCL_GPIO=0;
        IIC_Delay();
        SDA_GPIO=1;
        IIC_Delay();
}

IIC代码 用我这个
回复

使用道具 举报

16#
ID:188940 发表于 2021-1-4 20:10 | 只看该作者
cheney03 发表于 2020-12-30 22:32
什么问题,怎么解决的,说一下,后来人好参考。

我直接重新参考了另外一段程序,之前的那个好像是函数的声明顺序错了  具体那个有问题  我也忘了额·····
回复

使用道具 举报

17#
ID:188940 发表于 2021-1-4 20:15 | 只看该作者
我后来直接用了另一段程序,当时心切,就没有过多的对比··· 现在在搞AS608的程序,感觉指纹的程序也不怎么好搞····· 谢谢 大家的积极回复!
C文件:
#include "delay.h"
#include "reg52.h"
#include "function.h"
#include "24c02.h"
#include "key.h"
#include "control.h"
#include "1602.h"
#include "time.h"
sbit sda=P3^3;
sbit scl=P3^2;
uchar mima2[]={0,0,0,0,0,0,0,0};

void delay1()
{;;}  
       
void AT24c02_init()         //初始化
{
        sda=1;
        scl=1;
        delay1();
}

void start()        //开始信号
{
        sda=1;
delay1();
        scl=1;
        delay1();
        sda=0;
        delay1();
}

void stop()       //停止信号
{
        sda=0;
        delay1();
        scl=1;
        delay1();
        sda=1;
        delay1();
}

void respons()     //应答信号
{
        uchar i;
        scl=1;
        delay1();
        while((sda==1)&&(i<255))i++;
        scl=0;
        delay1();
}

void write_byte(uchar date)    //写一个字节
{
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                scl=0;
                delay1();
                temp<<=1;
                sda=CY;
                delay1();
                scl=1;
                delay1();
        }
        scl=0;
        delay1();
        sda=1;
        delay1();
}

uchar read_byte(void)     //读一个字节
{
        uchar f,e;
        scl=0;
        delay1();
        sda=1;
        delay1();
        for(f=0;f<8;f++)     /*循环8次读出一个字节数据*/
        {
                scl=1;
                delay1();
                e=(e<<1)|sda;
                scl=0;
                delay1();
        }
        return e;
}

void write_add(uchar address,uchar date)
{                        //指定地址写数据
        start();                               /*初始信号*/
        write_byte(0xa0);                      /*写入芯片地址0XA0*/
        respons();                             /*应答信号*/
        write_byte(address);                   /*写入芯片内部寄存器地址ADDRESS*/
        respons();                             /*应答信号*/
        write_byte(date);                      /*写入数据*/
        respons();                             /*应答信号*/
        stop();                                /*停止信号*/
}

uchar read_add(uchar address)
{
        uchar date;
        start();                              /*初始信号*/
        write_byte(0xa0);                     /*写入芯片地址0XA0*/
        respons();                            /*应答信号*/
        write_byte(address);                  /*写入芯片内部寄存器地址ADDRESS*/
        respons();                            /*应答信号*/
        start();                              /*初始信号*/
        write_byte(0xa1);                     /*初始信号*/
        respons();                            /*写入芯片地址0XA1(读)*/
        date=read_byte();                     /*读出数据*/
        stop();                               /*停止信号*/
        return date;                          /*返回读出值*/
}


void Ingest_code()                //写入密码
{
uchar i=0;
T1_NUM=0;
p=0;
d=0;
TR1=0;
AT24c02_init();
for(i=0;i<8;i++)
{
write_add(i,mima1[i]);
mima2[i]=mima1[i];                         //修改本地密码
xianshi10();
}
xianshi5();
TR1=1;
}

void Ingest_code1()                  //读取密码
{
uchar i=0;
blue();
TR1=0;
T1_NUM=0;
p=0;
d=0;
AT24c02_init();
for(i=0;i<8;i++)
{
mima2[i]=read_add(i);
xianshi10();
}
xianshi5();
TR1=1;
}

/*void Ingest_code2()
{
uchar i=0;
AT24c02_init();
for(i=0;i<8;i++)
{
write_add(i,0);
blue();
xianshi10();
xianshi5();
TR1=0;
T1_NUM=0;
p=0;
d=0;
}
TR1=1;
}
*/
H文件:
#ifndef __24C02_H__
#define __24C02_H__

#define uchar unsigned char

extern void delay1();
extern void AT24c02_init();
extern void start();
extern void stop();
extern void respons();
extern void write_byte(uchar date);
extern uchar read_byte(void);
extern void write_add(uchar address,uchar date);
extern uchar read_add(uchar address);
extern void Ingest_code();
extern void Ingest_code1();

extern uchar mima2[8];

#endif
回复

使用道具 举报

18#
ID:188940 发表于 2021-1-4 20:18 | 只看该作者
epson009 发表于 2020-11-19 01:26
你说的无法读写的问题可以按以下两步解决:
1.修改delay(),我感觉你的delay()延时太长了。可试试
    vo ...

好像就是这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表