久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1198|回復: 0
打印 上一主題 下一主題
收起左側

IIC總線單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
  1. #include "reg51.h"
  2. #include "intrins.h"
  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. }
復制代碼

仿真圖.png (46.51 KB, 下載次數: 18)

仿真圖.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产激情视频 | 久久精品亚洲精品国产欧美 | 亚洲天堂中文字幕 | 中文字幕亚洲免费 | 欧美国产一区二区三区 | 激情五月综合网 | 免费v片| 一级毛片视频免费观看 | 国产精选一区 | 成年免费大片黄在线观看岛国 | 精品国产一区二区国模嫣然 | 亚洲 欧美 综合 | 97精品国产97久久久久久免费 | 免费观看一级特黄欧美大片 | 国产成人精品999在线观看 | 国产在线播放一区二区三区 | 成人教育av | 国产精品成人一区 | 成人h视频| 精品乱子伦一区二区三区 | 国产精品91视频 | 国产在线中文字幕 | 精品精品视频 | 国内精品久久久久久影视8 最新黄色在线观看 | 亚洲精品一区二三区不卡 | 色爽女| 成人一区二区在线 | 91国产在线视频在线 | 日本精品一区二区在线观看 | 一区二区精品 | 亚洲激情网站 | 青青草在线播放 | 久久久久国 | 日韩免费高清视频 | 亚洲热在线视频 | 在线日韩欧美 | 欧美一级二级三级视频 | 91视频大全 | 国产日韩免费视频 | 久热伊人| 国产精品99久久久精品免费观看 |