[PIC®/AVR®/dsPIC®产品] PIC18单片机读写ISL12026

[复制链接]
1453|7
 楼主| Tom952331 发表于 2024-12-13 09:50 | 显示全部楼层 |阅读模式
代码:
  1. #include <xc.h>
  2. #include "OLED.h"
  3. //CONFIG1L芯片配置字
  4. #pragma config RETEN = OFF           //超低功耗稳压器禁止
  5. #pragma config INTOSCSEL = HIGH      //休眠期间 LF-INTOSC 于高功耗模式
  6. #pragma config SOSCSEL = DIG         //SOSC配置为( SCLKI)模式;使能 RC0 和 RC1 数字I/O
  7. #pragma config XINST = OFF           //扩展指令集使能位,禁止指令集扩展和变址寻址模式 (传统模式)

  8. // CONFIG1H
  9. #pragma config FOSC = HS1            //4 MHz - 16 MHz 外部晶振设置HS中等功耗振荡器,
  10. #pragma config PLLCFG = ON           //使能PLL x4功能,8M晶振经4倍频变为32MHz系统时钟
  11. #pragma config FCMEN = OFF           //禁止故障保护时钟监视器
  12. #pragma config IESO = OFF            //禁止双速启动

  13. // CONFIG2L
  14. #pragma config PWRTEN = OFF          //禁止上电延时
  15. #pragma config BOREN = SBORDIS       //由硬件使能欠压复位
  16. #pragma config BORV = 3              //设置电压为1.8v欠压复位
  17. #pragma config BORPWR = ZPBORMV      //选择ZPBORMV而不是BORMV

  18. // CONFIG2H
  19. #pragma config WDTEN = OFF           //关看门狗
  20. //#pragma config WDTEN = SWDTDIS     //由硬件使能WDT,禁止SWDTEN位
  21. #pragma config WDTPS = 256           //看门狗后分频1:256,溢出时间1.024s

  22. // CONFIG3H
  23. #pragma config CANMX = PORTB         //CAN通信引脚设置到 RB2 和 RB3
  24. #pragma config MSSPMSK = MSK7        //使能 7 位地址掩码模式
  25. #pragma config MCLRE = ON            //使能MCLR外部复位功能

  26. // CONFIG4L
  27. #pragma config STVREN = ON         // 堆栈满/下溢复位
  28. #pragma config BBSIZ = BB2K        // 配置引导区大小为2K

  29. // CONFIG5L
  30. #pragma config CP0 = OFF           //00800-01FFF代码不加密
  31. #pragma config CP1 = OFF           //02000-03FFF代码不加密
  32. #pragma config CP2 = OFF           //04000-05FFF代码不加密
  33. #pragma config CP3 = OFF           //06000-07FFF代码不加密

  34. // CONFIG5H
  35. #pragma config CPB = OFF        //引导区代码不加密
  36. #pragma config CPD = OFF        //EEPROM数据不不加密

  37. // CONFIG6L
  38. #pragma config WRT0 = OFF       // 00800-01FFF 写保护位不使能
  39. #pragma config WRT1 = OFF       // 02000-03FFF 写保护位不使能
  40. #pragma config WRT2 = OFF       // 04000-05FFF 写保护位不使能
  41. #pragma config WRT3 = OFF       // 06000-07FFF 写保护位不使能

  42. // CONFIG6H
  43. #pragma config WRTC = OFF       //配置寄存器不受写保护
  44. #pragma config WRTB = OFF       //引导区不受写保护
  45. #pragma config WRTD = OFF       //EEPROM数据不受写保护

  46. // CONFIG7L
  47. #pragma config EBTR0 = OFF      //00800-01FFF表读保护位不使能
  48. #pragma config EBTR1 = OFF      //02000-03FFF表读保护位不使能
  49. #pragma config EBTR2 = OFF      //04000-05FFF表读保护位不使能
  50. #pragma config EBTR3 = OFF      //06000-07FFF表读保护位不使能
  51. // CONFIG7H
  52. #pragma config EBTRB = OFF      //引导区不受写保护

  53. #define uint unsigned int
  54. #define u8  unsigned char

  55. #define LED1   LATDbits.LATD4  //定义LED1端口
  56. #define LED2   LATEbits.LATE1  //定义LED2端口
  57. #define uint unsigned int
  58. #define uchar unsigned char
  59. #define UINT8 unsigned char

  60. #define HMS_FLAG  1
  61. //--------与24C02相关的设置和子函数-------------
  62. void delay()
  63. {
  64.     uchar i;
  65.     for(i=0;i<10;i++);
  66. }                 //简单短延时子函数
  67. //sbit sda_24c02=P2^6;    //定义24C02的数据线与单片机的连接                     
  68. //sbit scl_24c02=P2^7;
  69. #define sda_24c02 LATCbits.LATC4
  70. #define scl_24c02 LATCbits.LATC5
  71. void start_24c02();          //24C02开始信号
  72. void stop_24c02();           //24C02停止
  73. void respons_24c02();          //24C02应答
  74. void init_24c02();                  //24C02初始化
  75. void write_byte_24c02(uchar date);         //写一个byte到24C02
  76. uchar read_byte_24c02();                         //从24C02读一个byte
  77. void write_add_24c02(uchar address,uchar date);        //写一个字节到指定的24C02单元
  78. uchar read_add_24c02(uchar address);                        //从24C02指定单元读一个字节数据
  79. void write_add1_24c02(uchar address,uchar date);        //写一个字节到指定的24C02单元
  80. uchar read_add1_24c02(uchar address);                        //从24C02指定单元读一个字节数据
  81. void XWrite_eeprom(UINT8 Address,UINT8 eeprom_Data);
  82. UINT8  XRead_eeprom(UINT8 Address);

  83. //sbit led=P1^0;

  84. //unsigned char code table_num[]="0123456789";   //LCD显示的数字代码

  85. void delay_ms(uint xms);                   //ms级延时子函数

  86. unsigned char i;                        //
  87. struct ccb
  88. {
  89.         uchar second;
  90.         uchar minute;
  91.         uchar hour;
  92.         uchar day;
  93.         uchar month;
  94.         uchar year;
  95. };
  96. struct ccb CurrentTime;

  97. UINT8 Change10ToBCD(UINT8 data1)         //10->BCD数值转化
  98. {
  99.     UINT8 high,low,result;
  100.     high=data1/10;
  101.     low=data1%10;
  102.     result=(high<<4)|low;
  103.     return result;
  104. }
  105. void init_ISL12026()
  106. {
  107.     XWrite_eeprom(0x3F,0x02);
  108.     XWrite_eeprom(0x3F,0x06);
  109. }

  110. void ResetRtcTime()
  111. {
  112.     init_ISL12026();
  113.     XWrite_eeprom(0x37,Change10ToBCD(20));//世纪
  114.     XWrite_eeprom(0x36,Change10ToBCD(0));//周
  115.     XWrite_eeprom(0x35,Change10ToBCD(10));//年
  116.     XWrite_eeprom(0x34,Change10ToBCD(1));//月
  117.     XWrite_eeprom(0x33,Change10ToBCD(1));//日
  118.     XWrite_eeprom(0x32,Change10ToBCD(12)|0x80);//时
  119.     XWrite_eeprom(0x31,Change10ToBCD(12));//分
  120.     XWrite_eeprom(0x30,Change10ToBCD(12));//秒
  121. }
  122. UINT8 ChangeBCDTo10(UINT8 data1)         //BCD->10数值转化
  123. {
  124.     UINT8 temp,result;
  125.     result=data1&0x0F;
  126.     temp=data1>>4;
  127.     result+=temp*10;
  128.     return result;
  129. }
  130. void readCurrentTime()
  131. {
  132.     CurrentTime.year=ChangeBCDTo10(XRead_eeprom(0x35));
  133.     CurrentTime.month=ChangeBCDTo10(XRead_eeprom(0x34));
  134.     CurrentTime.day=ChangeBCDTo10(XRead_eeprom(0x33));
  135.     CurrentTime.hour=ChangeBCDTo10(XRead_eeprom(0x32)&0x7F);
  136.     CurrentTime.minute=ChangeBCDTo10(XRead_eeprom(0x31));
  137.     CurrentTime.second=ChangeBCDTo10(XRead_eeprom(0x30));
  138. }

  139. /**************************************************************************/
  140. //按页写入。  pBuffer数组指针首地址,WriteAddr要写入页的首地址,NumByteToWrite写入字符个数
  141. /*************************************************************************/
  142. void ISL12026_PageWrite(UINT8* pBuffer, UINT8 WriteAddr, UINT8 NumByteToWrite)
  143. {
  144.     init_ISL12026();
  145.     //XStart_iic();
  146.     start_24c02();
  147.         write_byte_24c02(0xde);
  148.     respons_24c02();
  149.     //XWriteByte(0);
  150.     //XReceiveAck();
  151.         write_byte_24c02(0);
  152.     respons_24c02();
  153.     //XWriteByte(WriteAddr);
  154.     //XReceiveAck();
  155.         write_byte_24c02(WriteAddr);
  156.     respons_24c02();
  157.     while(NumByteToWrite--)   
  158.     {
  159.         //XWriteByte(*pBuffer);
  160.         //Point to the next byte to be written
  161.                 write_byte_24c02(*pBuffer);
  162.             respons_24c02();
  163.         pBuffer++;  
  164.         //XReceiveAck();
  165.     }
  166.     //XStop_iic();
  167.     stop_24c02();
  168.         for(i=0;i<40;i++)
  169.                 delay();
  170. }

  171. /**************************************************************************/
  172. //写入时间信息,按照秒,分,时,天,月,年的顺序写入
  173. /*************************************************************************/
  174. void ISL12026_TimeWrite(UINT8 second,UINT8 minute,UINT8 hour,UINT8 day,UINT8 month,UINT8 year)
  175. {
  176.     UINT8 temp[8];
  177.     temp[0]=Change10ToBCD(second);
  178.     temp[1]=Change10ToBCD(minute);
  179.     temp[2]=Change10ToBCD(hour)|0x80;
  180.     temp[3]=Change10ToBCD(day);
  181.     temp[4]=Change10ToBCD(month);
  182.     temp[5]=Change10ToBCD(year);
  183.     temp[6]=Change10ToBCD(0);      //周,不用则写0
  184.     temp[7]=Change10ToBCD(20);
  185.     ISL12026_PageWrite(temp,0x30,8);
  186. }

  187. /*
  188. void saveX1226(UINT8 hour_year,UINT8 minute_month,UINT8 second_day,UINT8 index)
  189. {
  190.     init_X1226();
  191.     if(index==HMS_FLAG)//写时分秒
  192.     {
  193.         XWrite_eeprom(0x30,Change10ToBCD(second_day));//秒
  194.         XWrite_eeprom(0x31,Change10ToBCD(minute_month));//分
  195.         XWrite_eeprom(0x32,Change10ToBCD(hour_year)|0x80);//时
  196.     }
  197.     else//写年月日星期
  198.     {
  199.         XWrite_eeprom(0x33,Change10ToBCD(second_day));//日
  200.         XWrite_eeprom(0x34,Change10ToBCD(minute_month));//月
  201.         XWrite_eeprom(0x35,Change10ToBCD(hour_year));//年
  202.     }         
  203.     XWrite_eeprom(0x11,0x00);//按定时输出
  204.     //XWrite_eeprom(0x3F,0x00);
  205.     Delay(50);
  206. }*/

  207. /*void init_ISL12026_IQR()
  208. {
  209.     //UINT8 mRtcStatus;
  210.     init_ISL12026();
  211.     //mRtcStatus=ChangeBCDTo10(XRead_eeprom(0x11));
  212.     //mRtcStatus=mRtcStatus;
  213.     XWrite_eeprom(0x11,0x00);//0x18, 1秒一个频冲
  214.     //Delay(100);
  215.         for(i=0;i<80;i++)
  216.                 delay();
  217. }  */
  218.    
  219. void init_ISL12026_Alarm(UINT8 Hour_Week,UINT8 Minute_Month,UINT8 Second_Day,UINT8 index) // 设置报警时间
  220. {
  221.     init_ISL12026();
  222.    
  223.     if(index==HMS_FLAG)//写时分秒
  224.     {
  225.         XWrite_eeprom(0x00,Change10ToBCD(Second_Day));//秒
  226.         XWrite_eeprom(0x01,Change10ToBCD(Minute_Month));//分
  227.         XWrite_eeprom(0x02,Change10ToBCD(Hour_Week)|0x80);//时
  228.     }
  229.     else//写月日星期
  230.     {
  231.         XWrite_eeprom(0x03,Change10ToBCD(Second_Day));//日
  232.         XWrite_eeprom(0x04,Change10ToBCD(Minute_Month));//月
  233.         XWrite_eeprom(0x06,Change10ToBCD(Hour_Week));//年
  234.     }
  235.     XWrite_eeprom(0x11,0xA0);//按定时输出
  236.     //Delay(50);
  237.         for(i=0;i<40;i++)
  238.                 delay();     
  239. }

  240. void PowerInitTime(void)
  241. {
  242.     struct ccb DownTime;
  243.     UINT8 mRtcStatus;
  244.    
  245.     init_ISL12026();
  246.     //mRtcStatus=XRead_eeprom(0x14);
  247.     XWrite_eeprom(0x14,0x00);
  248.     mRtcStatus=XRead_eeprom(0x14);
  249.    
  250.     mRtcStatus=ChangeBCDTo10(XRead_eeprom(0x3F));
  251.     if ( mRtcStatus & 0x01 )                             //如果完全断电,设置为上次参数下载的时间
  252.     {
  253.         /*DownTime.year=ByteReadEeprom(DownLoadYearAddrOne);
  254.         DownTime.month=ByteReadEeprom(DownLoadMonthAddrOne);
  255.         DownTime.day=ByteReadEeprom(DownLoadDayAddrOne);
  256.         DownTime.hour=ByteReadEeprom(DownLoadHourAddrOne);
  257.         DownTime.minute=ByteReadEeprom(DownLoadMinuteAddrOne);
  258.         DownTime.second=ByteReadEeprom(DownLoadSecondAddrOne);
  259.           */
  260.         
  261.         ISL12026_TimeWrite(DownTime.second,DownTime.minute,DownTime.hour,DownTime.day,DownTime.month,DownTime.year);
  262.     }
  263. }


  264. void readSecond()
  265. {
  266.     //CurrentTime.minute=ChangeBCDTo10(XRead_eeprom(0x31));
  267.     CurrentTime.second=ChangeBCDTo10(XRead_eeprom(0x30));
  268. }

  269. //MS延时函数
  270. void MS_delay(uint MS)
  271. {
  272.     uint x,y;
  273.     for(y=MS;y>0;y--)
  274.     {
  275.             for(x=796;x>0;x--);
  276.     }
  277. }

  278. void main(void)
  279. {
  280.     unsigned int i;
  281.         unsigned char temp;
  282.         unsigned char second;
  283.         unsigned char bai,shi,ge;
  284.         unsigned char year,month,day,hour,minute;
  285.      ANCON0bits.ANSEL6=0;    //RE1(AN6)配置为数字IO
  286.      ANCON1=0x00;            //将部分带模拟输入功能的引脚设置为数字IO

  287.      //输出使用LAT寄存器,输入使用PORT寄存器
  288.      TRISDbits.TRISD4=0;     //PORD4配置为输出
  289.      TRISEbits.TRISE1=0;     //PORE1配置为输出
  290.      TRISC=0X00;
  291.      LCD_Init();
  292.      LCD_CLS();
  293.         init_ISL12026();
  294.     XWrite_eeprom(0x50,209);//
  295.                 for(i=0;i<60000;i++);
  296.                 XWrite_eeprom(0x52,126);//
  297.                 for(i=0;i<60000;i++);
  298.                 XWrite_eeprom(0x54,158);//
  299.                 for(i=0;i<60000;i++);
  300.                 temp=XRead_eeprom(0x52);
  301.                 bai=temp/100+48;
  302.                 shi=temp%100/10+48;
  303.                 ge=temp%10+48;
  304.                 LCD_P8x16Char(0,0,bai);
  305.                 LCD_P8x16Char(8,0,shi);
  306.                 LCD_P8x16Char(16,0,ge);

  307.                 temp=XRead_eeprom(0x54);
  308.                 bai=temp/100+48;
  309.                 shi=temp%100/10+48;
  310.                 ge=temp%10+48;
  311.                 LCD_P8x16Char(32,0,bai);
  312.                 LCD_P8x16Char(40,0,shi);
  313.                 LCD_P8x16Char(48,0,ge);

  314.                 temp=XRead_eeprom(0x50);
  315.                 bai=temp/100+48;
  316.                 shi=temp%100/10+48;
  317.                 ge=temp%10+48;
  318.                 LCD_P8x16Char(64,0,bai);
  319.                 LCD_P8x16Char(72,0,shi);
  320.                 LCD_P8x16Char(80,0,ge);
  321.         LCD_P8x16Str(0,2,(u8*)"  :  :  ");
  322.                 LCD_P8x16Str(0,4,(u8*)"20  -  -  ");
  323.                 ISL12026_TimeWrite(50,59,23,31,12,23);
  324.      while(1)
  325.      {
  326.           readCurrentTime();
  327.                 shi=(CurrentTime.second/10)+0x30;
  328.                 ge=(CurrentTime.second%10)+0x30;
  329.                 LCD_P8x16Char(48,2,shi);
  330.                 LCD_P8x16Char(56,2,ge);
  331.                 shi=(CurrentTime.minute/10)+0x30;
  332.                 ge=(CurrentTime.minute%10)+0x30;
  333.                 LCD_P8x16Char(24,2,shi);
  334.                 LCD_P8x16Char(32,2,ge);
  335.                 shi=(CurrentTime.hour/10)+0x30;
  336.                 ge=(CurrentTime.hour%10)+0x30;
  337.                 LCD_P8x16Char(0,2,shi);
  338.                 LCD_P8x16Char(8,2,ge);
  339.                 shi=(CurrentTime.day/10)+0x30;
  340.                 ge=(CurrentTime.day%10)+0x30;
  341.                 LCD_P8x16Char(64,4,shi);
  342.                 LCD_P8x16Char(72,4,ge);
  343.                 shi=(CurrentTime.month/10)+0x30;
  344.                 ge=(CurrentTime.month%10)+0x30;
  345.                 LCD_P8x16Char(40,4,shi);
  346.                 LCD_P8x16Char(48,4,ge);
  347.                 shi=(CurrentTime.year/10)+0x30;
  348.                 ge=(CurrentTime.year%10)+0x30;
  349.                 LCD_P8x16Char(16,4,shi);
  350.                 LCD_P8x16Char(24,4,ge);
  351.                 for(i=0;i<20000;i++);
  352.      }
  353. }
  354. void delay_ms(uint xms)        //ms级延时子程序
  355.         {        unsigned int aa,bb;
  356.                 for(aa=xms;aa>0;aa--)
  357.                         for(bb=4000;bb>0;bb--);        //调整数值以使本句运行时间为1ms
  358.         }
  359. //--------与24C02相关的设置和子函数-------------
  360. void start_24c02()  //24c02开始信号
  361. {        sda_24c02=1;        delay();
  362.         scl_24c02=1;        delay();
  363.         sda_24c02=0;        delay(); }

  364. void stop_24c02()   //24c02停止
  365. {        sda_24c02=0;        delay();
  366.         scl_24c02=1;        delay();
  367.         sda_24c02=1;        delay(); }

  368. void respons_24c02()  //24c02应答
  369. {        uchar i;
  370.         scl_24c02=1;
  371.         delay();
  372.         TRISCbits.TRISC4=1;
  373.         delay();
  374.         while((PORTCbits.RC4==1)&&(i<250))i++;
  375.         scl_24c02=0;
  376.         delay();
  377.         TRISCbits.TRISC4=0;
  378.         delay();
  379. }

  380. void init_24c02()                 //24c02初始化
  381. {        sda_24c02=1;        delay();
  382.         scl_24c02=1;        delay(); }

  383. void write_byte_24c02(uchar date) //写8个
  384. {        uchar i,temp;
  385.         temp=date;
  386.         for(i=0;i<8;i++)
  387.         {        
  388.                 scl_24c02=0;            delay();
  389.                 if(temp&0x80)
  390.                 {
  391.                     sda_24c02=1;                delay();
  392.                 }
  393.                 else
  394.                 {
  395.                     sda_24c02=0;                delay();
  396.                 }
  397.                 scl_24c02=1;                delay();
  398.                 temp=temp<<1;
  399.         }
  400.         scl_24c02=0;        delay();
  401.         sda_24c02=1;        delay();  }

  402. uchar read_byte_24c02()
  403. {        uchar i,k;
  404.         scl_24c02=0;        delay();
  405.         sda_24c02=1;        delay();
  406.         TRISCbits.TRISC4=1;
  407.         delay();
  408.         for(i=0;i<8;i++)
  409.         {        scl_24c02=1;                delay();        
  410.                 k=(k<<1)|PORTCbits.RC4;
  411.                 scl_24c02=0;                 delay();        
  412.         }
  413.         TRISCbits.TRISC4=0;
  414.         delay();
  415.         return k;  }

  416. void write_add_24c02(uchar address,uchar date)//将某数据写入24C02某个单元中
  417. {        start_24c02();
  418.         write_byte_24c02(0xa0);         //24c02的写地址(1010 0000)
  419.         respons_24c02();
  420.         write_byte_24c02(address);
  421.         respons_24c02();
  422.         write_byte_24c02(date);
  423.         respons_24c02();
  424.         stop_24c02();         }

  425. uchar read_add_24c02(uchar address)//读出24c02某个单元数据到变量中
  426. {        uchar date;
  427.         start_24c02();
  428.         write_byte_24c02(0xa0);           //24c02的读地址(1010 0001)
  429.         respons_24c02();
  430.         write_byte_24c02(address);
  431.         respons_24c02();
  432.         start_24c02();
  433.         write_byte_24c02(0xa1);
  434.         respons_24c02();
  435.         date=read_byte_24c02();
  436.         stop_24c02();
  437.         return date; }
  438. //--------与24C02相关的设置和子函数  结束-----------
  439. void write_add1_24c02(uchar address,uchar date)//将某数据写入24C02某个单元中
  440. {        start_24c02();
  441.         
  442.         write_byte_24c02(address<<1);
  443.         respons_24c02();
  444.         write_byte_24c02(date);
  445.         respons_24c02();
  446.         stop_24c02();         }

  447. uchar read_add1_24c02(uchar address)//读出24c02某个单元数据到变量中
  448. {        uchar date;
  449.         start_24c02();
  450.         
  451.         write_byte_24c02((address<<1)+1);
  452.         respons_24c02();
  453.         //start_24c02();
  454.         //write_byte_24c02(0xa1);
  455.         //respons_24c02();
  456.         date=read_byte_24c02();
  457.         stop_24c02();
  458.         return date; }

  459. void XWrite_eeprom(UINT8 Address,UINT8 eeprom_Data)
  460. {
  461.         //XStart_iic();
  462.         start_24c02();
  463.     //XWriteByte(0xDE);
  464.         write_byte_24c02(0xde);
  465.     //XReceiveAck();
  466.         respons_24c02();
  467.     /*XWriteByte(0);
  468.     XReceiveAck();
  469.     XWriteByte(Address);
  470.     XReceiveAck();
  471.     XWriteByte(eeprom_Data);
  472.     XReceiveAck();       
  473.     XStop_iic();*/
  474.         write_byte_24c02(0);
  475.     //XReceiveAck();
  476.         respons_24c02();
  477.         write_byte_24c02(Address);
  478.     //XReceiveAck();
  479.         respons_24c02();
  480.         write_byte_24c02(eeprom_Data);
  481.     //XReceiveAck();
  482.         respons_24c02();
  483.         stop_24c02();
  484. }
  485. UINT8  XRead_eeprom(UINT8 Address)
  486. {
  487.     UINT8 rdata;

  488.     //XStart_iic();
  489.     //XWriteByte(0xDE);
  490.     //XReceiveAck();
  491.         start_24c02();
  492.    
  493.         write_byte_24c02(0xde);
  494.    
  495.         respons_24c02();
  496.     //XWriteByte(0);
  497.     //XReceiveAck();
  498.     //XWriteByte(Address);
  499.     //XReceiveAck();
  500.         write_byte_24c02(0);
  501.    
  502.         respons_24c02();
  503.         write_byte_24c02(Address);
  504.    
  505.         respons_24c02();

  506.     /*XStart_iic();
  507.     XWriteByte(0xDF);
  508.     XReceiveAck();
  509.     rdata=XReadByte();
  510.     XNo_Acknowledge();
  511.     XStop_iic(); */
  512.         start_24c02();
  513.    
  514.         write_byte_24c02(0xdf);
  515.    
  516.         respons_24c02();
  517.         rdata=read_byte_24c02();
  518.         stop_24c02();
  519.     return(rdata);       
  520. }



