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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1171|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

IIC總線單片機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  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. }
復(fù)制代碼

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

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

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕 亚洲一区 | 国产高清在线观看 | 国产激情视频在线观看 | 成人片网址 | 国产区在线观看 | 99视频在线播放 | 久草免费在线视频 | 国产精品久久久久久久久婷婷 | 亚洲精品在线看 | 中文成人在线 | 国产一区二区在线看 | 欧美一级在线观看 | 日日干干 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 国产欧美一区二区三区免费 | 亚洲图片一区二区三区 | 国产激情视频网站 | 91精品久久久久久久久久 | 三极网站 | 国产成人久久精品一区二区三区 | 国产精品1区2区 | 亚洲播放| 黄色片在线观看网址 | 日韩中文字幕视频在线 | 男女爱爱福利视频 | 亚洲精品久久久久久国产精华液 | 亚洲国产小视频 | 91视频免费在观看 | 男女精品网站 | 九九av | 羞羞视频在线观看 | 欧美激情欧美激情在线五月 | 香蕉视频黄色 | 国产高清久久久 | 日韩手机在线看片 | 99福利 | 成人免费视频久久 | 日韩一区二区三区在线 | 九九爱这里只有精品 | 亚洲高清免费 | 成人黄色av |