第8章--单总线I2C总线与1602液晶课件

上传人:txadgkn****dgknqu... 文档编号:242020667 上传时间:2024-08-10 格式:PPT 页数:49 大小:240.61KB
返回 下载 相关 举报
第8章--单总线I2C总线与1602液晶课件_第1页
第1页 / 共49页
第8章--单总线I2C总线与1602液晶课件_第2页
第2页 / 共49页
第8章--单总线I2C总线与1602液晶课件_第3页
第3页 / 共49页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,作者:夏路易,电子工业出版社所有,*,单片机技术基础教程与实践,第8章 单总线、I,2,C总线与1602液晶,8.1 单总线,8.1.1 单总线介绍,单总线(1-Wire)是Maxim全资子公司Dallas的一项专有技术,与目前多数标准串行数据通信方式,如SPI,I,2,C等不同,它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的,它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。,单总线采用简单的信令协议,通过一条公共数据线实现主机/主控制器与一个或多个从机之间的半双工、双向通信,如图所示。,作者:夏路易,电子工业出版社所有,第8章 单总线、I2C总线与1602液晶作者:夏路易电子工业,1,在单总线主机/从机配置中,所有设备共享一条公共数据线,从机芯片借助这条单总线实现数据传输与供电。,典型的单总线主机包括一个漏极开路I/O口,通过电阻上拉到3V至5V电源。也可以选用更完善的主控制器,这种控制器具有专用的线驱动器。,单总线系统的另一个重要特性是:每个从机有一个唯一的、不能更改(ROM)的64位光刻序列号(ID)。除了为终端产品提供唯一的电子ID外,64位ID还允许主机从挂接在同一条总线上的许多从机芯片中选择一个,由此实现主、从机通信。,单总线通信由主机启动、控制所有的数据传输。,单总线通信波形与脉宽调制类似,数据位传输按照宽脉冲(逻辑1)或窄脉冲(逻辑0)发送数据。总线主机(MS)首先发出“复位”脉冲启动通信过程,并通过该脉冲同步整个总线系统。,大多数单总线器件都支持两种数据速率:15kbps的标准速率和111kbps的高速速率。通信协议为自同步,并可接收数据位之间的较长延迟。,作者:夏路易,电子工业出版社所有,在单总线主机/从机配置中,所有设备共享一条公共数据,2,在没有专用总线主机的情况下,单片机可以产生单总线时序信号。对单片机系统要求如下:,(1)单片机的通信端口必须是双向的,其输出为漏极开路,且具有弱上拉。这也是所有单总线的基本要求。,(2)单片机必须能产生标准速度单总线通信所需的精确1s延时和高速通信所需要的0.25s延时。,(3)通信过程不能被中断。,作者:夏路易,电子工业出版社所有,在没有专用总线主机的情况下,单片机可以产生单总,3,8.1.2 DS18B20工作原理,1.DS18B20的特点,单线数字温度传感器DS18B20器件的特点如下:,1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条信号线即可实现单片机与DS18B20的双向通讯。,2)在使用中不需要任何外围元件。,3)可用数据线供电,电压范围:3.0 5.5 V。,4)测温范围:-55 125。测温分辨率为0.5。,5)通过编程可实现912位的数字读数方式,6)用户可自设定非易失性的报警上下限值。,7)支持多点组网功能,多个DS18B20可以并联在三条线上,实现多点测温。8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。,作者:夏路易,电子工业出版社所有,8.1.2 DS18B20工作原理作者:夏路易电子工业出版社,4,作者:夏路易,电子工业出版社所有,作者:夏路易电子工业出版社所有,5,DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图8-3所示,其中DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。,(1)64 b闪速ROM的结构如下:,8b检验CRC,48b序列号,8b工厂代码(10H),MSB LSB,MSB LSB,MSB LSB,在ROM中,开始是8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码。可用ROM操作命令读出其内容。(2)内部存储器,DS18B20温度传感器的内部存储器格式如下:,温度低位,温度高位,TH,TL,配置,保留,保留,保留,8位CRC,LSB MSB,第1,2字节保存温度数值,第1字节为低位,第2字节为高位。,第3,4字节锁存器TH和TL保存非易市失性温度报警数据,可通过软件写入用户报警上下限。,作者:夏路易,电子工业出版社所有,DS18B20内部结构主要由四部分组成:64位光刻ROM、温,6,第5字节是配置寄存器,其内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下:,TM,R1,R0,1,1,1,1,1,该寄存器低5位都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即是来设置分辨率,如下表所示(DS18B20出厂时被设置为12位)。,由表可知,设定的分辨率越高,所需要的温度数据转换时间就越长。,第68字节未用,表现为全逻辑1;,第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。CRC的产生在64 b ROM的最高有效字节中存储有循环冗余校验码(CRC)。处理器根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。,R1,R0,分辨率,最大温度转换时间(ms),0,0,9,93.75,0,1,10,187.50,1,0,11,275.00,1,1,12,750.00,作者:夏路易,电子工业出版社所有,第5字节是配置寄存器,其内容用于确定温度值的数字转换分辨率,,7,3.温度值格式,当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在内部存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625/LSB形式表示。温度值格式如下:,可以知道,当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码(在取补),再计算十进制值。如下是一部分温度值对应表。,位,7,6,5,4,3,2,1,0,低字节,2,3,2,2,2,1,2,0,2,-1,2,-2,2,-3,2,-4,高字节,S,S,S,S,S,2,6,2,5,2,4,温度(),二进制,十六进制,+125,0000 0111,1101 0000,07D0H,+25.0625,0000 0001,1001 0001,0191H,+0.5,0000 0000,0000 1000,0008H,0,0000 0000,0000 0000,0000H,0.5,1111 1111,1111 1000,FFF8H,25.0625,1111 1110,0110 1111,FE6FH,55,1111 1100,1001 0000,FC90H,作者:夏路易,电子工业出版社所有,3.温度值格式 可以知道,当符号位S=0时,,8,4.DS18B20与单片机的典型接口设计,DS18B20与51单片机的接线如图所示。,上图是具有独立电源线的DS18B20接线图,由于数据线空闲时为高电平,因此需要加一个上拉电阻4.7 k,另外2个脚分别接电源和地。,下图是寄生电源供电方式,为保证在有效的DS18B20时钟周期内提供足够的电流,51单片机的I/O口控制场效应管对单线总线上拉,当DS18B20处于写存储器操作和温度测量操作时,场效应管导通,使总线有强上拉,上拉开启时间最大为10 s。采用寄生电源供电方式时VDD和GND端均接地。,作者:夏路易,电子工业出版社所有,4.DS18B20与单片机的典型接口设计DS18B20与,9,8.1.3,软件设计,1.复位与读、写时序,由于DS18B20是在一根I/O线上读写数据,对读写有着严格的时序要求,因此有通信协议来保证各位数据传输的正确性和完整性。,(1)DS18B20的复位时序,复位要求主CPU将数据线下拉500s,然后释放,DS18B20收到信号后等待1660s左右,后发出60240s低脉冲,主CPU收到此信号表示复位成功。,作者:夏路易,电子工业出版社所有,8.1.3 软件设计复位要求主CPU将数据线下拉500s,10,(2)DS18B20的读时序 对于DS18B20的读时序分为读0时序和读1时序两个过程。读时序是从单片机把单总线拉低之后,在15s之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。,作者:夏路易,电子工业出版社所有,(2)DS18B20的读时序 对于DS18B20的读时序分,11,(3)DS18B20的写时序,对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。,对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线,要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。,作者:夏路易,电子工业出版社所有,(3)DS18B20的写时序 作者:夏路易电子工业出版社所有,12,2.操作命令介绍,(1)ROM命令,读ROM(33h),该命令允许从DS18B20芯片中读出8位编码、序列号和8位CRC码,总线上只有一个DS18B20的时候才可用。,匹配ROM命令(55h),该命令后跟64位ROM序列,可以在总线上找到一个唯一的DS18B20,只有这个匹配的芯片才能响应随后的命令,而所有不匹配的芯片都等待复位,总线上有1个或多个器件时,都可以使用这个命令。,跳过ROM命令(CCh),在总线上只有单芯片时,可以使用这条命令跳过ROM搜索,节省时间,如果有多个芯片,则会发生数据冲突。,搜索ROM命令(F0h),当不知道总线上有多少芯片和各芯片序列号时,这条命令采用排除法识别总线上的芯片的64位编码。,报警搜索命令(Ech),最近一次测温后,满足报警条件的芯片,将响应这条命令报警。,作者:夏路易,电子工业出版社所有,2.操作命令介绍作者:夏路易电子工业出版社所有,13,(2)DS18B20的操作命令,1)写暂存器命令(4Eh),写入开始地址为TH(字节2),随后是TL(字节3)和配置字节(字节4),所有写入操作必须在DS18B20芯片复位之前完成。,2)读暂存器命令(BEh),该命令从字节0开始,一直读完所有字节(字节8),如果只需要读取部分数据,则可以使用复位命令终止。,3)拷贝暂存器命令(48h),将暂存器内容拷贝到EEPROM中。,4)启动温度转换命令(44h),启动总线上的DS18B20进行温度转换。,5)读EEPROM命令(B8h),将EEPROM内的数据读回暂存器,6)读供电模式命令(B4h),若是寄生电源,芯片返回0,若是外部电源,返回1。,作者:夏路易,电子工业出版社所有,(2)DS18B20的操作命令作者:夏路易电子工业出版社所有,14,8.1.4 DS18B20测量温度的例题,例题8-1 两位数码管显示DS18B20测量的温度。,用独立电源向DS18B20芯片供电,DS18B20芯片的信号线与51单片机的P3_7引脚相连。,温度值的整数部分用两位数码管显示,小数部分用5个发光管显示,最高位数码管的小数点显示负号。单片机时钟频率11.0592MHz。,源程序如下:,#include,#include /本程序运行时钟为11.0592MHZ,unsigned char code dispcode=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;/整数部分译码表,unsigned char code dispnum=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 xff;/温度小数部分译码表,unsigned char timecount;/中断次数变量,unsigned char readdata2;/保存温度值的数组,unsigned char test,test1,test0;/保存温度值的中间变量,sbit DQ=P37;/DS18B20的信号端,bit sflag;/正负号标志,作者:夏路易,电子工业出版社所有,8.1.4 DS18B20测量温度的例题作者:夏路易电子工业,15,void delay(unsigned int i),/延时函数,while(i-);,reset(void),/复位DS18B20的函数,unsigned char x=0;,DQ=1;,delay(8);,DQ=0;,delay(80);,DQ=1;,delay(14);,x=DQ;,delay(20);,void writecommandtods18b20(unsigned char command),/写字节到DS18B20的函数,unsigned char i=0;,for(i=8;i0;i-),DQ=0;,DQ=command,delay(5);,DQ=1;,command=1;,作者:夏路易,电子工业出版社所有,void delay(unsigned int i),16,unsigned char readdatafromds18b20(void)/从DS18B20读取一个字节,unsigned char i=0;,unsigned char temp=0;,for(i=8;i0;i-),DQ=0;,temp=1;,DQ=1;,if(DQ),temp|=0 x80;,delay(4);,return(temp);,作者:夏路易,电子工业出版社所有,unsigned char readdatafromds18,17,void main(void)/主函数,TMOD=0 x01;/定时/计数器0工作在模式1,TH0=(65536-4000)/256;/设置初值,TL0=(65536-4000)%256;/设置初值,ET0=1;/允许定时器0中断,EA=1;/允许总中断,TR0=1;/启动定时器0,while(1),P1=dispcodetest/10;/P1口相连的数码管显示温度值高位,P0=dispcodetest%10;/P0口相连的数码管显示温度值低位,P2=dispnum(test0 /将温度值的小数部分送P2口连接的发光管显示,P1_7=sflag;/高位数码管的小数点显示负号,亮表示负制温度值,作者:夏路易,电子工业出版社所有,void main(void),18,void t0(void)interrupt 1 using 0 /定时/计数器0的中断服务函数,unsigned char result;,TH0=(65536-4000)/256;/重置定时/计数器0的初值,TL0=(65536-4000)%256;,timecount+;/中断次数每次增加1,if(timecount=150)/当150次中断后,执行如下语句,timecount=0;/清0中断次数,reset();/复位DS18B20,writecommandtods18b20(0 xcc);/发送跳过ROM搜索命令,writecommandtods18b20(0 xbe);/发送读命令,readdata0=readdatafromds18b20();/读温度值低8位,高4位为整数部分,低4位为小数,readdata1=readdatafromds18b20();/读温度值高8位,高5位为符号位,0表示正数,/1表示负数,低3位为温度值,sflag=0;/判断正负号,作者:夏路易,电子工业出版社所有,void t0(void)interrupt 1 usin,19,if(readdata1&0 xf8)!=0 x00)/如果高8位与0 xf8相与不等于0(按位“与”运算),sflag=1;/则是负温度值,是补码,readdata1=readdata1;/求高8位反码,readdata0=readdata0;/求低8位反码,result=readdata0+1;/低8位加1,形成补码送变量result,readdata0=result;/形成补码送回原变量,if(result255)/如果低8位大于255,readdata1+;/向高3位进位,test0=readdata0;/将温度值低8位送变量test0,test1=readdata1;/将温度值高8位送变量test1,test=(readdata1*256)+readdata0)/16;/求整数部分的实际温度值,reset();/复位DS18B20,writecommandtods18b20(0 xcc);/向DS18B20发送跳过ROM搜索命令,writecommandtods18b20(0 x44);/启动下一次转换,作者:夏路易,电子工业出版社所有,if(readdata1&0 xf8)!=0 x00),20,例题8-3 读ROM程序,该例程序为读DS18B20 ROM的程序,购买回DS18B20芯片后,在安装到现场之前,应该将其ROM内容读出。该例中DS18B20的信号与51单片机的P3_7端相连。单片机时钟频率11.0592MHz。,源程序如下:,#include AT89X51.H,sbit DQ=P37;/定义通信端口,void delay(unsigned int i)/延时函数,while(i-);,Init_DS18B20(void)/初始化DS18B20,unsigned char x=0;,DQ=1;/DQ复位,delay(8);/调用延时函数,DQ=0;/单片机将DQ电平拉低,delay(80);/调用延时函数,大于480us,DQ=1;/将DQ电平拉高,delay(14);/调用延时函数延时,x=DQ;/稍做延时后 如果x=0则初始化成功 x=1则初始化失败,delay(20);,作者:夏路易,电子工业出版社所有,例题8-3 读ROM程序作者:夏路易电子工业出版社所有,21,ReadOneChar(void)/读字节函数,unsigned char i=0;,unsigned char dat=0;,for(i=8;i0;i-),DQ=0;,dat=1;,DQ=1;,if(DQ),dat|=0 x80;,delay(4);,return(dat);,WriteOneChar(unsigned char dat)/写字节函数,unsigned char i=0;,for(i=8;i0;i-),DQ=0;,DQ=dat,delay(5);,DQ=1;,dat=1;,作者:夏路易,电子工业出版社所有,ReadOneChar(void),22,unsigned char code dispcode=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E;/十六进制-7段显示译码表,unsigned char code xz=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/字节顺序变量,unsigned char timecount;,unsigned char s8;/存放ROM内容的数组变量,main()/主函数,unsigned char i=0;,TMOD=0 x01;/定时器0,工作在模式1,TH0=(65536-4000)/256;/设置定时器初值,TL0=(65536-4000)%256;,ET0=1;/允许定时器0中断,EA=1;/允许总中断,TR0=1;/启动定时器0,作者:夏路易,电子工业出版社所有,unsigned char code dispcode=,23,while(1),if(P3_2=0)/当与P3_2相连的按键按下后,执行如下操作,for(i=2000;i0;i-);,while(P3_2=0);/等待按键抬起,Init_DS18B20();/调用函数初始化DS18B20,WriteOneChar(0 x33);/向DS18B20发送读ROM内容的操作命令,for(i=0;i=8),nn=0;,作者:夏路易,电子工业出版社所有,void t0(void)interrupt 1,25,8.2 I,2,C总线,8.2.1 I,2,C总线介绍,I,2,C(InterIntegrated Circuit)总线是一种由Philps公司开发的两线式串行总线,用于连接微控制器及其外围设备。I,2,C总线产生于在80年代,最初为音频和视频设备开发,如今主要在电路板上用于芯片之间的互连。,1.I,2,C总线特点,I,2,C总线最主要的优点是其简单性和有效性。,I,2,C总线支持多主控器件(芯片),其中任何能够进行发送和接收的器件(芯片)都可以成为主控芯片。一个主控器件(芯片)能够控制信号的传输和时钟频率。当然,在任何时刻只能有一个主控器件(芯片)。,作者:夏路易,电子工业出版社所有,8.2 I2C总线 作者:夏路易电子工业出版社所有,26,(1)总线的构成及信号类型,I,2,C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在单片机与被控器件之间、器件与器件之间进行双向传送,最高传送速率100kbps。各种具有I,2,C接口的器件均并联在这条总线上,每个器件都有唯一的地址,在信息的传输过程中,I,2,C总线上并接的每一器件既是主控器件(或被控器件),又是发送器件(或接收器件)。单片机发出的控制信号分为地址码和数据两部分,地址码用来选址,即接通需要控制的器件;数据就是向选定器件传输的内容,这样各器件虽然挂在同一条总线上,却彼此独立,互不相关。,目前有很多芯片上都集成了I,2,C接口。,作者:夏路易,电子工业出版社所有,(1)总线的构成及信号类型 目前有很多芯片上都集成了I2C,27,(2)I,2,C总线基础,1)总线空闲状态,当SDA与SCL信号线为高电平时(由上拉电阻拉向电源电压),总线处于空闲状态。,2)I,2,C总线上的信号,在传送数据过程中共有三种类型信号:启用信号、结束信号和应答信号。,启用信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收数据的器件在接收到8位数据后,向发送数据的器件发出特定的低电平脉冲,表示已收到数据。例如,单片机向接收器件发出一个信号后,等待接收器件的应答信号,单片机接收到应答信号后,根据实际情况做出是否继续传递信号的判断。,如果接收器收到8位数据后,没有使ACK=0,而是ACK为1,则表示接收失败(NACK)。ACK应该在SCL线上出现第9个脉冲之前,使SDA=0。,若是接受器为主控器时,则应该收到最后一个字节后,发送一个NACK信号(ACK=1),通知被控器接收结束,并释放总线。,控制总线数据传送的芯片为主控器件,该器件提供一次通信所需要的总线启动信号、时钟信号,被控芯片的地址与停止信号。受主控器件控制进行数据传送操作的器件为受控(从)器件。主控器件和受控器件都可以工作在接收和发送状态。在单片机系统中,总线一般由主控器件(通常为单片机)控制。,作者:夏路易,电子工业出版社所有,(2)I2C总线基础作者:夏路易电子工业出版社所有,28,3)SDA信号与SCL信号之间的关系,SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。如图8-11所示。,6)插入等待时间,若是接收芯片没有准备好接收下一个字节,则接收芯片将SCL信号拉低,这时发送器件自动进入等待状态,直到接收芯片准备好接收下一个字节,释放总线,发送器件才继续发送下一个字节。若是接收器件不能及时返回应答信号,则SDA信号一直保持高电平。,作者:夏路易,电子工业出版社所有,3)SDA信号与SCL信号之间的关系6)插入等待时间作者:夏,29,7)重启动总线,在主控器完成一次完整的通信后,如果需要继续霸占总线,则在最后一个应答信号ACK信号之后的SCL高电平期间,使SDA信号出现下降沿,则会重新启动总线。,8)总线封锁,只有有一个器件将总线SCL信号锁定在低电平,则I,2,C被封锁,所有器件不能实现通信。,作者:夏路易,电子工业出版社所有,7)重启动总线作者:夏路易电子工业出版社所有,30,(3)总线仲裁,如果两个主器件同时使用I,2,C总线传送数据,就会出现哪个主器件使用总线的问题,也就出现了总线仲裁问题。,如果两个主器件同时使用I,2,C总线传送数据,则同时送出SCL时钟,由于各个器件之间是线与关系,则最终结果会合并成一个时钟脉冲,其低电平为各个时钟的低电平之“或”,高电平为各个时钟高电平之“与”。,由于I,2,C总线上连接的各个I,2,C器件之间是线与关系,对于I,2,C总线来说,只要有一个器件在SDA信号线上输出低电平信号,则SDA信号线就是低电平。所以发送数据的器件在发送SDA信号的同时,还在检查SDA信号的电平与所发送的信号是否一致,如果不一致,则说明有其他发送数据的器件也在发送数据,因此就退出;如果一致,则继续发送数据。,在总线仲裁过程中,最终获得总线控制权的主器件没有丢失数据,这是“低电平优先”的仲裁原则。,作者:夏路易,电子工业出版社所有,(3)总线仲裁作者:夏路易电子工业出版社所有,31,2.I,2,C总线数据传输过程,有两种工作模式:,(1)主控器为发送器(主控发送器),被控器是接收器(被控接收器),(2)主控器是接收器(主控接收器),被控器为发送器(被控发送器),一般规律如下:,(1)主控器控制全部发送过程。,(2)以启用信号开始,以停止信号结束。,(3)传送的字节数没有限制。,(4)主控器发送启用信号后,紧跟着发送地址字节。,(5)读写控制位用于向被控器提供读写信息,如果为0,则被控器接收数据,如果为1,则被控器发送数据,就是主控器从被控器读入数据。,(6)每传送一个字节需要9个脉冲,前8个时钟脉冲对应的是数据,最后一个脉冲对应的是反馈应答信号ACK。,(7)所有连接在I,2,C总线上被控器件都接收启动信号后的地址字节,并把7位地址码与自己寄存器中的地址码比较,如果相同,则为主控器寻找的被控器,在第9个时钟脉冲时反馈应答信号。,(8)每个数据字节都是高位在前。,作者:夏路易,电子工业出版社所有,2.I2C总线数据传输过程作者:夏路易电子工业出版社所有,32,3.信号传送格式,主控器与被控器进行一次通信称为一帧。典型的信号格式有以下三种;,(1)主控器向被控器写入数据,如果主控器向被控器写入n个字节,则格式如下:,启动,地址,读写,ACK,数据,ACK,停止位,7位,0,8位,主控发出,被控返回,主控发出,被控返回,主控发出,主控发出n个字节数据/被控返回n个ACK,若是被控返回NACK表示接收不成功,作者:夏路易,电子工业出版社所有,3.信号传送格式启动地址读写ACK数据ACK停止位7位0,33,(2)主控器从被控器读回数据,如果主控器向被寻址的被控器读回n个字节,则格式如下:,启动,地址,读写,ACK,数据,ACK,NACK,停止位,7位,1,8位,主控发出,被控返回,被控发出,主控返回,主控返回NACK,表示数据接收完毕,主控发出,被控发出n个字节数据/主控返回n-1个ACK,作者:夏路易,电子工业出版社所有,(2)主控器从被控器读回数据启动地址读写ACK数据ACKNA,34,(3)主控器连续发动两次数据传输,如果主控器先向被控器写入数据,然后再读回数据,则格式如下:,启动,地址,读写,ACK,数据,ACK/NACK,重启动,地址,读写,数据,ACK,NACK,停止位,7位,0,8位,7位,1,8位,主控发出,被控返回,主控发出,被控返回,主控发出,被控发出,主控返回,主控返回NACK,表示数据接收完毕,主控发出,向被控写入n个字节数据,若是被控返回NACK表示接收不成功,被控发出n个字节数据/主控返回n-1个ACK,作者:夏路易,电子工业出版社所有,(3)主控器连续发动两次数据传输启动地址读写ACK数据ACK,35,4.地址格式,为了减少引脚数目,I,2,C总线的7位地址格式如下:,D7,D6,D5,D4,D3,D2,D1,D0,从芯片地址,R/W,地址由7位组成,占用了地址字节的的高7位,字节的0位为数据方向控制位。由于地址位是7位,因此在I,2,C总线上可以连接127个具有I,2,C接口的芯片。,7位地址中,4位为固定地址(器件类型地址),3位为可编程地址。例如LM75数字温度传感器的固定地址为1001,则其地址为:,1,0,0,1,A3,A2,A1,D0,由于只有3位可编程地址,所以在该I,2,C总线上只能连接8个相同的芯片。,部分器件类型地址如下:,存储器类:1010,LED与LCD驱动器:0111,作者:夏路易,电子工业出版社所有,4.地址格式D7D6D5D4D3D2D1D0从芯片地址R/,36,5.常见的I,2,C总线工作方式,一般情况下,只要的时钟频率满足SDA和SCL上升沿与下降沿的需求,就可以用软件方法实现单片机与I,2,C器件的通信。,6.I,2,C器件与I,2,C总线连接,I,2,C接口的存储器AT24C02与I,2,C总线连接方式如下图所示。,作者:夏路易,电子工业出版社所有,5.常见的I2C总线工作方式作者:夏路易电子工业出版社所有,37,8.2.2 I,2,C接口存储器AT24C02,1.AT24C02特点,与,400KHz I,2,C,总线兼容。,1.8,到,6.0,伏工作电压范围。,低功耗,CMOS,技术。,写保护功能当,WP,为高电平时进入写保护状态。,页写缓冲器。,自定时擦写周期。,1,000,000,编程,/,擦除周期。,可保存数据,100,年。,8,脚,DIP SOIC,或,TSSOP,封装。,温度范围商业级工业级和汽车级。,作者:夏路易,电子工业出版社所有,8.2.2 I2C接口存储器AT24C02作者:夏路易电子,38,2.引脚排列,AT24C02的引脚排列如图所示。其中:,SDA是串行数据脚。该脚为双向引脚,漏极开路,用于地址、数据的输入和数据的输出,使用时需加上拉电阻。,SCL是时钟脚。该引脚为器件数据传输的同步时钟信号。,SDA和SCL脚均为施密特触发输入,并有滤波电路,可有效抑制噪声尖峰信号,保证在总线噪声严重时器件仍能正常工作。在单片机系统中,总线受单片机控制。单片机产生串行时钟(SCL),控制总线的存取,发送启用STRAT和停止STOP信号。,WP是写保护引脚,该引脚高电平时处于写保护状态。如果WP 管脚连接到电源VCC,所有的内容都被写保护只能读,当WP 管脚连接到地线VSS或悬空允许器件进行正常的读/写操作,A0、A1和A2引脚是器件地址选择引脚。若是悬空,相当于接0电平,如果只有一个AT24C02被总线寻址这三个地址输入脚A0 A1 A2 可悬空或连接到VSS。,VCC是电源引脚,电源电压范围是1.8V6V,极限电压为2V7V。,VSS是地线引脚。,各个引脚承受极限电压为2VVCC+2V,作者:夏路易,电子工业出版社所有,2.引脚排列作者:夏路易电子工业出版社所有,39,3.器件地址格式,AT24C02的器件地址格式如下:,因为是EEPROM,所以高4位都是1010,后4位中的前3位为可选择地址,所以一块电路板上,最多允许8个AT24C02器件。,1.字节写,在字节写模式下单片机发送起始命令、从器件地址以及,R/W,位置0给从器件;从器件产生应答信号后,主器件发送AT,24C02,的字节地址,主器件在收到从器件的第2个应答信号后,再发送数据到被寻址的存储单元,AT,24C02,再次应答后,主器件产生停止信号,随后AT,24C02,开始内部数据的擦写,在内部擦写过程中AT,24C02,不再应答主器件的任何请求。写时序如图所示。,作者:夏路易,电子工业出版社所有,3.器件地址格式因为是EEPROM,所以高4位都是1010,40,2.读操作,(1),立即地址读,AT24C02,的地址计数器内容为最后操作字节的地址加1,也就是说如果上次读,/,写的操作地址为,N,,则立即读的地址为从地址,N+,1开始,如果,N=255,则计数器将翻转到,0,,且继续输出数据,AT,24C02,接收到器件地址信号、R/W位置1信号,首先发送一个应答信号,然后发送一个,8,位字节数据,主器件不需发送一个应答信号但要产生一个停止信号。立即读时序如图所示。,作者:夏路易,电子工业出版社所有,2.读操作作者:夏路易电子工业出版社所有,41,(2),选择地址读,选择地址读操作允许单片机对寄存器的任意字节进行读操作,单片机首先发送起始信号、从器件地址、需要读取的字节数据的地址;在AT,24C02,应答之后,主器件重新发送起始信号、从器件地址(,R/W,位置,1),AT24C02,响应并发送应答信号,然后输出所要求的一个,8,位字节数据,主器件不发送应答信号但产生一个停止信号。AT24C02选择地址读的时序如图所示。,作者:夏路易,电子工业出版社所有,(2)选择地址读作者:夏路易电子工业出版社所有,42,(3)连续地址读,连续读操作可通过立即读或选择性读操作方式启动,在AT,24C02,发送完一个,8,位字节数据后,单片机产生一个应答信号来响应,通知AT,24C02,,单片机要求更多的数据,对应每个单片机产生的应答信号,AT,24C24,将发送一个,8,位数据字节,当单片机不发送应答信号,而发送停止位时结束此操作。从AT,24C02,输出的数据按顺序由,N,到,N+1,输出,读操作时地址计数器在AT,24C02,整个地址内增加,当读取的字节超过,256,,计数器将翻转到0并继续输出数据字节。,连续地址读的时序如图所示,作者:夏路易,电子工业出版社所有,(3)连续地址读作者:夏路易电子工业出版社所有,43,例题8-5 写入AT24C02芯片一个字节,然后读出并在数码管上显示。,按下按键k1写0 x12到0 x01地址,按下按键k3写0 x25到0 x01地址,按下按键k2从0 x01地址读出一个字节,显示在P0和P1口相连的数码管上。单片机时钟频率11.0592MHz。,源程序如下:,#define uchar unsigned char /定义一下方便使用,#define uint unsigned int,#define ulong unsigned long,#include /包括一个52标准内核的头文件,#define WriteDeviceAddress 0 xa0 /定义器件在I,2,C总线中的地址(读写位为0),#define ReadDviceAddress 0 xa1 /定义器件在I,2,C总线中的地址(读写位为1),sbit SCL=P37;,sbit SDA=P36;,sbit K1=P32;,sbit K2=P33;,sbit K3=P34;,作者:夏路易,电子工业出版社所有,例题8-5 写入AT24C02芯片一个字节,然后读出并在,44,void DelayMs(unsigned int number)/延时函数,unsigned char temp;,for(;number!=0;number-),for(temp=112;temp!=0;temp-);,void Start()/启用总线,SDA=1;,SCL=1;,SDA=0;,SCL=0;,void Stop()/停用总线,SCL=0;,SDA=0;,SCL=1;,SDA=1;,void NoAck()/发送应答信号ACK,SDA=1;,SCL=1;,SCL=0;,作者:夏路易,电子工业出版社所有,void DelayMs(unsigned int numb,45,bit TestAck()/测试应答信号ACK,bit ErrorBit;,SDA=1;,SCL=1;,ErrorBit=SDA;,SCL=0;,return(ErrorBit);,Write8Bit(unsigned char input)/写入8个二进制位到AT24c02,unsigned char temp;,for(temp=8;temp!=0;temp-),SDA=(bit)(input,SCL=1;,SCL=0;,input=input1;,作者:夏路易,电子工业出版社所有,bit TestAck()/测试应答信号ACK,46,void Write24c02(uchar ch,uchar address)/写入一个字节到AT24c02中address地址,Start();,Write8Bit(WriteDeviceAddress);/发送器件的地址,TestAck();,Write8Bit(address);/发送写入字节的地址,TestAck();,Write8Bit(ch);/发送写入的数据,TestAck();,Stop();,DelayMs(10);,uchar Read8Bit()/从AT24c02中读出8个二进制位,unsigned char temp,rbyte=0;,for(temp=8;temp!=0;temp-),SCL=1;,rbyte=rbyte1;,rbyte=rbyte|(unsigned char)(SDA);,SCL=0;,return(rbyte);,作者:夏路易,电子工业出版社所有,void Write24c02(uchar ch,uchar,47,uchar Read24c02(uchar address)/从24c02中address地址读出1个字节,uchar ch;,Start();/启用总线,Write8Bit(WriteDeviceAddress);/发送器件的地址,TestAck();/测试应答信号,Write8Bit(address);/发送读出字节的地址,TestAck();/测试应答信号,Start();/启用总线,Write8Bit(ReadDviceAddress);/发送器件的地址,TestAck();/测试应答信号,ch=Read8Bit();/读8位数据,NoAck();/无应答信号,Stop();/停止总线,return(ch);/返回读出数据,unsigned char hex16=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E;/数码管十六进制译码表,作者:夏路易,电子工业出版社所有,uchar Read24c02(uchar address),48,void main(void)/主程序,uchar c2;,uchar n1=0 x12,n2,n3=0 x25;,while(1),if(!K1)/如果按下按键K1,Write24c02(n1,0 x01);/调用函数,向AT24C02的0 x01地址写数据0 x12,while(!K1);/等待按键松开,for(c2=0;c2250;c2+);/松开按键去抖,if(!K2)/如果按下按键K2,,n2=Read24c02(0 x01);/调用函数,从AT24C02的0 x01地址读出数据到变量n2,while(!K2);/等待按键松开,for(c2=0;c2250;c2+);/松开按键去抖,if(!K3)/若按下按键K1,,Write24c02(n3,0 x01);/调用函数,向24C02的0 x01地址写0 x25,while(!K3);/等待按键松开,for(c2=0;c2250;c2+);/松开按键去抖,P1=hexn2/10;/P1口连接的数码管显示读出数据的高位,P0=hexn2%10;/P2口连接的数码管显示读出数据的低位,作者:夏路易,电子工业出版社所有,void main(void),49,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!