找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2268|回复: 0
收起左侧

i2c加24c02仿真和程序

[复制链接]
ID:315589 发表于 2018-6-11 19:56 | 显示全部楼层 |阅读模式
i2c加24c02仿真和程序,具体见附件压缩包,如有错误,请指正。


  1. #include "reg51.h"
  2. #include "intrins.h"  //包含有函数_ nop 0的头文件
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define out P0

  6. sbit scl=P1^1;
  7. sbit sda=P1^0;
  8. sbit key1=P3^2;
  9. sbit key2=P3^3;

  10. uchar data mem[4]_at_ 0x55;
  11. uchar mem[4] = {0x41,0x42,0x43,0xaa};
  12. uchar data rec_mem[4]_at_ 0x60;

  13. void start(void);
  14. void stop(void);
  15. void sack(void);
  16. bit rack(void);
  17. void ackn(void);
  18. void send_byte(uchar);
  19. uchar rec_byte(void);
  20. void write(void);
  21. void read(void);
  22. void delay4us(void);


  23. void main(void)
  24. {
  25.     EA=1;
  26.     EX0=1;
  27.     EX1=1;
  28.     while(1);
  29. }

  30. void ext0()interrupt 0
  31. {
  32.     write();
  33. }

  34. void ext1()interrupt 2
  35. {
  36.     read();
  37. }

  38. void read(void)
  39. {
  40.     uchar i;
  41.     bit f;
  42.     start();
  43.     send_byte(0xa0);
  44.     f=rack();
  45.     if(!f)
  46.     {
  47.         start();
  48.         send_byte(0xa0);
  49.         f=rack();
  50.         send_byte(0x00);
  51.         f=rack();
  52.         if(!f)
  53.         {
  54.             start();
  55.             send_byte(0xa1);
  56.             f=rack();
  57.             if(!f)
  58.                 {
  59.                 for(i=0;i<3;i++)
  60.                 {
  61.                 rec_mem[i]=rec_byte();
  62.                 sack();
  63.                 }
  64.                 rec_mem[3]=rec_byte();
  65.                 ackn();
  66.                 }
  67.                 }
  68.                 }
  69.                 stop();out=rec_mem[3];while(!key2);
  70.         }

  71. void write(void)
  72. {
  73.     uchar i;
  74.     bit f;
  75.     start();
  76.     send_byte(0xa0);
  77.     f=rack();
  78.     if(!f){
  79.         send_byte(0x00);
  80.         f=rack();
  81.         if(!f){
  82.             for(i=0;i<4;i++)
  83.             {
  84.                 send_byte(mem[i]);
  85.                 f=rack();
  86.                 if(f)break;
  87.             }
  88.         }
  89.     }
  90.     stop();
  91.     out=0xc3;
  92.     while(!key1);
  93. }

  94. void start(void)
  95. {
  96.     scl=1;
  97.     sda=1;
  98.     delay4us();
  99.     sda=0;
  100.     delay4us();
  101.     scl=0;
  102.     }

  103. void stop(void)
  104. {
  105.     scl=0;
  106.     sda=0;
  107.     delay4us();
  108.     scl=1;   
  109.     delay4us();
  110.     sda=1;
  111.     delay4us();
  112.     sda=0;
  113.   }
  114. bit rack(void)
  115. {  //接收一个应答位
  116.     bit flag;
  117.     scl=1;
  118.     delay4us();
  119.     flag=sda;
  120.     scl=0;
  121.     return(flag);
  122.   }

  123. void sack(void)  
  124. {    sda=0;
  125.     delay4us();
  126.     scl=1;
  127.     delay4us();
  128.     scl=0;
  129.     delay4us();
  130.     sda=1;
  131.     delay4us();
  132.     }
  133. void ackn(void)
  134. {     sda=1;
  135.     delay4us();
  136.     scl=1;
  137.     delay4us();
  138.     scl=0;
  139.     delay4us();
  140.     sda=0;
  141.     }
  142. uchar rec_byte(void)
  143. {     uchar i,temp;
  144.     for(i=0;i<8;i++)
  145.     {
  146.         temp<<=1;
  147.         scl=1;
  148.         delay4us();
  149.         temp|=sda;
  150.         scl=0;
  151.         delay4us();
  152.     }
  153. return(temp);
  154. }

  155. void send_byte(uchar temp)
  156. {   uchar i;
  157.     scl=0;
  158.     for(i=0;i<8;i++)
  159.     {
  160.         sda=(bit)(temp&0x80);
  161.         scl=1;
  162.         delay4us();
  163.         scl=0;
  164.         temp<<=1;
  165.     }
  166.         sda=1;
  167. }

  168. void delay4us(void)
  169. {
  170.     _nop_();_nop_(); _nop_(); _nop_();
  171. }
复制代码



24c02.rar

64.41 KB, 下载次数: 41, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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