找回密码
 立即注册

QQ登录

只需一步,快速开始

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

PIC16F877读写24C02

[复制链接]
跳转到指定楼层
楼主
ID:166335 发表于 2017-2-24 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1黑币
各位大侠好!
       目前想做一个往24C02所有存储单元写入一个固定数据(比如00,AA),然后再读是否全部写入程序,初学者不知道如何下手。请大虾帮我一下,感谢不尽。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2017-2-24 10:17 | 只看该作者
  1. //PIC16f877A读写24c02程序
  2. #include<pic.h>  
  3. #include<string.h>  
  4. #define uchar  unsigned char  
  5. #define uint   unsigned int   
  6. static volatile unsigned char aCC @ 0x20;            //发收数据暂存器  
  7. static volatile bit acc0     @ (unsigned)&acc*8+0;   //接收  
  8. static volatile bit acc7     @ (unsigned)&acc*8+7;   //发送  
  9. static volatile unsigned char err @ 0x21;            //  
  10. static volatile bit err0     @ (unsigned)&err*8+0;  
  11. static volatile bit err3     @ (unsigned)&err*8+3;  
  12. static volatile bit err6     @ (unsigned)&err*8+6;  
  13. static volatile bit err7     @ (unsigned)&err*8+7;   //应答位暂存位  void  Cack();        //应答位检查  
  14. void  Mnack();       //发送非应答位  
  15. void  Mack();        //发送应答位  
  16. void  Stop();        //停止IC总线  
  17. void  Sta();        //启动IC总线  
  18. void  Wrbyt (uchar x) ;     //写一字节  
  19. uchar Rdbyt( );      //读一字节  
  20. void  Rdnbyt ();       //读n个数据  
  21. void  Wrnbyt(uchar SLAwtemp );   //写n个数据  
  22. void initial();       //I/O初始化子程序  
  23. void LED ();      //  
  24. void delay(uint a);  
  25. void delay1();  
  26. #define  SCL  RB4 //4  ;24C01-6  
  27. #define  SDA  RB5 //5  ;24C01-5  
  28. #define  SCLIO  TRISB4 //4  
  29. #define  SDAIO  TRISB5 //5  
  30. #define  SLAW   0x0A0//寻址字节写  
  31. #define  SLAR   0x0A1//寻址字节读  
  32. uchar numer=1;  //数码管数据暂存区  
  33. unsigned char sun[10] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //////////////24C01/////////////////  
  34. //--------应答位检查---------  
  35. void  Cack()  
  36. {   
  37.         SCL=1;  
  38.         SDAIO=1;//输入1  
  39.         SCLIO=0;  
  40.         delay1();  
  41.         err7=SDA;//c=1错误ERR  
  42.         SCL=0;  
  43. }  
  44. ///--------发送非应答位----------   
  45. void  Mnack()  
  46. {  
  47.         SDA=1;  
  48.         SCLIO=0;  
  49.         SDAIO=0;//输出  
  50.         SCL=1;  
  51.         delay1();  
  52.         SCL=0;  
  53.         SDA=0;  
  54. }  
  55. //-------发送应答位---------------  
  56. void  Mack()  
  57. {  
  58.         SDA=0;  
  59.         SCLIO=0;  
  60.         SDAIO=0;//输出  
  61.         SCL=1;  
  62.         delay1();  
  63.         SCL=0;  
  64.         SDA=1;  
  65. }  
  66. //--------停止IC总线---------------  
  67. void  Stop()  
  68. {  
  69.         SDAIO=0;//输出  
  70.         SCLIO=0;  
  71.         SDA=0;  
  72.         delay1();  
  73.         SCL=1;  
  74.         delay1();  
  75.         SDA=1;  
  76.         delay1();  
  77. }  
  78. //--------;启动IC总线-------------  
  79. void  Sta()  
  80. {   
  81.         SDAIO=0;//输出  
  82.         SCLIO=0;  
  83.         SDA=1;  
  84.         delay1();  
  85.         SCL=1;  
  86.         delay1();  
  87.         SDA=0;  
  88.         delay1();  
  89.         SCL=0;  
  90. }  
  91. //--------写一字节------------------------   
  92. void  Wrbyt(uchar x)   
  93. {  
  94.         uchar i;  
  95.         acc=x;  
  96.         SCLIO=0;  
  97.         SDAIO=0;  
  98.         for(i=8;i>0;i--)  
  99.         {  
  100.                 SDA=acc7;  
  101.                 SCL=1;  
  102.                 delay1();  
  103.                 SCL=0;  
  104.                 SDA=0;   
  105.                 acc=acc<<1;  
  106.         }  
  107. }  
  108. //---------读一字节-----------------  
  109. uchar   Rdbyt( )  
  110. {  
  111.         uchar i;  
  112.         SCLIO=0;  
  113.         SDAIO=1;//;输入  
  114.         for(i=8;i>0;i--)  
  115.         {  
  116.                 acc=acc<<1;//接收数据左移寄存器   
  117.                 SCL=1;  
  118.                 delay1();  
  119.                 acc0=SDA;  
  120.                 SCL=0;  
  121.                 delay1();  
  122.         }  
  123.         return(acc);   
  124. }   
  125. ////---------读n个数据----------------  
  126. void  Rdnbyt () //传送数据个  
  127. {  
  128.         Sta(); //启动IC总线   
  129.         delay1();  
  130.         numer = Rdbyt();///读一字节  
  131.         delay1();  
  132.         Stop(); //停止IC总线  
  133. }  
  134. //---------写n个数据---------------  
  135. void  Wrnbyt(uchar SLAwtemp )  
  136. {   err7=1;  
  137.         if(err7==1)///c=1E0,ERR  
  138.         {  
  139.                 Sta(); //启动IC总线  
  140.                 delay1();  
  141.                 Wrbyt(SLAwtemp); //写一字节   
  142.                 delay1();  
  143.                 Cack();//应答位检查-  
  144.         }  
  145.         delay1();  
  146.         while(err7==1);  
  147.         Stop(); //停止IC总线  
  148. }  //*************************************//  
  149. //系统 各I/O初始化子程序  
  150. void initial()  
  151. {  
  152.         TRISC=0;  
  153.         TRISA=0;  
  154.         TRISB1=1;  
  155.         TRISB2=1;  
  156. }  //LED  
  157. void LED ()  
  158. {  
  159.         PORTA=0X1f;  
  160.         PORTC=sun[numer];  
  161. }  
  162. void delay(uint a)  
  163. {  
  164.         uint b=100;  
  165.         while(a--)  
  166.         {  
  167.                 while(b--);  
  168.         }  
  169. }  
  170. void delay1()  
  171. {  
  172.         NOP();  
  173.         NOP();  
  174.         NOP();  
  175.         NOP();  
  176. }  
  177. void main()  
  178. {  
  179.         initial();//系统 各I/O初始化子程序  
  180.         LED();  
  181.         delay(100);  
  182.         Wrnbyt (SLAW);//寻址字节写#0A0  
  183.         delay1();  
  184.         Wrnbyt (0x05);//写地址0x05  
  185.         delay1();  
  186.         Wrnbyt (0x06);//写数据0x06  
  187.         delay1();  
  188.         Wrnbyt (SLAR);//寻址字节读#0A1  
  189.         delay1();  
  190.         Wrnbyt (0x05);//读地址0x05  
  191.         delay1();  
  192.         Rdnbyt (); //读数据  
  193.         delay(5);  
  194.         while(1)  
  195.         {LED();}  
  196. }  

复制代码
回复

使用道具 举报

板凳
ID:123289 发表于 2017-2-26 21:28 | 只看该作者
你能把书上关于24C02的读写部分,手写后再传上来吗?
回复

使用道具 举报

地板
ID:167485 发表于 2017-3-1 19:04 | 只看该作者
可以。。。。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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