1. ;Slave.asm
  2. SCL BIT P1.
  3. SDA BIT P1.
  4.  
  5. ;----------------------------
  6. ORG
  7. RESET:
  8. SETB SCL
  9. SETB SDA
  10. CALL I2C_WAITSTART ;等待起始信号
  11. CALL I2C_RXBYTE ;接收地址数据
  12. CLR C
  13. CALL I2C_TXACK ;回应ACK
  14. SETB C ;读/写 IDATA[80H - FFH]
  15. RRC A ;读/写位->C
  16. MOV R0,A ;地址送入R0
  17. JC READDATA ;C=1(读) C=0(写)
  18. WRITEDATA:
  19. CALL I2C_RXBYTE ;接收数据
  20. MOV @R0,A ;写入IDATA
  21. INC R0 ;地址+1
  22. CLR C
  23. CALL I2C_TXACK ;回应ACK
  24. CALL I2C_WAITSTOP ;等待停止信号
  25. JMP RESET
  26. READDATA:
  27. MOV A,@R0
  28. INC R0
  29. CALL I2C_TXBYTE ;发送IDATA数据
  30. CALL I2C_RXACK ;接收ACK
  31. CALL I2C_WAITSTOP ;等待停止信号
  32. JMP RESET
  33.  
  34. ;----------------------------
  35. ;等待起始信号
  36. ;----------------------------
  37. I2C_WAITSTART:
  38. JNB SCL,$ ;等待时钟->高
  39. JB SDA,$ ;等待数据线下降沿
  40. JB SCL,$ ;等待时钟->低
  41. RET
  42.  
  43. ;----------------------------
  44. ;等待结束信号
  45. ;----------------------------
  46. I2C_WAITSTOP:
  47. JNB SCL,$ ;等待时钟->高
  48. JNB SDA,$ ;等待数据线上升沿
  49. RET
  50.  
  51. ;----------------------------
  52. ;发送ACK/NAK信号
  53. ;----------------------------
  54. I2C_TXACK:
  55. MOV SDA,C ;送ACK数据
  56. JNB SCL,$ ;等待时钟->高
  57. JB SCL,$ ;等待时钟->低
  58. SETB SDA ;发送完成
  59. RET
  60.  
  61. ;----------------------------
  62. ;接收ACK/NAK信号
  63. ;----------------------------
  64. I2C_RXACK:
  65. SETB SDA ;准备读数据
  66. JNB SCL,$ ;等待时钟->高
  67. MOV C,SDA ;读取ACK信号
  68. JB SCL,$ ;等待时钟->低
  69. RET
  70.  
  71. ;----------------------------
  72. ;接收一字节数据
  73. ;----------------------------
  74. I2C_RXBYTE:
  75. ;8位计数
  76. RXNEXT:
  77. JNB SCL,$ ;等待时钟->高
  78. MOV C,SDA ;读取数据口
  79. RLC A ;保存数据
  80. JB SCL,$ ;等待时钟->低
  81. DJNZ R7,RXNEXT ;收下一位
  82. RET
  83.  
  84. ;----------------------------
  85. ;发送一字节数据
  86. ;----------------------------
  87. I2C_TXBYTE:
  88. ;8位计数
  89. TXNEXT:
  90. RLC A ;移出数据位
  91. MOV SDA,C ;数据送数据口
  92. JNB SCL,$ ;等待时钟->高
  93. JB SCL,$ ;等待时钟->低
  94. DJNZ R7,TXNEXT ;送下一位
  95. RET
  96. ;----------------------------
  97. ;END

