版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主编:李文华“十四五”职业教育国家规划教材经全国职业教育教材审定委员会审定保存设定数据任务17任务要求
单片机的fosc=11.0592MHz,用P3.0、P3.1口线分别充当I2C总线的SDA线(数据地址线)和SCL线(时钟线),控制I2C总线接口芯片AT24C02,单片机的P1、P2两个并行口控制6个数码管的显示,P1口作段选口,P2口作位选口,定时/计数器T1作扫描定时器,使6个数码管扫描显示。上电时,6个数码管分别显示数字0~5,并将这6个显示数据分别加1后保存到AT24C02的0x00~0x05六个单元中。过5秒后,系统将保存在AT24C02的0x00~0x05六个单元中数读出并显示。相关知识1、I2C总线
是Philips公司推出的一种两制串行数据传输总线,由串行时钟线SCL和串行数据线SDA组成,SCL线传送时钟信号,SDA传送数据地址信号,总线传输速度可高达400Kb/s。I2C总线有多主模式和单主模式两种模式,在单片机应用系统中常用单主模式。在单主模式中,单片机为主控器,单片机外部接有一片或者多片I2C接口芯片,I2C接口芯片均为从属设备。1、I2C总线
⑴I2C接口芯片与单片机的接口电路I2C接口芯片与单片机的接口电路有两种形式。1)带有I2C接口的单片机扩展I2C接口芯片电路图特点:各芯片的SDA线相连,并与单片机的SDA脚相接,各芯片的SCK线相连,并与单片机的SCK脚相接,并且SCK线上和SDA线上都接有一只上拉电阻。I2C总线的操作时序由硬件实现,只需读写单片机的相关寄存器就可以了。2)不带I2C接口的单片机扩展I2C接口芯片特点:外部各I2C接口芯片的SCK脚相接后与单片机的一根I/O口线相连,各I2C接口芯片的SDA脚相接后与单片机的另一根I/O口线相连,SCK线与SDA线上各接一只上接电阻。要求使用者熟悉I2C总线的通信协议和操作时序,用软件模拟I2C总线的操作时序,并按I2C总线的通信协议进行数据的读和写。⑵I2C接口芯片的寻址器件地址,由器件厂商给定,不同的器件其器件地址不同。常用器件的器件地址见教材P227表7-13用I2C接口芯片的器件地址寻址。
器件地址由7位组成,这7位器件地址与1位的数据传输方向位构成了I2C总线的器件寻址字节SLA。寻址字节的格式如下SLAD7D6D5D4D3D2D1D0DA3DA2DA1DA0A2A1A0R/W器件的引脚地址,即器件的地址引脚A2、A1、A0通过接正电源或者接地而形成的地址数据。数据传输方向位R/W=0:单片机向器件写数,R/W=1:单片机从器件中读取数据⑵I2C接口芯片的寻址寻址过程(1)单片机先发送启动信号,用来启动I2C通信(2)单片机在总线上发送寻址字节数据
(3)I2C接口器件在通信成功后接收总线上的寻址字节数据,并与自已的器件地址相比较
(4)如果不同,则不对后续的通信产生响应;如果相同,则根据寻址字节规定的数据传输方向发送或接收后续的数据。举例PCF8570的A2、A1、A0三脚接地时,写PCF8570的寻址字节数据为0xa0,单片机发送寻址字节数据时,若发送0xa0,则表示是对A2、A1、A0三脚都接地的PCF8570芯片要进行写数操作。单片机发送寻址字节数据时,若发送0xa1,则表示是对A2、A1、A0三脚都接地的PCF8570芯片要进行读数操作。⑶I2C总线上的信号定义及其模拟编程一次完整的数据传输格式
编写I2C接口芯片的访问程序时,必须严格遵守启动信号、停止信号、应答信号、非应答信号以及数据传输格式这些规定总线空闲状态:SDA、SCL均为高电平。只有在总线空闲时才能启动数据传输。⑶I2C总线上的信号定义及其模拟编程启动信号(S)的特点:时钟线SCL为高电平时,数据线SDA上出现由1到0的下降沿,并且SDA的下降沿与SCL的下降沿至少间隔4.7µs。
启动信号的模拟(fosc=12MHz时)void start(void){ SDA=1; //数据线置高电平
SCL=1; //时钟数置高电平
SDA=0; //产生SDA下降沿
_nop_();_nop_();_nop_();_nop_();_nop_();//延时5µs SCL=0; //产生SCL下降沿,准备传输数据
_nop_();_nop_();_nop_();_nop_();_nop_();//延时5µs}
启动信号S⑶I2C总线上的信号定义及其模拟编程停止信号(P)的特点:时钟线SCL为高电平时,数据线上出现由0到1的上升沿,并且SCL的上升沿与SDA的上升沿至少间隔4.7µs。
停止信号的模拟(fosc=12MHz时)void stop(){ SDA=0; //数据线清0 SCL=1; //产生SCL上升沿
_nop_();_nop_();_nop_();_nop_();_nop_();//延时5µs SDA=1; //产生SDA上升沿
_nop_();_nop_();_nop_();_nop_();_nop_();//延时5µs}
停止信号P⑶I2C总线上的信号定义及其模拟编程应答信号的特点:在时钟的高电平期间,SDA线为低电平。应答信号由接收数据的一方产生。
单片机产生应答信号的模拟(fosc=12MHz时)void wrack(void){ SDA=0; //产生SDA下降沿
_nop_();_nop_();_nop_();_nop_();_nop_();//5µs SCL=1; //产生SCL上升沿
_nop_();_nop_();_nop_();_nop_();_nop_();//延时5µs SCL=0; //产生SCL下降沿}
应答信号单片机读取I2C芯片产生应答信号的模拟(fosc=12MHz时)bit rdack(void){ bit ack; //1定义局部位变量ack SDA=1; //2数据线置1,准备读SDA线。
_nop_();_nop_();_nop_();_nop_();_nop_();//3延时5µs SCL=1; //4产生SCL上升沿
ack=SDA; //5读SDA线上接口芯片发送的应答信号
_nop_();_nop_();_nop_();_nop_();_nop_();//6延时5µs SCL=0; //7产生SCL下降沿
return ack; //8返回应答信号}
⑶I2C总线上的信号定义及其模拟编程非应答信号的特点:在时钟的高电平期间,SDA线为高电平。非应答信号由接收数据的一方产生。
单片机产生非应答信号的模拟(fosc=12MHz时)void wrack(void){ SDA=1; //产生SDA上升沿
_nop_();_nop_();_nop_();_nop_();_nop_();//5µs SCL=1; //产生SCL上升沿
_nop_();_nop_();_nop_();_nop_();_nop_();//延时5µs SCL=0; //产生SCL下降沿}
非应答信号⑶I2C总线上的信号定义及其模拟编程只有SCK为低电平时才允许SDA上的数据发生变化。单片机读数时,应在SCL高电平期读SDA线上的数据,写数时应该在SCL低电平期将数据传送至SDA线上数位传输顺序为高位在前,低位在后,每传输1个字节,数据接收器必须发送1个应答位或者非应答位。即一个字节的传输对应9个时钟脉冲,前8个对应8位数据,第9个脉冲对应应答位或非应答位。
⑶I2C总线上的信号定义及其模拟编程单片机向I2C接口芯片写数流程图⑶I2C总线上的信号定义及其模拟编程写数程序void sdbyte(ucharsdat){ uchar i; for(i=0;i<8;i++) { if(sdat&0x80) SDA=1; else SDA=0; SCL=1; _nop_();_nop_();_nop_(); _nop_();_nop_(); SCL=0; _nop_();_nop_();_nop_(); _nop_();_nop_(); sdat=sdat<<1; } }⑶I2C总线上的信号定义及其模拟编程单片机从I2C接口芯片读数流程图⑶I2C总线上的信号定义及其模拟编程读数程序uchar rcvbyte(void){uchar i,m=0; for(i=0;i<8;i++){ SDA=1; SCL=1; m=m<<1; if(SDA) m=m|1; _nop_();_nop_();_nop_(); _nop_();_nop_(); //延时5µs SCL=0; _nop_();_nop_();_nop_(); _nop_();_nop_();}return m;}⑶I2C总线上的信号定义及其模拟编程⑷单片机读写I2C接口芯片的操作格式有写数据、读数据和读写数据三种写数据操作图解阴影框:单片机发送数据无阴影框:I2C芯片发送数据A:应答信号/A:非应答信号读数据操作图解读写数据操作图解停止信号前发送非应答信号重新启动信号读数操作写数操作⑷单片机读写I2C接口芯片的操作格式2.AT24C02的应用特性⑴AT24C02的引脚功能TSSOP8、SOIC8、DIP8封装形式的引脚分布如下地址引脚电源地数据传输时钟输入写保护,接正电源时只读正电源⑵单片机与AT24C02的接口电路用P1.0、P1.1充当I2C总线扩展2片AT24C02的电路U2、U3的WP引脚均接地,允许单片机对U2、U3读写数据。U2、U3的SCL引脚相连后与P1.0口线相接,P1.0口线充当SCL线U2、U3的SDA引脚相连后与P1.1口线相接,P1.1口线充当SDA线SCL、SDA线上均接有1K的上拉电阻⑵单片机与AT24C02的接口电路用P1.0、P1.1充当I2C总线扩展2片AT24C02的电路U2的引脚地址为000B,单片机访问U2时,读寻址字节为0xa1(10100001B),写寻址字节为0xa0(10100000B)
U3的引脚地址为001B,单片机访问U3时,读寻址字节为0xa3(10100011B),写寻址字节为0xa2(10100010B)
⑶AT24C02的内部存储器
片内集成有256字节的EEPROM,地址为0x00~0xFF,此地址叫做子地址子地址按每页8字节进行组织,共分32页,其中高5位地址相同的存储单元为一页。例如0x00、0x01、……、0x07单元就属于同一页,而0x07单元与0x08单元就不属于同一页
内部有一个字节地址寄存器,用来保存当前访问存储单元的地址。
字节地址寄存器具有自动加1功能,单片机访问AT24C02的某个存储单元后,字节地址寄存器的内容就会自动加1,单片机对AT24C02的不同的访问操作,字节地址寄存器的加1方式不同。⑶AT24C02的内部存储器
写EEPROM时,字节地址寄存器的内容只在页内加1,即只有低3位加1,高5位始终保持不变。
读EEPROM时,字节地址寄存器的内容在整个存储器地址范围内加1,即8位都参与加1。
例如,单片机向AT24C02连续写2个char型数据时,若第1个数写入0x07单元,第1个数写入后字节地址寄存器的内容就会自动地变成0x00,第2个数将被写入0x00单元,而不0x08单元。
例如,单片机从AT24C02的0x07单元开始连续读2个字节的内容时,则所读的第1个数是0x07单元的内容,读出该数后,字节地址寄存器的内容就会自动变成0x08,因此,所读的第2个数是0x08单元的内容,只有读0xff单元后字节地址寄存器的内容自动变成0x00。⑷AT24C02的工作时序AT24C02的工作时序⑷AT24C02的工作时序AT24C02的动态参数符号含义1.8V2.7V、5V单位最小最大最小最大t1启动信号建立时间4.7
0.6
µst2启动信号持续时间4.0
0.6
µstL时钟低电平持续时间4.7
1.2
µstH时钟高电平持续时间4.0
0.6
µst3输入数据保持时间0
0
µst4输入数据建立时间200
100
nst5停止信号建立时间4.7
0.6
µstBUF总线空闲最短时间4.7
1.2
µst6输出数据有效数据的时间0.14.50.10.9µst7输出数据保持时间100
50
nsfSCL时钟频率
100
400kHztWR写周期
5
5ms⑸AT24C02的写操作字节写的操作格式单片机发出启动信号S后,再发送寻址字节SLAW,其中的方向位为0(写),用于器件的寻址和规定数据的传输方向,单片机收到AT24C02发出的应答信号A后,再发送子地址SubAdd,对AT24C02内部存储单元寻址,收到应答信号后再发送待写入的数据data,收到应答后再产生停止信号P。页写的操作格式页写与字节写的不同之处是,单片机传送了第1个字节后并不产生停止信号,而是紧接着发送第2个字节数据、第3个字节数据、……、第n个字节数据,然后产生停止信号。页写操作的注意事项必须保证所写数据的地址在同一页内,如果超过了一页,则会出现“翻卷”现象。即后面的数据会保存在本页低3位地址相同的单元中。例如子地址为0x05,需要写入5个数据,则这5个数据将会依次保存在0x05、0x06、0x07、0x00、0x01这5个单元中。⑸AT24C02的写操作页写流程图及程序⑸AT24C02的写操作将dp所指向的n个字节的数据写入AT24C02从subadd地址开始的存储单元中,程序如下void wrnb(ucharsubadd,ucharn,uchar idata *dp){uchar i;start(); //产生启动信号sdbyte(0x0a0);//发送写寻址字节rdack(); //读AT24C02的应答信号sdbyte(subadd);//发送子地址rdack(); //读AT24C02的应答信号for(i=0;i<n;i++)//循环n次{ sdbyte(*dp);//写一个字节 rdack();//读应答信号 dp++; //移动指针}stop(); //产生停止信号}实际使用中的注意事项尽量使用页写两次写操作的时间间隔必须保证在5ms以上⑹AT24C02的读操作有立即地址读、随机地址读、顺序读三种读操作立即地址读的操作格式操作:单片机发出启信号后再发送读寻址字节,收到应答信号后紧接着接收数据,然后发送一个非应答信号后再产生停止信号。特点:单片机所访问的存储单元的地址由AT24C02内部字节地址寄存器的内容来确定。⑹AT24C02的读操作随机地址读操作格式操作:单片机先发送启动信号,写寻址字节SLAW和准备访问存储单元的子地址SubAdd,收到AT24C02应答之后,再重新发送启动信号S和读寻址字节SLAR,收到AT24C02应答后,读取AT24C02发出的8位数据,最后发送一个非应答信号和停止信号。特点:按用户指定的地址SubAdd读取其内容的操作注意:单片机要发送2次启动信号,一个写寻址字节和一个读寻址字节。顺序地址读(多字节读)操作格式操作:通过立即地址读操作或者随机地址读操作来启动单片机接收到一个数据后,发出的是应答信号而不是非应答信号收到最后一个数据后发送非应答信号,然后发送停止信号说明:实际应用中一般使用随机地址读来启动顺序地址读。与随机地址读相同接收到第1个数据后发送应答信号接收多个数据⑹AT24C02的读操作顺序地址读(多字节读)的流程图及程序⑹AT24C02的读操作void rdnb(ucharsubadd,ucharn,uchar idata *dp){ uchar i; start(); //产生启动信号
sdbyte(0x0a0); //发送写寻址字节
rdack(); //读应答
sdbyte(subadd); //发送子地址
rdack(); //读应答
start(); //产生启动信号
sdbyte(0x0a1); //发送读寻址字节
rdack(); //读应答
for(i=0;i<n;i++) //循环n次
{*dp=rcvbyte(); //读一个字节
dp++; //dp指向下一单元
if(i<n-1) wrack(); //不是最后字节,产生应答信号
else wrnoack(); //是最后字节,产生非应答信号
}
stop(); //产生停止信号}
任务实施1、搭建硬件电路AT24C02的A1、A2、A3三脚接地,AT24C02的引脚地址为000B。单片机访问AT24C02时,写寻址字节为0xa0,读寻址字节为0xa1。2、编写软件程序(1)流程图2、编写软件程序(2)程序代码//数据定义#include <reg51.h> //1#include <intrins.h> //2#define DCOUNT 6 //3数码管为6个#define portled_s P1 //4数码管的段选口#define portled_b P2 //5数码管的位选口#define uchar unsigned char //6sbit SDA=P3^0; //7串行数据线sbit SCL=P3^1; //8串行时钟线uchar idata disdat[6]; //9数码管显示数组uchar data wcnt; //10数码管扫描位置计数器uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //11显示笔型码uchar code ledctrl[]={0x0fe,0x0fd,0x0fb,0x0f7,0x0ef,0x0df}; //12段选控制码2、编写软件程序//函数说明void display(void); //13void start(void); //14void stop(void); //15void rdack(void); //16void wrack(void); //17void wrnoack(void); //18void sdbyte(uchar); //19uchar rcvbyte(void); //20void rdnb(uchar,uchar,uchar idata *); //21void wrnb(uchar,uchar,uchar idata *); //222、编写软件程序//main函数void main(void){ uchar idata rdwrdat[6]; uchar i,j,k; SP=0x5f; wcnt=0; for(i=0;i<6;i++)disdat[i]=i; TMOD=0x10; TL1=(65536-2764)%256; TH1=(65536-2764)/256; ET1=1; EA=1; TR1=1; for(i=0;i<6;i++) rdwrdat[i]=disdat[i]+1; wrnb(0x00,0x06,rdwrdat);2、编写软件程序//T1中断服务函数void tim1() interrupt 3 using 1 //43{ TL1=(65536-2764)%256;TH1=(65536-2764)/256; display();}2、编写软件程序其他子函数复制前面讲授的下列函数:1、wrnb()2、rdnb()3、start4、stop()5、rdack()6、wrack()7、wrnoack()8、sdbyte()9、rcvbyte()2、编写软件程序//-------------显示子程序-------------void display(void) //140{ portled_s=0; //141段选口消隐输出 portled_b=ledctrl[wcnt]; //142 portled_s=led[disdat[wcnt]]; //143 wcnt++; //144 wcnt=wcnt%DCOUNT; //145} //146应用总结与拓展I2C总线是两线制串行传输总线。无I2C接口的单片机扩展I2C接口芯片时,只需用2根I/O口线充当串行时钟线SCL和串行数据数SDA,用软件模拟I2C的时序以及接口芯片的操作方式。搭建电路时,各I2C接口芯片的SCL脚相接后与单片机的一根I/O口线相连,SDA脚相接后再与单片机的另一根I/O口线相连,SCL、SDA线上各接一只1KΩ~10KΩ的上拉电阻。I2C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年AI客服情绪识别技术
- 2026中考数学高频考点一轮复习:一元二次方程(含解析)
- 三方货款转让合同协议书
- 安徽安全管理培训讲师
- 街舞表演职业规划
- 医学影像云平台灾备方案设计
- 民生清单主题教育-1
- 临床路径管理制度及实施方案
- 大学生职业规划3000字模板
- 《有机化学》-第11章
- 茶叶审评课件教学课件
- 【川教版】《生命 生态 安全》五下全册课件
- 开学班主任培训内容
- 五年级上册口算练习400题及答案
- 《大学美育基础》课程标准
- 【企业财务风险的识别与评价研究文献综述及理论基础5000字】
- 都兰宏源实业有限公司大海滩铁矿采矿权出让收益评估报告
- GB/T 42600-2023风能发电系统风力发电机组塔架和基础设计要求
- 教育研究方法完整PPT
- 任务3.3 空间数据误差校正
- GB/T 6533-2012原油中水和沉淀物的测定离心法
评论
0/150
提交评论