I2C总线模拟(郭天祥视屏)
电路图

思路
1.向EEPROM中通过I2C总线写入一个字节
2.通过I2C总线读出写入的字节
3.如果写入和读出成功点亮发光二极管
程序
#include <REGX51.H> #define uchar unsigned char
#define uint unsigned int void init();
void start();
void stop();
void write(uchar byte);
void write_add(uchar byte,uchar address);//向指定地址中写入字节
void delay1(uchar x);
uchar read_add(uchar address);
uchar read();//从指定地址中读出字节 void delay()
{;;} sbit led = P0^;
sbit sck = P2^;
sbit sad = P2^; void main()
{
uchar test = ;
init();
write_add(0x01,0xaf);
delay1(); test =read_add(0xaf);
if(test == 0x01)
led = ;
while();
} void init()
{
sck = ;
delay();
sad = ;//数据线和信号线都空闲
delay();
led = ;
}
//起始信号
void start()
{
sad = ;
delay();
sck = ;
delay();
sad = ;
delay();
}
//停止信号
void stop()
{
sad = ;
delay();
sck = ;
delay();
sad = ;
delay();
}
//等待回应
void response()
{
uchar i = ;
sck = ;
delay();
while((sad == ) && (i < ))
i++;
sck = ;
delay();
}
//向指定地址写入一个字节
void write(uchar byte)
{
uchar i = ;
uchar temp = byte; for(; i < ; i++)
{
temp = temp << ;//temp左移一位
sck = ;
delay();
sad = CY;
delay();
sck = ;
delay();
}
sck = ;
delay();//这样就不会产生开始信号或结束信号
sad = ;
delay();
}
//从指定地址读取一个字符
uchar read()
{
uchar i,k;
sck = ;
delay();
sad = ;
delay();
for(; i < ; i++)
{
sck = ;
delay();
k = (k << ) | sad;
sck = ;
delay();
}
return k;
}
//写入一个字节
void write_add(uchar byte,uchar address)
{
start();
write(0xa0);
response();
write(address);
response();
write(byte);
response();
stop();
}
//读出写入的字节
uchar read_add(uchar address)
{
uchar result;
start();
write(0xa0);
response();
write(address);
response();
start();
write(0xa1);
response();
result = read();
stop();
return result;
}
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>;a--)
for(b=;b>;b--);
}
运行结果

I2C总线模拟(郭天祥视屏)的更多相关文章
- 51单片机I2C总线
I2C总线是飞利浦公司推出的一种串行总线,所有器件共用两根信号线,实现数据的传输. 总线接口接了上拉电阻,默认为高电平,所以就可以用"当低电平出现"来标记出一种起始信号.我个人把它 ...
- C51单片机模拟I2C总线驱动程序设计
/********************************** I2C总线驱动 ******************************** 模块名:I2C总线驱动 型号:I2C 功能描述 ...
- I2C总线协议的软件模拟实现方法
I2C总线协议的软件模拟实现方法 在上一篇博客中已经讲过I2C总线通信协议,本文讲述I2C总线协议的软件模拟实现方法. 1. 简述 所谓的I2C总线协议的软件模拟实现方法,就是用软件控制GPIO的输入 ...
- I2C总线以及GPIO模拟I2C
·I2C总线的一些特征: 1. 只要求两条总线,一条串行数据线(SDA),一条串行时钟线(SCL) 2. 两个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机系统软件设定的地址:主机可 ...
- STM32F4XX中断方式通过IO模拟I2C总线Master模式
STM32的I2C硬核为了规避NXP的知识产权,使得I2C用起来经常出问题,因此ST公司推出了CPAL库,CPAL库在中断方式工作下仅支持无子地址 的器件,无法做到中断方式完成读写大部分I2C器件.同 ...
- 51单片机 | 基于I2C总线的秒表模拟应用
———————————————————————————————————————————— 参考地址: http://blog.csdn.net/junyeer/article/details/4648 ...
- I2C总线完全版——I2C总线的结构、工作时序与模拟编程
I2C总线的结构.工作时序与模拟编程 I2C总线的结构.工作时序与模拟编程I2C总线(Inter Integrated Circuit)是飞利浦公司于上个世纪80年代开发的一种"电路板级&q ...
- Linux设备驱动模型之I2C总线
一.I2C子系统总体架构 1.三大组成部分 (1)I2C核心(i2c-core):I2C核心提供了I2C总线驱动(适配器)和设备驱动的注册.注销方法,提供了与具体硬件无关的I2C读写函数. (2)I2 ...
- i2c总线驱动,总线设备(适配器),从设备,从设备驱动的注册以及匹配
常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 随笔分类 ARM裸机(13) C(8) C++(8) GNU-ARM汇编 Linux驱动(24) Linux应用编程(5) Makefile ...
随机推荐
- Tomcat启动报错 Failed to start component [StandardServer[8005]]解决
SEVERE: The required Server component failed to start so Tomcat is unable to start. org.apache.catal ...
- Python 基础【第六篇】字典
1.字典定义: 字典和列表类似 只是字典标示符用的是字符而列表用的是0开始的数字,字典中每个元素对应一个值 这个元素叫做键(key)键值不能重复 value(值)可以重复 2.字典格式: 格式一: [ ...
- 面试学到的css布局,细节影响了我的面试成绩
这几天的面试很纠结,也让我注意到我的前端知识确实不行,从两个小细节总结: 1:body体的居中样式. 这个在IE和非IE Firefox Chrome Opera下面的差别 IE下text-align ...
- javascript中substring和substr方法
1.substring 方法 定义:用于提取字符串中介于两个指定下标之间的字符 语法:stringObject.substring(start,stop) 参数描述: start 必需.一个非负的整数 ...
- 序列化和反序列化(C#)
有时候我们希望把类的实例保存下来,以便以后的时候用.一个直观的方法就是StreamWriter把类写成一行,用\t分隔开每个属性,然后用StreamReader读出来. 但是这样太麻烦,代码行数较多, ...
- Android屏幕适配-资源文件夹命名与匹配规则
说明:本文档目的为分析android工程res目录下的资源文件夹(drawable,values,layout等)在屏幕适配方面的限定与适配方法. 1. Res下文件夹命名方式 1. 可用的命名属性 ...
- SQL Server 可疑的解决办法
SQL SERVER 数据库状态为“可疑”的解决方法 --MyDB为修复的数据名 USE MASTER GO SP_CONFIGURE RECONFIGURE WITH OVERRIDE GO ALT ...
- How to enable $Admin Shares in Windows 7
Quote from: http://www.wintips.org/how-to-enable-admin-shares-windows-7/ As “Administrative shares” ...
- HTML5之地理信息应用 获取自己的位置
上代码: window.onload = function() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosit ...
- <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记
Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来 ...