I2C每一位信号的时序流程,而I2C通信在字节级的传输中,也有固定的时序要求。I2C通信的起始信号(Start)后,首先要发送一个从机的地址,这个地址一共有 7位,紧跟着的第 8 位是数据方向位(R/W),“0”表示接下来要发送数据(写),‘“1”表示接下来是请求数据(读)。
我们知道,打电话的时候,当拨通电话,接听方捡起电话肯定要回一个“喂”,这就是告诉拨电话的人,这边有人了。同理,这个第九位 ACK 实际上起到的就是这样一个作用。当我们发送完了这 7 位地址和 1 位方向后,如果发送的这个地址确实存在,那么这个地址的器件应该回应一个 ACK(拉低 SDA 即输出“0”),如果不存在,就没“人”回应 ACK(SDA将保持高电平即“1”)。
那我们写一个简单的程序,访问一下我们板子上的 EEPROM 的地址,另外再写一个不存在的地址,看看它们是否能回一个 ACK,来了解和确认一下这个问题。
我们板子上的 EEPROM 器件型号是 24C02,在 24C02 的数据手册 3.6 节中可查到,24C02的 7 位地址中,其中高 4 位是固定的 0b1010,而低 3 位的地址取决于具体电路的设计,由芯片上的 A2、A1、A0 这 3 个引脚的实际电平决定,来看一下我们的 24C02 的电路图,它和24C01 的原理图完全一样,如图 14-4 所示。
图 14-4 24C02 原理图
从图 14-4 可以看出来,我们的 A2、A1、A0 都是接的 GND,也就是说都是 0,因此 24C02的 7 位地址实际上是二进制的 0b1010000,也就是 0x50。我们用 I2C 的协议来寻址 0x50,另外再寻址一个不存在的地址 0x62,寻址完毕后,把返回的 ACK 显示到我们的 1602 液晶上,大家对比一下。
/***************************Lcd1602.c 文件程序源代码*****************************/
#include
#define LCD1602_DB P0
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^5;
/* 等待液晶准备好 */
void LcdWaitReady(){
unsigned char sta;
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do {
LCD1602_E = 1;
sta = LCD1602_DB; //读取状态字
LCD1602_E = 0;
} while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止
}
/* 向 LCD1602 液晶写入一字节命令,cmd-待写入命令值 */
void LcdWriteCmd(unsigned char cmd){
LcdWaitReady();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 向 LCD1602 液晶写入一字节数据,dat-待写入数据值 */
void LcdWriteDat(unsigned char dat){
LcdWaitReady();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 设置显示 RAM 起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */
void LcdSetCursor(unsigned char x, unsigned char y){
unsigned char addr;
if (y == 0){ //由输入的屏幕坐标计算显示 RAM 的地址
addr = 0x00 + x; //第一行字符地址从 0x00 起始
}else{
addr = 0x40 + x; //第二行字符地址从 0x40 起始
}
LcdWriteCmd(addr | 0x80); //设置 RAM 地址
}
/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){
LcdSetCursor(x, y);//设置起始地址
while (*str != ‘’){ //连续写入字符串数据,直到检测到结束符
LcdWriteDat(*str++);
}
}
/* 初始化 1602 液晶 */
void InitLcd1602(){
LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口
LcdWriteCmd(0x0C); //显示器开,光标关闭
LcdWriteCmd(0x06); //文字不动,地址自动+1
LcdWriteCmd(0x01); //清屏
}
/*****************************main.c 文件程序源代码******************************/
#include
#include
#define I2CDelay() {_nop_();_nop_();_nop_();_nop_();}
sbit I2C_SCL = P3^7;
sbit I2C_SDA = P3^6;容-源-电-子-网-为你提供技术支持
本文地址:http://www.dziuu.com/dz/22/15755085833520.shtml
本文标签:
猜你感兴趣:
运用单片机便是了解单片机硬件结构,以及内部资源的运用,在汇编或C语言中学会各种功用的初始化设置,以及完成各种功用的程序编制。 运用按钮输入信号,发光二极管显现输出
关键词:51单片机PIC单片机单片机 所属栏目:设计编程
现场总线技术已经广泛应用于工业控制中,尤其是CAN(Controler Area Nerwork)总线由于具有可靠性高、成本低、容易实现等优点,在现场总线实际工程应用中占有了较大份额。
关键词:单片机 所属栏目:设计编程
我的答案是:不可以原因如下:一、软件仿真多用于教学,把更多精力用在软件的实现上由于学生学习时间宝贵,焊接一套单片机实验板又比较花时间,并且实验项目太多,所以为了
关键词:PIC单片机51单片机单片机 所属栏目:设计编程
对于新手来说,首先根据自己学的什么样单片机就选什么类型的单片机,熟悉什么类型的单片机就选什么类型的单片机。因为单片机不仅要设计电路,还要设计控制软件。选自己熟悉的单片机上手最快,也最容易获得成功。下面介绍如何选择最适合的单片机。
关键词: 所属栏目:设计编程
单片机晶振的作用是什么
在初学单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就是如同人的心脏,是血液的脉搏,把单片机的晶振问题搞明白了,51单片机的其他问题
关键词:51单片机PIC单片机单片机 所属栏目:设计编程
Keil单片机编程软件Keil C51是单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇
关键词:51单片机PIC单片机 所属栏目:设计编程
详解51单片机运行过程 注:1.ROM:只读存储器,单片机的只读存储区大多用于存储程序固又称程序存储器。51单片机是EPROM,所谓的EPROM是可擦除的只
关键词: 所属栏目:设计编程
pic单片机和c51有什么区别(区别1)总线结构:MCS-51单片机的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC单片机的总线结构是哈佛结构
关键词:单片机PIC单片机51单片机 所属栏目:设计编程
实例分析51单片机出现故障及解决办法。详细如下:
故障现象:做了一个单片机温度监测系统,仿真机上一切正常,烧写芯片无法工作。相关电路框图: 用51做处理器,外围电路如
关键词:单片机51单片机 所属栏目:设计编程
PIC单片机汇编语言指令详解
pic单片机为最常用单片机之一,许多程序均基于pic单片机进行开发。因此,熟练pic单片机编程尤为重要。为保证大家能准确、熟练掌握pic单片机的使
关键词:PIC单片机单片机 所属栏目:设计编程
三种51单片机程序下载方法介绍
一般只能通过三种方式下载程序到单片机中:1.JTAG 2.ISP 3.IAP1.JTAG要使用JTAG方式下载程序,不管是使用J-LINK、ULINK、ST-LINK,只需要把
关键词:PIC单片机51单片机单片机 所属栏目:设计编程
越来越多的测量仪器提供GPIB(General Purpose Intefface Bus)总线接口,通过该总线可以方便快捷地连接带有GPIB接口的仪器及计算机,组成一个GPlB网络。GPIB设备与计算机连
关键词:PIC单片机51单片机单片机 所属栏目:设计编程
每个单片机系统里都有晶振,全程是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立
关键词:51单片机PIC单片机单片机 所属栏目:设计编程
引言变频调速作为交流电机调速的主要手段已经在工业领域中应用的十分广泛,其具有的调速范围宽、稳速精度高、动态响应快、适用范围广、运行可靠等技术性能,已逐步取代直流
关键词:单片机变频器 所属栏目:设计编程
电子密码锁按照输入密码方式的不同可分为好多种,其中最常用的一种是用数字键盘输入密码的电子密码锁。这一讲主要介绍用ATmega8和LCD1602液晶显示器等组成的电子密码锁,这
关键词:单片机 所属栏目:设计编程
1.实验任务如图所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。2.电路原理图3.系统
关键词:单片机LEDLED电路图 所属栏目:设计编程
近日,有媒体报道称,北京微电子技术研究所日前成功研制出国内首个自主可控的宇航用千万门级高性能高可靠FPGA(现场可编程门阵列)芯片。FPGA一直是国内的短板,市场基本被
关键词:单片机 所属栏目:设计编程
怎么学单片机?也常看到有人说学了好几个月可就是没有什么进展。当然,受限于每个人受到的教育水平不同和个人理解能力的差异,学习起来会有快慢之分,但我感觉最重的就是学
关键词:单片机 所属栏目:设计编程
在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。 <特殊功能寄存器地址映象表(一)> <特殊功能寄存器地址映象表(二)> <
关键词:单片机寄存器 所属栏目:设计编程
倒立摆作为一种典型的控制系统实验装置,具有非线性、自然不稳定等特性,常用来作为检验某种控制理论或方法是否合理的典型方案。一阶倒立摆系统能用多种理论和方法来实现其
关键词:单片机 所属栏目:设计编程