模拟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 ...
随机推荐
- OC中类别、扩展、协议与托付
类别(category)--通过使用类别,我们能够动态地为现有的类加入新方法.并且能够将类定义模块化地分不到多个相关文件里.通常仅仅在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有&qu ...
- struts2 json 定义全局Date格式
使用struts2的json插件时,自己定义日期格式经常使用的方式是在get属性上加入@JSON注解,这个对于少量Date属性还能够,可是假设date字段多了,总不可能去给每一个date get方法加 ...
- android 06 LinearLayout
xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:la ...
- FastDFS安装配置手册
文件服务器分布式系统安装手册 本文档详细的介绍了FastDFS的最小集群安装过程.集群环境如下: tracker:20.2.64.133 .用于调度工作,在访问上起负载均衡的作用. group1: s ...
- Java基础知识强化之集合框架笔记17:List集合的特有的遍历功能
1. List集合的特有遍历功能: size()和 get()方法结合使用 2. 代码示例: package cn.itcast_03; import java.util.ArrayList; imp ...
- poj 3565 ants
/* poj 3565 递归分治 还有用KM的做法 这里写的分治 按紫书上的方法 不过那里说的有点冗杂了 可以简化一下 首先为啥可以分治 也就是分成子问题解决 只要有一个集合 黑白的个数相等 就一定能 ...
- 解决Chrome谷歌浏览器不支持CSS设置小于12px的文字
在最新版的谷歌里.已经不在支持这个属性啦 谷歌浏览器Chrome是Webkit的内核,有一个 -webkit-text-size-adjust 的私有 CSS 属性,通过它即 可实现字体大小不随终端设 ...
- asp.net中ashx文件如何调用session
如果你要保证数据的安全性,你可以在ashx中使用session验证.如:你的index.aspx中使用jquery回调ashx数据,那么在index.aspx page_load时session[&q ...
- 受限玻尔兹曼机(RBM)
能量模型 RBM用到了能量模型. 简单的概括一下能量模型.假设一个孤立系统(总能量$E$一定,粒子个数$N$一定),温度恒定为1,每个粒子有$m$个可能的状态,每个状态对应一个能量$e_i$.那么,在 ...
- Unity Manual 用户手册
unity3d 文档的中文网址: http://game.ceeger.com/Manual/