效果图

就是读写EEPROM有问题,写了三个不同的值,读出来都一样。
大神看看,哪里有误?谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
玛尼玛尼哄 发表于 2024-12-13 11:05 | 显示全部楼层
那就是时序有问题,检查一下时序。
玛尼玛尼哄 发表于 2024-12-13 11:06 | 显示全部楼层
我遇到过好几次这种,就是写入是没问题的,读取的时候只有第一次对。不知道咋回事。检查一下时序吧。或者用逻辑分析仪看一下。
huangcunxiake 发表于 2024-12-13 16:19 来自手机 | 显示全部楼层
你先写入一个再读取一个,看看两次读中间有什么不对的
 楼主| Tom952331 发表于 2024-12-14 11:15 | 显示全部楼层
玛尼玛尼哄 发表于 2024-12-13 11:06
我遇到过好几次这种,就是写入是没问题的,读取的时候只有第一次对。不知道咋回事。检查一下时序吧。或者用 ...

没有逻辑分析仪
 楼主| Tom952331 发表于 2024-12-14 11:15 | 显示全部楼层
huangcunxiake 发表于 2024-12-13 16:19
你先写入一个再读取一个,看看两次读中间有什么不对的

确实有问题。读第一个是对的,第二个和第三个反了
 楼主| Tom952331 发表于 2024-12-14 11:18 | 显示全部楼层

这个ARRAY和CCR是什么意思?谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| Tom952331 发表于 2024-12-14 12:54 | 显示全部楼层
现在好了,只是年月日时分秒闪的厉害,怎么让它不闪,是应该加长延时,还是减少?我试了几个值都不理想。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

224

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部