注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
小硕硕的个人空间 https://home.eeworld.com.cn/space-uid-596436.html [收藏] [复制] [分享] [RSS]
日志

STC89C52RC内部EEPROM的操作

已有 3081 次阅读2015-7-30 09:52

玩单片机也很长时间了,我是以玩为乐趣,属于不求甚解的那种,所以时间长了也有了许多的电路板,但是哪个玩的也不精通,看到有新功能的总想去学学、去了解,看看是什么原理实现的,了解的差不多了就放一边去了,虽然是这样但是51单片机我始终还是放不下,有时间还是会拿起来玩玩。


想必现在玩STC89C52RC单片机的朋友是最多的吧!我呢只用STC89C52单片机驱动外设,比如LED,数码管,液晶和键盘,对显示器件情有独钟,还有那些AD、EEPROM神马的我都不玩的,就是懒的弄那些通讯总线神马的看到就,虽然手里有写好的头文件但也还是懒的调用,懒的分析。


在看EEPROM 24C04的时候觉得那种带有记忆的小实验好神奇啊,总想着自己什么时候也能写出一个来,可以自己实在是懒的看24C04的程序啊,什么通讯协议,页,扇区,地址,想想还是算了吧,我记得我曾经静心好好看了看那个程序,可惜还是没有看懂,不能理解程序的思路,于是乎就放弃了。



等会,扯了这么多,喝点水去      



书归正传,分享一个STC89C52RC EEPROM的程序,写之前要先擦除呦



  1. #include
  2. #include
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. int show[]={0xff,0x00,0xff,0x00,
  6.                         0x81,0x42,0x24,0x18,
  7.                         0x24,0x42,0x81,0xff,
  8.                         0x80,0x40,0x20,0x10,
  9.                         0x08,0x04,0x02,0x01,
  10.                         0x02,0x04,0x08,0x10,
  11.                         0x20,0x40,0x80};

  12. delay(uint n)
  13. {
  14.         uint x,y;
  15.         for(x=n;x>0;x--)
  16.                 for(y=120;y>0;y--);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
  17. }

  18. sfr isp_wdt=0xe1;
  19. sfr isp_data=0xe2;
  20. sfr isp_addrh=0xe3;
  21. sfr isp_addrl=0xe4;
  22. sfr isp_cmd=0xe5;
  23. sfr isp_trig=0xe6;
  24. sfr isp_contr=0xe7;

  25. //EEPROM扇区擦除程序
  26. void stc89cxx_eeprom_erase(uchar t_addr)
  27. {
  28.         isp_addrh=t_addr;//
  29.         isp_addrl=0;
  30.         EA=0;
  31.         isp_contr=0x81;
  32.         isp_cmd=3;
  33.         isp_trig=0x46;
  34.         isp_trig=0xb9;
  35.         _nop_();
  36.         _nop_();
  37.         isp_contr=0;
  38.         isp_cmd=0;
  39.         isp_trig=0;
  40.         isp_addrh=0;
  41.         isp_addrl=0;
  42.         EA=1;
  43. }

  44. //EEPROM字节写程序
  45. void stc89cxx_eeprom_char_write(uchar w_addr_h,uchar w_addr_l,uchar w_data)
  46. {
  47.         isp_data=w_data;
  48.         isp_addrh=w_addr_h;
  49.         isp_addrl=w_addr_l;
  50.         EA=0;
  51.         isp_contr=0x81;
  52.         isp_cmd=2;
  53.         isp_trig=0x46;
  54.         isp_trig=0xb9;
  55.         _nop_();
  56.         _nop_();
  57.         isp_contr=0;
  58.         isp_cmd=0;
  59.         isp_trig=0;
  60.         isp_addrh=0;
  61.         isp_addrl=0;
  62.         EA=1;
  63. }

  64. //EEPROM字节度程序
  65. stc89cxx_eepeom_char_read(uchar r_addr_h,uchar r_addr_l)
  66. {
  67.         uchar r_isp_data;
  68.         isp_addrh=r_addr_h;
  69.         isp_addrl=r_addr_l;
  70.         EA=0;
  71.         isp_contr=0x81;
  72.         isp_cmd=1;
  73.         isp_trig=0x46;
  74.         isp_trig=0xb9;
  75.         _nop_();
  76.         _nop_();
  77.         isp_contr=0;
  78.         isp_cmd=0;
  79.         isp_trig=0;
  80.         isp_addrh=0;
  81.         isp_addrl=0;
  82.         EA=1;
  83.         r_isp_data=isp_data;
  84.         return(r_isp_data);
  85. }

  86. init_rs232()
  87. {
  88.         SCON=0X50;
  89.         PCON=0X00;
  90.         TH1=0XF3;
  91.         TL1=0XF3;
  92.         TMOD=0X20;
  93.         TR1=1;

  94. }

  95. main()
  96. {
  97.         uint i;

  98.         init_rs232();

  99.         i=stc89cxx_eepeom_char_read(0x20,0x00);

  100.     delay(100);

  101.                 stc89cxx_eeprom_erase(0x20);

  102.         while(1)
  103.         {
  104.         for(;i<27;i++)
  105.                 {
  106.        
  107.         stc89cxx_eeprom_char_write(0x20,0x00,i);
  108.                 SBUF=i;
  109.                 delay(100);
  110.                 P0=show[i];       
  111.                 delay(800);       
  112.                  }
  113.         if(i==27)
  114.                 i=0;
  115.         }
  116.        
  117. }
复制代码

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章