欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)通過(guò)I2C串行總線擴(kuò)展1片AT24C02,實(shí)現(xiàn)單片機(jī)對(duì)存儲(chǔ)器AT24C02的讀、寫(xiě) [打印本頁(yè)]

作者: 51+32    時(shí)間: 2020-6-13 14:22
標(biāo)題: 51單片機(jī)通過(guò)I2C串行總線擴(kuò)展1片AT24C02,實(shí)現(xiàn)單片機(jī)對(duì)存儲(chǔ)器AT24C02的讀、寫(xiě)
單片機(jī)通過(guò)I2C串行總線擴(kuò)展1AT24C02,實(shí)現(xiàn)單片機(jī)對(duì)存儲(chǔ)器AT24C02的讀、寫(xiě)。由于Proteus元件庫(kù)中沒(méi)有AT24C02,可用FM24C02芯片代替,即在Proteus中“關(guān)鍵字”對(duì)話框元件查找欄中輸入“24C02”,就會(huì)在左側(cè)的元件列表中顯示,然后在元件列表中選擇即可。AT89S51FM24C02的接口原理電路見(jiàn)圖。
圖中KEY1作為外部中斷0的中斷源,當(dāng)按下KEY1,單片機(jī)通過(guò)I2C總線發(fā)送數(shù)據(jù)0xaaAT24C02,等發(fā)送數(shù)據(jù)完畢后,將0xc3P2口通過(guò)LED顯示。
KEY2作為外部中斷1的中斷源,當(dāng)按下KEY2時(shí),單片機(jī)通過(guò)I2C總線讀AT24C02,等讀數(shù)據(jù)完畢后,將讀出的最后數(shù)據(jù)0xaaP2口的LED顯示出來(lái)。

最終顯示的仿真效果是:按下KEY1,標(biāo)號(hào)為D1D88個(gè)LEDD3D4D5D6燈亮,如圖10-17所示。按下KEY2,則D1D3D5D7燈亮。
Proteus提供的I2C調(diào)試器是調(diào)試I2C系統(tǒng)的得力工具,使用I2C調(diào)試器的觀測(cè)窗口可觀察I2C總線上的數(shù)據(jù)流,查看I2C總線發(fā)送的數(shù)據(jù),也可作為從器件向I2C總線發(fā)送數(shù)據(jù)。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<stdio.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define out P2
  7. sbit scl=P1^1;
  8. sbit sda=P1^0;
  9. sbit key1 =P3^2;
  10. sbit key2=P3^3;
  11. uchar data mem[4]_at_0x55;
  12. uchar mem[4]={0x41,0x42,0x43,0xaa};
  13. uchar data rec_mem[4]_at_0x60;
  14. void start(void);
  15. void stop(void);
  16. void sack(void);
  17. bit rack(void);
  18. void ackn(void);
  19. void send_byte(uchar);
  20. uchar rec_byte(void);
  21. void write(void);
  22. void read(void);
  23. void delay4us(void);
  24. void main(void)
  25. {
  26. EA=1 ;EX0=1;EX1=1;
  27. while(1);
  28. }
  29. void ext0()interrupt 0
  30. {
  31. write();
  32. }
  33. void ext1()interrupt 2
  34. {
  35. read();
  36. }
  37. void read(void)
  38. {
  39. uchar i;
  40. bit f;
  41. start();
  42. send_byte(0xa0);
  43. f=rack();
  44. if(!f)
  45. {
  46. start();
  47. send_byte(0xa0);
  48. f=rack();
  49. send_byte(0x00);
  50. f=rack();
  51. if(!f)
  52. {
  53. or(i=0;i<3;i++)
  54. {
  55. rec_mem[i]=rec_byte();
  56. sack(); .
  57. rec_mem[3]=rec_byte();ackn();
  58. }
  59. }
  60. }
  61. stop();out=rec_mem[3];while(!key2);
  62. }
  63. void write(void)
  64. {
  65. uchar i;
  66. bit f;
  67. start();
  68. send_byte(0xa0);
  69. f=rack();
  70. if(!f){
  71. send_byte(0x00);
  72. f=rack();
  73. if(!f){
  74. for(i=0;i<4;i++)
  75.         {
  76. send_byte(mem[i]);
  77. f=rack();
  78. if(f)break;
  79. }
  80.         }
  81. }
  82. stop();out=0xc3;while(!key1);
  83. }
  84. void start(void)
  85. {
  86. scl=1;
  87. sda=1;
  88. delay4us();
  89. sda=0;
  90. delay4us();
  91. scl=0;
  92. }
  93. void stop(void)
  94. {
  95. scl=0;
  96. sda=0;
  97. delay4us();
  98. scl=1;
  99. delay4us();
  100. sda=1;
  101. delay5us();
  102. sda=0;
  103. }
  104. bit rack(void)
  105. {
  106. bit flag;
  107. scl=1;
  108. delay4us();
  109. flag= sda;
  110. scl=0;
  111. }
  112. return(flag);
  113. }
  114. void sack(void)
  115. {
  116. sda=0;
  117. delay4us();
  118. scl=1;
  119. delay4us();
  120. scl=0;
  121. delay4us();
  122. sda=1;
  123. delay4us();
  124. }
  125. void ackn(void)
  126. {
  127. sda=1;
  128. delay4us();
  129. scl=1;
  130. delay4us();
  131. scl=0;
  132. delay4us();
  133. sda=0;
  134. }
  135. uchar rec_byte(void)
  136. {
  137. uchar i,temp;
  138. for(i=0;i<8;i++)
  139. {
  140. temp<<=1;
  141. scl=1;
  142. delay4us();
  143. temp|=sda;
  144. scl=0;
  145. delay4us();
  146. }
  147. ……………………

  148. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
protues仿真工程文件.rar (50.38 KB, 下載次數(shù): 151)


作者: 8765645655464    時(shí)間: 2020-6-15 16:25
大佬大佬
作者: CRYSTAL111    時(shí)間: 2021-11-14 21:39
想請(qǐng)問(wèn)一下通過(guò)I2C串行總線擴(kuò)展的.c文件為什么在建立工程后再編譯就會(huì)顯示失敗啊

作者: xiaozhou1210    時(shí)間: 2021-12-15 21:55
我這里一直有一個(gè)錯(cuò)誤
I2C.c(11): error C129: missing ';' before '_at_0x55'
I2C.c - 1 Error(s), 0 Warning(s).  一直沒(méi)找到
作者: mybaoer    時(shí)間: 2023-6-7 09:23
有錯(cuò)誤,不能運(yùn)行
作者: Hephaestus    時(shí)間: 2023-6-8 00:37
xiaozhou1210 發(fā)表于 2021-12-15 21:55
我這里一直有一個(gè)錯(cuò)誤
I2C.c(11): error C129: missing ';' before '_at_0x55'
I2C.c - 1 Error(s), 0 Wa ...

_at_0x55中間應(yīng)該有一個(gè)空格。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1