模拟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 ...
随机推荐
- 浙江大学PAT上机题解析之1014. 福尔摩斯的约会 (20)
1014. 福尔摩斯的约会 (20) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Y ...
- [RxJS] Error handling operator: catch
Most of the common RxJS operators are about transformation, combination or filtering, but this lesso ...
- storyBoard使用介绍
storyBoard使用介绍 转载地址:http://www.2cto.com/kf/201210/161737.html 一 .简述 Storyboard是你可以用来定义用户界面的一种新的方式,像x ...
- eclipse-SDK-3.7-win32;eclipse-java-indigo-win32;eclipse-jee-indigo-win32 区别(ZZ)
eclipse-SDK-3.7-win32:eclipse-java-indigo-win32:eclipse-jee-indigo-win32 三个都是用于win32,即windows系统的32位机 ...
- 发现并认为这是jQuery1.4.4的一个Bug
说起来还觉得丢人,公司的系统开发了两年,目前jquery的版本还是用的1.4.4. mantis上的Bug一堆,今天在改bug的时候发现一个jQuery的Bug. 改bug嘛,一开始总是各种调试,总感 ...
- ES6数组去重
今天五一,在出去玩之前赶紧写篇博客,时刻不要忘记学习^_^!! 提到数组去重,想必大家都不陌生,会的同学可能噼里啪啦写出好几个,下面来看看之前常见的去重代码: 'use strict'; var ar ...
- HTML5媒体播放说明
HTML5中video标签播放m3u8整理 http://www.xue163.com/588880/39097/390970871.html 移动端HTML5<video>视频播放优化实 ...
- angularjs sortbale
参考地址:http://kamilkp.github.io/angular-sortable-view 案例:jsp: <div sv-root sv-part="vm.dataLis ...
- [转帖]vivado & VS2013工具
来源:http://bbs.csdn.net/topics/380057699 添加OpenCV库后,MFC在Debug模式下调试,提示应用程序无法正常启动(0xc000007b). 解决方法:在环境 ...
- eclipse build很慢的时候,有可能是js文件编译验证慢的问题
第一步: 去除eclipse的JS验证: 将windows->preference->Java Script->Validator->Errors/Warnings-> ...