模拟I2C从机程序
- ;Slave.asm
- SCL BIT P1.
- SDA BIT P1.
- ;----------------------------
- ORG
- RESET:
- SETB SCL
- SETB SDA
- CALL I2C_WAITSTART ;等待起始信号
- CALL I2C_RXBYTE ;接收地址数据
- CLR C
- CALL I2C_TXACK ;回应ACK
- SETB C ;读/写 IDATA[80H - FFH]
- RRC A ;读/写位->C
- MOV R0,A ;地址送入R0
- JC READDATA ;C=1(读) C=0(写)
- WRITEDATA:
- CALL I2C_RXBYTE ;接收数据
- MOV @R0,A ;写入IDATA
- INC R0 ;地址+1
- CLR C
- CALL I2C_TXACK ;回应ACK
- CALL I2C_WAITSTOP ;等待停止信号
- JMP RESET
- READDATA:
- MOV A,@R0
- INC R0
- CALL I2C_TXBYTE ;发送IDATA数据
- CALL I2C_RXACK ;接收ACK
- CALL I2C_WAITSTOP ;等待停止信号
- JMP RESET
- ;----------------------------
- ;等待起始信号
- ;----------------------------
- I2C_WAITSTART:
- JNB SCL,$ ;等待时钟->高
- JB SDA,$ ;等待数据线下降沿
- JB SCL,$ ;等待时钟->低
- RET
- ;----------------------------
- ;等待结束信号
- ;----------------------------
- I2C_WAITSTOP:
- JNB SCL,$ ;等待时钟->高
- JNB SDA,$ ;等待数据线上升沿
- RET
- ;----------------------------
- ;发送ACK/NAK信号
- ;----------------------------
- I2C_TXACK:
- MOV SDA,C ;送ACK数据
- JNB SCL,$ ;等待时钟->高
- JB SCL,$ ;等待时钟->低
- SETB SDA ;发送完成
- RET
- ;----------------------------
- ;接收ACK/NAK信号
- ;----------------------------
- I2C_RXACK:
- SETB SDA ;准备读数据
- JNB SCL,$ ;等待时钟->高
- MOV C,SDA ;读取ACK信号
- JB SCL,$ ;等待时钟->低
- RET
- ;----------------------------
- ;接收一字节数据
- ;----------------------------
- I2C_RXBYTE:
- ;8位计数
- RXNEXT:
- JNB SCL,$ ;等待时钟->高
- MOV C,SDA ;读取数据口
- RLC A ;保存数据
- JB SCL,$ ;等待时钟->低
- DJNZ R7,RXNEXT ;收下一位
- RET
- ;----------------------------
- ;发送一字节数据
- ;----------------------------
- I2C_TXBYTE:
- ;8位计数
- TXNEXT:
- RLC A ;移出数据位
- MOV SDA,C ;数据送数据口
- JNB SCL,$ ;等待时钟->高
- JB SCL,$ ;等待时钟->低
- DJNZ R7,TXNEXT ;送下一位
- RET
- ;----------------------------
- ;END
模拟I2C从机程序的更多相关文章
- 模拟I2C从机
模拟I2C主机的比较多,但是从机相对主机而言要难很多,这个供大家借鉴. 这个从机程序支持主机对它的随机写和随机读,连续读和连续写没做,有兴趣的可以完善下,呵呵. //Microcontrol CODE ...
- STM32F4XX中断方式通过IO模拟I2C总线Master模式
STM32的I2C硬核为了规避NXP的知识产权,使得I2C用起来经常出问题,因此ST公司推出了CPAL库,CPAL库在中断方式工作下仅支持无子地址 的器件,无法做到中断方式完成读写大部分I2C器件.同 ...
- MSP430的IO口模拟I2C总线对AT24C25进行读写程序
功能: 实现MSP430口线模拟I2C总线协议与24C04通信. ** 描述: 主系统工作时钟为12MHz,I2C工 ...
- STM8S 模拟I2C程序
STM8S的硬件I2C还是存在问题,不敢贸然使用. 于是决定用模拟I2C. #define SCL PE_ODR_ODR1 #define SDA PE_ODR_ODR2 #define SDAM P ...
- S5PV210之GPIO模拟I2c时序之pcf8591与at24xx linux3.0.8驱动
目录:一. 说明 二. 驱动程序说明及问题 三. 案例一 四. 案例二 一. 说明 mini210开发板上带了at24c08, 看了linux内核自带的at24.c的驱动程序,编译下载到看 ...
- STM32F10x_模拟I2C读写EEPROM
Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...
- JAVA - ATM机程序
ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ // ...
- STM32F207 两路ADC连续转换及GPIO模拟I2C给MT9V024初始化参数
1.为了更好的方便调试,串口必须要有的,主要打印一些信息,当前时钟.转换后的电压值和I2C读出的数据. 2.通过GPIO 模拟I2C对镁光的MT9V024进行参数初始化.之前用我以前公司SP0A19芯 ...
- 关于模拟I2C的一些问题???
1.在调试BH1750时发现stm32f103rb单片机用模拟I2C通讯时引脚使用开漏模式能正常读出来数据,使用推挽模式则完全无法通讯,发送地址后从机没有应答? https://blog.csdn.n ...
随机推荐
- MySQL 5.6初始配置调整
原文链接: What to tune in MySQL 5.6 after installation原文日期: 2013年09月17日翻译日期: 2014年06月01日翻译人员: 铁锚 随着 大量默认 ...
- SQL Server未找到或无法訪问server问题解决
问题信息:"在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法訪问服务器.请验证实例名称是否正确而且 SQL Server 已配置为同意远程连接. (pr ...
- phpstorm 快捷方式 (备用)
常用快捷键 设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“eclipse” -> 然后“Copy”一份 ...
- 关于jquery的 $("form").serialize()和 new FormData表单序列化
$("form").serialize()和 new FormData($('#uploadForm')[0])都是序列化表单,实现表单的异步提交,但是二者有区别 首先,前者,只能 ...
- 某PHP代码加密
<?php /* 本程序已加密: 2014-11-15 10:10:11 */ xs_run('JGxosS9QplmqLA6qjYo/LiX5ecUe0DH7p42Ww/Mdkf5/ybZDs ...
- NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
转载▼ 在iOS 5 中,苹果引入了一个解析JSON串的NSJSONSerialization类. 通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化. ...
- ZOJ 刷题记录 小黑屋 (`・д・´)
P1006:模拟 然而我的同余方程能过样例然而就是WA⊙﹏⊙b [已查明:扩展欧几里得算法出了很隐蔽的问题] int exGcd(int x,int y,int& a,int& b) ...
- 『重构--改善既有代码的设计』读书笔记----Replace Data Value with Object
当你在一个类中使用字段的时候,发现这个字段必须要和其他数据或者行为一起使用才有意义.你就应该考虑把这个数据项改成对象.在开发初期,我们对于新类中的字段往往会采取简单的基本类型形式来保存,但随着我们开发 ...
- smarty 的学习----ubuntu下初步配置
转自:http://blog.csdn.net/ma332567575/article/details/7904124 首先去www.smarty.net下载最新版的Smarty 把下载后的压缩包在网 ...
- 《用chsh选择shell》-linux命令五分钟系列之十二
chsh命令用于修改你的登录shell. 1 我想知道我机器安装了哪些shell? 两种方法可以查看: 第一种: [rocrocket@wupengchong ~]$ chsh -l /bin/sh ...