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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3715|回復: 5
收起左側

怎么用51單片機寫一個I2C從機的代碼

[復制鏈接]
ID:786910 發表于 2021-2-2 15:01 | 顯示全部樓層 |閱讀模式
網上的I2C都是主機多然而從機的代碼很少而且用軟件模擬的更少希望有人發一些有用的資料學習一下
回復

使用道具 舉報

ID:320306 發表于 2021-2-3 09:43 | 顯示全部樓層
大部分單片機都是主機吧,什么情況下單片機會作為從機使用呢?
回復

使用道具 舉報

ID:871393 發表于 2021-2-3 12:03 | 顯示全部樓層
給你個思路吧 從機想要接收 就需要知道主機的時鐘線 把時鐘線接到外部中斷 進入中斷后讀取數據線 最后把數組組成一個字節
回復

使用道具 舉報

ID:592807 發表于 2021-2-3 13:26 | 顯示全部樓層
77599585 發表于 2021-2-3 12:03
給你個思路吧 從機想要接收 就需要知道主機的時鐘線 把時鐘線接到外部中斷 進入中斷后讀取數據線 最后把數 ...

時鐘線時跳變的,最好有個片選CS,將CS腳接到中斷可能更好
回復

使用道具 舉報

ID:155507 發表于 2021-2-3 17:38 | 顯示全部樓層
網上找來的,可能會有所幫助吧

  1. /****************************************************************/
  2. bit iic_start_decide()    //IIC 開始判斷
  3. {
  4.         while(SCL==0);                   //開始不滿足條件
  5.         while((SCL==1)&&(SDA==1));       //開始條件
  6.         if((SCL==1)&&(SDA==0))           //開始
  7.         {
  8.                 while(SCL==1);               //等待到時鐘開始低跳變
  9.                 return 1;
  10.         }
  11.         else
  12.         return 0;
  13. }

  14. /****************************************************************/
  15. bit iic_stop_decide()            //IIC 結束判斷
  16. {
  17.         while(SCL==0);               //結束不滿足條件
  18.         if((SCL==1)&&(0==SDA))       //結束
  19.         {
  20.                 while(SDA==0);           //等待到數據開始高跳變
  21.                 return 1;
  22.         }
  23.         else
  24.         {
  25.                 return 0;
  26.         }
  27. }
  28. /****************************************************************/
  29. uchar iic_receive()
  30. {
  31.         uchar i;
  32.         uchar rdata='0';

  33.         SDA=1;
  34.         for(i=0;i<8;i++)
  35.         {
  36.                 rdata<<=1;
  37.                 while(SCL==0);        //當時鐘為低時,數據無效,等待
  38.                 if(SDA==1)
  39.                 rdata++;
  40.                 while(SCL==1);        //防止在一個高電平時讀8次
  41.         }
  42.         return (rdata);
  43. }
  44. /****************************************************************/
  45. bit iic_ack_decide()
  46. {
  47.         bit ack_flag;         //局部變量
  48.         SDA=0;                ////8位發送完畢,釋放數據線SDA,準備接收應答位
  49.         while(SCL==0);        //等待SCL變高電平
  50.         //ack_flag=0;
  51.         while(SCL==1);        //等待SCL變高電平
  52.         SDA=1;
  53.         ack_flag=1;
  54.         return(ack_flag);
  55. }


