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 ...
随机推荐
- iOS之开发程序之间的跳转及跳转到appStore
实例一:A程序跳转到B程序 第一步: 在B程序plist文件中,注册对外接口如图在B程序中找到info.plist点击,找到Information Property List ,右击 添加列表项 找到 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.17
假设w=4,我们能给每个可能的十六进制数字赋予一个数值,假设用一个无符号或者补码表示.完成下表: x 无符号(B2U(x)) 补码(B2T(x)) 十六进制 二进制 0xE 1110 14 -2 0x ...
- 【转】web测试方法总结
一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号.禁止直接输入特殊字符时 ...
- orcale授权
grant connect,resource,dba to 表名;--用户授权 CONNECT角色: --是授予最终用户的典型权利,最基本的 CREATE SESSION --建立会话 RESOURC ...
- 关于TouchEvent中出现异常:MessageQueue-JNI问题
Tag:MessageQueue-JNI Exception dispatching input event. Exception in MessageQueue callback: handleRe ...
- WCF与Web API 区别(应用场景)
Web api 主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作 请求的回 ...
- java多线程之停止线程
/*1.让各个对象或类相互灵活交流2.两个线程都冻结了,就不能唤醒了,因为根据代码要一个线程活着才能执行唤醒操作,就像玩木游戏3.中断状态就是冻结状态4.当主线程退出的时候,里面的两个线程都处于冻结状 ...
- 【Java咬文嚼字】关键字(一):super和this
这段时间一直在学Java,看了辣么多书以及博客,心痒也是着写写自己的学习心得. 这也算是新手篇:咬文嚼字Java中的关键字. 以关键字为第一篇博文也是考虑再三:1.本人基础也是薄弱 2.集跬步至千里 ...
- 2016ACM竞赛训练暑期课期末考试 a题
描述 给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合. 输入 第一行是一个正整数n(n<=600).第二行是n个不同的整数,相邻两个整数之间用单个空格隔开. ...
- ueditor使用代码高亮的方法
最近发现ueditor支持代码高亮,但是页面上并没有起效果,于是网上找了下,发现还需做如下修改: 1.页面引用以下资源文件(均位于ueditor目录中): <script type=" ...