模拟I2C从机程序的更多相关文章

  1. 模拟I2C从机

    模拟I2C主机的比较多,但是从机相对主机而言要难很多,这个供大家借鉴. 这个从机程序支持主机对它的随机写和随机读,连续读和连续写没做,有兴趣的可以完善下,呵呵. //Microcontrol CODE ...

  2. STM32F4XX中断方式通过IO模拟I2C总线Master模式

    STM32的I2C硬核为了规避NXP的知识产权,使得I2C用起来经常出问题,因此ST公司推出了CPAL库,CPAL库在中断方式工作下仅支持无子地址 的器件,无法做到中断方式完成读写大部分I2C器件.同 ...

  3. MSP430的IO口模拟I2C总线对AT24C25进行读写程序

    功能: 实现MSP430口线模拟I2C总线协议与24C04通信.                                           ** 描述: 主系统工作时钟为12MHz,I2C工 ...

  4. STM8S 模拟I2C程序

    STM8S的硬件I2C还是存在问题,不敢贸然使用. 于是决定用模拟I2C. #define SCL PE_ODR_ODR1 #define SDA PE_ODR_ODR2 #define SDAM P ...

  5. S5PV210之GPIO模拟I2c时序之pcf8591与at24xx linux3.0.8驱动

    目录:一. 说明 二. 驱动程序说明及问题 三. 案例一       四. 案例二 一. 说明 mini210开发板上带了at24c08, 看了linux内核自带的at24.c的驱动程序,编译下载到看 ...

  6. STM32F10x_模拟I2C读写EEPROM

    Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...

  7. JAVA - ATM机程序

    ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ // ...

  8. STM32F207 两路ADC连续转换及GPIO模拟I2C给MT9V024初始化参数

    1.为了更好的方便调试,串口必须要有的,主要打印一些信息,当前时钟.转换后的电压值和I2C读出的数据. 2.通过GPIO 模拟I2C对镁光的MT9V024进行参数初始化.之前用我以前公司SP0A19芯 ...

  9. 关于模拟I2C的一些问题???

    1.在调试BH1750时发现stm32f103rb单片机用模拟I2C通讯时引脚使用开漏模式能正常读出来数据,使用推挽模式则完全无法通讯,发送地址后从机没有应答? https://blog.csdn.n ...

随机推荐

  1. MySQL 5.6初始配置调整

    原文链接: What to tune in MySQL 5.6 after installation原文日期: 2013年09月17日翻译日期: 2014年06月01日翻译人员: 铁锚 随着 大量默认 ...

  2. SQL Server未找到或无法訪问server问题解决

    问题信息:"在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法訪问服务器.请验证实例名称是否正确而且 SQL Server 已配置为同意远程连接. (pr ...

  3. phpstorm 快捷方式 (备用)

    常用快捷键  设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“eclipse” -> 然后“Copy”一份 ...

  4. 关于jquery的 $("form").serialize()和 new FormData表单序列化

    $("form").serialize()和 new FormData($('#uploadForm')[0])都是序列化表单,实现表单的异步提交,但是二者有区别 首先,前者,只能 ...

  5. 某PHP代码加密

    <?php /* 本程序已加密: 2014-11-15 10:10:11 */ xs_run('JGxosS9QplmqLA6qjYo/LiX5ecUe0DH7p42Ww/Mdkf5/ybZDs ...

  6. NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化

    转载▼     在iOS  5 中,苹果引入了一个解析JSON串的NSJSONSerialization类. 通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化. ...

  7. ZOJ 刷题记录 小黑屋 (`・д・´)

    P1006:模拟 然而我的同余方程能过样例然而就是WA⊙﹏⊙b [已查明:扩展欧几里得算法出了很隐蔽的问题] int exGcd(int x,int y,int& a,int& b) ...

  8. 『重构--改善既有代码的设计』读书笔记----Replace Data Value with Object

    当你在一个类中使用字段的时候,发现这个字段必须要和其他数据或者行为一起使用才有意义.你就应该考虑把这个数据项改成对象.在开发初期,我们对于新类中的字段往往会采取简单的基本类型形式来保存,但随着我们开发 ...

  9. smarty 的学习----ubuntu下初步配置

    转自:http://blog.csdn.net/ma332567575/article/details/7904124 首先去www.smarty.net下载最新版的Smarty 把下载后的压缩包在网 ...

  10. 《用chsh选择shell》-linux命令五分钟系列之十二

    chsh命令用于修改你的登录shell. 1 我想知道我机器安装了哪些shell? 两种方法可以查看: 第一种: [rocrocket@wupengchong ~]$ chsh -l /bin/sh ...