復制代碼

  1. ;/*------------------------------------------------------------------*/
  2. ;/* --- STC MCU International Limited -------------------------------*/
  3. ;/* --- STC 1T Series MCU Simulate I2C Slave Demo -------------------*/
  4. ;/* --- Mobile: (86)13922805190 -------------------------------------*/
  5. ;/* --- Fax: 86-755-82944243 ----------------------------------------*/
  6. ;/* --- Tel: 86-755-82948412 ----------------------------------------*/
  7. ;/* --- Web: www.STCMCU.com -----------------------------------------*/
  8. ;/* If you want to use the program or the program referenced in the  */
  9. ;/* article, please specify in which data and procedures from STC    */
  10. ;/*------------------------------------------------------------------*/

  11. SCL BIT P1.0
  12. SDA BIT P1.1

  13. ;----------------------------

  14.         ORG 0

  15. RESET:
  16.     SETB SCL
  17.     SETB SDA
  18.    
  19.     CALL I2C_WAITSTART  ;等待起始信號
  20.     CALL I2C_RXBYTE     ;接收地址數據
  21.     CLR C
  22.     CALL I2C_TXACK      ;回應ACK
  23.     SETB C              ;讀/寫 IDATA[80H - FFH]
  24.     RRC A               ;讀/寫位->C
  25.     MOV R0,A            ;地址送入R0
  26.     JC READDATA         ;C=1(讀) C=0(寫)
  27. WRITEDATA:
  28.     CALL I2C_RXBYTE     ;接收數據
  29.     MOV @R0,A           ;寫入IDATA
  30.     INC R0              ;地址+1
  31.     CLR C
  32.     CALL I2C_TXACK      ;回應ACK
  33.     CALL I2C_WAITSTOP   ;等待停止信號
  34.     JMP RESET
  35.    
  36. READDATA:
  37.     MOV A,@R0
  38.     INC R0
  39.     CALL I2C_TXBYTE     ;發送IDATA數據
  40.     CALL I2C_RXACK      ;接收ACK
  41.     CALL I2C_WAITSTOP   ;等待停止信號
  42.     JMP RESET

  43. ;----------------------------
  44. ;等待起始信號
  45. ;----------------------------
  46. I2C_WAITSTART:
  47.     JNB SCL,$       ;等待時鐘->高
  48.     JB SDA,$        ;等待數據線下降沿
  49.     JB SCL,$        ;等待時鐘->低
  50.     RET

  51. ;----------------------------
  52. ;等待結束信號
  53. ;----------------------------
  54. I2C_WAITSTOP:
  55.     JNB SCL,$       ;等待時鐘->高
  56.     JNB SDA,$       ;等待數據線上升沿
  57.     RET

  58. ;----------------------------
  59. ;發送ACK/NAK信號
  60. ;----------------------------
  61. I2C_TXACK:
  62.     MOV SDA,C       ;送ACK數據
  63.     JNB SCL,$       ;等待時鐘->高
  64.     JB SCL,$        ;等待時鐘->低
  65.     SETB SDA        ;發送完成
  66.     RET

  67. ;----------------------------
  68. ;接收ACK/NAK信號
  69. ;----------------------------
  70. I2C_RXACK:
  71.     SETB SDA        ;準備讀數據
  72.     JNB SCL,$       ;等待時鐘->高
  73.     MOV C,SDA       ;讀取ACK信號
  74.     JB SCL,$        ;等待時鐘->低
  75.     RET

  76. ;----------------------------
  77. ;接收一字節數據
  78. ;----------------------------
  79. I2C_RXBYTE:
  80.     MOV R7,#8       ;8位計數
  81. RXNEXT:
  82.     JNB SCL,$       ;等待時鐘->高
  83.     MOV C,SDA       ;讀取數據口
  84.     RLC A           ;保存數據
  85.     JB SCL,$        ;等待時鐘->低
  86.     DJNZ R7,RXNEXT  ;收下一位
  87.     RET

  88. ;----------------------------
  89. ;發送一字節數據
  90. ;----------------------------
  91. I2C_TXBYTE:
  92.     MOV R7,#8       ;8位計數
  93. TXNEXT:
  94.     RLC A           ;移出數據位
  95.     MOV SDA,C       ;數據送數據口
  96.     JNB SCL,$       ;等待時鐘->高
  97.     JB SCL,$        ;等待時鐘->低
  98.     DJNZ R7,TXNEXT  ;送下一位
  99.     RET

  100. ;----------------------------

  101.         END
復制代碼

回復

使用道具 舉報

ID:786910 發表于 2021-2-9 21:07 | 顯示全部樓層
zsyzdx 發表于 2021-2-3 09:43
大部分單片機都是主機吧,什么情況下單片機會作為從機使用呢?

我現在的項目就是一個主單片機控制一個從的51單片機領導要求用I2C通信我要做的就是那個從的單片機
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人久久精品 | 一区二区三区av | 国产精品成人一区二区三区夜夜夜 | 久久久久99 | 久久中文一区二区 | 日韩欧美在线视频播放 | 色婷婷亚洲国产女人的天堂 | 久久免费电影 | 国产精品久久久久久久久久 | 夜色www国产精品资源站 | 国产精品久久久久久久久久 | 美女视频黄色的 | 影音先锋男 | 免费一级做a爰片久久毛片潮喷 | av免费网站在线观看 | 在线播放中文字幕 | 正在播放一区二区 | 激情欧美一区二区三区 | 国产一区在线免费观看 | 亚洲天堂男人的天堂 | 午夜天堂精品久久久久 | 国产精品精品视频 | 亚洲精品久久 | 国产激情自拍视频 | 国产欧美一区二区三区久久人妖 | 日韩亚洲一区二区 | 午夜精品久久久久久不卡欧美一级 | 狠狠艹 | 久久久久久综合 | 欧美aaa一级片 | 日韩电影中文字幕 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 精品成人 | 亚洲欧美日韩一区二区 | 日韩精品一区二区三区在线播放 | 一区二区三区四区免费视频 | 99久久久无码国产精品 | 国产一级片av | 精品无码久久久久久国产 | 91在线成人 | 欧美视频1 |