




免费预览已结束,剩余8页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IIC总线协议-以存储芯片at24c64为例 邮箱:-IIC总线协议前言:1.只有在总线空闲时才允许启动数据传送.2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变.时钟线为高电平时,数据线的任何电平变化将被看做总线的起始或停止信号.3. 任何将数据传送到总线的器件作为发送器任何从总线接收数据的器件为接收器, 主器件和从器件都可以作为发送器或接收器但由主器件控制传送数据.4.有两根数据线:SDA : IIC数据传送位SCL : IIC 时钟控制位下面对IIC的底层驱动加以说明,并给出汇编和C语言的代码,以AT24C64为例.在这之前先定义一些常量和公共代码:汇编: SDA BIT P3.4 ;数据端SCL BIT P3.5 ;时钟端DELAY : NOP ;延时子程序,根据单片机的晶振不同,延时长短略有不同NOP ;12MH晶振NOPNOPNOPNOP语言:sbit SDA = P3.4;sbit SCL = P3.5;void delay(void) /延时子程序unsigned char i;for(i=0;i10;i+); 起始信号:时钟线保持高电平期间,数据线电平从高到低的跳变作为IIC总线的起始信号.汇编:IIC_ST: ;IIC起始代码LCALL DELAY CLR SCLLCALL DELAY LCALL DELAY SETB SDALCALL DELAY LCALL DELAY SETB SCLLCALL DELAY LCALL DELAY CLR SDALCALL DELAYLCALL DELAY CLR SCLLCALL DELAY RETC语言:void iic_start(void) SCL=0; delay(); SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; delay(); 停止信号: 时钟线保持高电平期间,数据线电平从低变高.汇编:IIC_SP:LCALL DELAY CLR SCLLCALL DELAYLCALL DELAYCLR SDALCALL DELAYLCALL DELAYSETB SCLLCALL DELAYLCALL DELAYSETB SDALCALL DELAYRETC语言:void iic_stop(void)delay(); SCL=0; delay(); SDA=0; delay();SCL=1 delay();SDA=1; delay();器件寻址:首先发送一个起始信号,启动发送过程,然后发送它所需要的寻址的从器件的地址.8从位器件地址的高4位固定为1010,接下来的三位为器件的地址位,最低一位作为读写控制位.1: 表示从器件进行读;0: 表示对器件进行写.应答信号:IIC总线数据传送时,每成功的传送一个字节数据后,接收器都必须产生一个应答信号.应答的器件在第九个时钟周期时将SDA拉低,表示收到一个8位数据.写操作:(字节模式)主器件发送起始信号和从器件地址信息(R/W位清0)给从器件,在从器件送回应答信号后,主器件发送两个8位地址字写入从器件的地址指针,主器件在收到从器件的应答信号后,再发送数据到到被寻址的从器件存储单元,从器件再次应答,并在主器件产生停止信号后开始内部数据的擦写.汇编:;#写数据到at24c64-ATW2#;说明:写一字节数据到at24c64,失败PSW.5置1;入口参数:A;出口参数:无;#IIC_WB:MOV R2,#8 CLR SCLJ4:RLC ALCALL DELAYLCALL DELAYMOV SDA,CLCALL DELAYLCALL DELAYSETB SCLLCALL DELAYLCALL DELAYCLR SCLDJNZ R2,J4 SETB SDALCALL DELAYLCALL DELAYSETB SCL ;第九个时钟周期LCALL DELAYLCALL DELAYJB SDA,J1 ;正常情况下,第九个时钟周期收到的SDA应为低CLR SCL ;释放总线LCALL DELAYLCALL DELAYCLR PSW.5 ;接收成功LJMP edwJ1:CLR SCL ;释放总线SETB PSW.5 ;接收失败edw:RETC语言:void iic_write_byte(unsigned char w_byte)unsigned char i;SCL=0;for(i=0;i8;i+)delay();if(w_bytei)&0x80)SDA=1;elseSDA=0;delay();SCL=1;delay();SCL=0;SDA=1;delay();SCL=1; /第九个时钟周期delay();if(SDA=1) /正常情况下,第九个时钟周期时,收到的SDA应该为低电平 /写入出错SCL=0;PSW.5=1; /出错标志else /写入成功SCL=0;PSW.5=0; /成功标志读操作:读操作的初始化方式和写操作一样,仅把R/W位置1.读操作的种类:1. 立即/当前地址读(本例未用)2. 选择/随机读: 允许对任意字节进行读,首先发送起始信号,从器件地址和它想读的字节数数据地址,执行一个伪写操作,在AT24C64应答之后,主器件重新发送起始信号和从器件地址,此时R/W位置1.AT24C64响应并发送应答信号,然后输出所要求的一个8位字节数据.主器件不发送应答信号但产生一个停止信号.汇编1:;/* 单字节读 */;读出的一个字节存放在A中IIC_RB:CLR ACLR CLCALL DELAYLCALL DELAYCLR SCLLCALL DELAYLCALL DELAY MOV R2,#8J5:SETB SCLLCALL DELAYLCALL DELAYMOV C,SDARLC ALCALL DELAYLCALL DELAYCLR SCLLCALL DELAYLCALL DELAYDJNZ R2,J5CLR SDALCALL DELAYLCALL DELAYSETB SCL ;第九个时钟周期,应将SDA拉低作为应答信号LCALL DELAYLCALL DELAYCLR SCL ;释放总线LCALL DELAYLCALL DELAY SETB SDA RET汇编2:;#序列读最后一字节#;读最后一字节时需要发送停止信号IIC_RL:CLR ACLR CLCALL DELAYLCALL DELAYCLR SCLLCALL DELAYLCALL DELAY MOV R2,#8J50:SETB SCLLCALL DELAYLCALL DELAYMOV C,SDARLC ALCALL DELAYLCALL DELAYCLR SCLLCALL DELAYLCALL DELAYDJNZ R2,J50SETB SDALCALL DELAYLCALL DELAYSETB SCL ;停止信号LCALL DELAYLCALL DELAY RETC语言1: 单字节读unsigned char iic_read_byte(void)unsigned char i,j=0;delay();SCL=0;delay();for(i=0;i8;i+)SCL=1;delay();j=1;if(SDA=1)j+=1;delay();SCL=0;delay();SDA=0;delay();SCL=1;delay();SCL=0;delay();SDA=1;return j;C语言2: 序列读最后一字节unsigned char iic_read_last_byte(void)unsigned char I,j=0;delay();SCL=0;delay();for(i=0;i8;i+)SCL=1;delay();j=1;if(SDA=1)j+=1;delay();SCL=0;delay();SDA=1;delay();SCL=1; /停止信号delay();return j;举例: 以AT公司生产的IIC器件EEPROM: at24c64为例,对该器件进行读写1. 原理图AT24C64器件简介:2.将位于R0(buf)所指向的地址单元中的COUNT(count)个数据写入AT24C64的ADDRH,ADDRL(addrh,dddrl)地址单元中.(括号内为c语言变量)汇编:(会用到上面给出的IIC驱动子程序以及定义的一些变量和接口)ADDRH EQU 13H ADDRL EQU 14H ;定义读写AT24C64的首地址STOR1: MOV COUNT,#4 ;写入的字节数 MOV ADDRH,#xx ; 写入到AT24C64的地址字 MOV ADDRL,#xx LCALL WRDAT ;将位于R0所指向的地址单元中的COUNT个数据写入;AT24C64的ADDRH,ADDRL地址单元中;#所有参数写入AT24C64,共4字节#;说明:将表号和用户电量共四字节数据写入AT24C64中;入口参数:; 1.数据间接寻址地址-R0; 2.写入到AT24C64的地址字-ADDRH,ADDRL; 3.写入字节数-COUNT;出口参数:无;#WRDAT: LCALL IIC_ST ;STARTMOV A,#0A0HLCALL IIC_WB ;写器件寻址00H(第一片AT24C64) 将A中的字符发送JB PSW.5,WRDATMOV A,ADDRH LCALL IIC_WBJB PSW.5,WRDATMOV A,ADDRLLCALL IIC_WB ;存储单元地址JB PSW.5,WRDAT MOV R7,COUNTWRDAT0: MOV A,R0LCALL IIC_WB ;写入数据JB PSW.5,WRDAT INC R0 DJNZ R7,WRDAT0 LCALL IIC_SP ;停止 LCALL DL20MS ;延时,等待将数据擦写到at24c64中 RETC语言:unsigned char count=0x04;unsigned char addrh=0xxx;unsigned char addrl=0xxx;unsigned char t_buf;while(!write_byte(t_buf,addrh,addrl,count);/*#所有参数写入AT24C64,共4字节#/说明:将表号和用户电量共四字节数据写入AT24C64中/入口参数:; 1.数据间接寻址地址-buf; 2.写入到AT24C64的地址字-addh,addrl; 3.写入字节数-count;出口参数:1表示写成功,0表示写失败;#*/bit write_byte(unsigned char * buf,/ unsigned char addrh,unsigned char addrl, unsigned char count)unsigned char i;iic_start();/startiic_write_byte(0x0a0);/写器件寻址0x00(第一片at24c64)if(PSW.5)return 0;iic_write_byte(addrh);if(PSW.5)return 0;iic_write_byte(addrl);if(PSW.5)return 0;for(i=0;icount;i+)iic_write_byte(*buf);if(PSW.5)return 0;buf+;iic_stop();return 1;2. 从at24c64的ADDRH,ADDRL(addrh,addrl)地址单元中读出COUNT(count)个数据存放到单片机R0(buf)指定的地址单元中.(括号中为C语言变量)汇编: (会用到上面给出的IIC驱动子程序以及定义的一些变量和接口)ADDRH EQU 13H ADDRL EQU 14H ;定义读写AT24C64的首地址STOR1: MOV COUNT,#4 ;读出入的字节数 MOV ADDRH,#xx ; 读入的AT24C64的地址字 MOV ADDRL,#xx LCALL LDDAT ; 从at24c64中读数据;/*#从at24c64中读数据#; 入口参数:LDDAT: LCALL IIC_ST ;STARTMOV A,#0A0H ;对器件进行写LCALL IIC_WB ;虚写操作器件寻址00H(第一片AT24C64)JB PSW.5,LDDATMOV A,ADDRH LCALL IIC_WB ;JB PSW.5,LDDATMOV A,ADDRL LCALL IIC_WB ;虚写存储单元地址JB PSW.5,LDDAT ;以上为先初始化一个读数据地址 LCALL IIC_ST ;STARTMOV A,#0A1HLCALL IIC_WB ;读操作器件寻址00H(第一片AT24C64)JB PSW.5,LDDAT MOV R7,COUNT CJNE R7,#01,LD01 LJMP LDDAT1LD01: DEC R7LDDAT0: LCALL IIC_RB ;现行地址读(0000H) MOV R0,A INC R0 DJNZ R7,LDDAT0LDDAT1: LCALL IIC_RL ;读最后一字节,读完后给AT24C64发停止信号 MOV R0,A inc r0 LCALL IIC_SP;停止信号 RETC语言:unsigned char count=0x04;unsigned char addrh=0xxx;unsigned char addrl=0xxx;unsigned char r_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 青苗班培训总结
- 老年智能机培训
- 防疫歌曲教学课件
- 暖通施工技术试题及答案
- 电气自动化技术专业试题及答案
- 建设银行2025东营市秋招笔试综合模拟题库及答案
- 邮储银行2025金融科技岗笔试题及答案吉林地区
- 邮储银行2025宣城市秋招笔试专业知识题专练及答案
- 2025年3D打印技术的家具制造应用
- 邮储银行2025南通市秋招笔试专业知识题专练及答案
- 2025江西吉安庐陵新区招聘社区工作者(专职网格员)招聘22人考试参考试题及答案解析
- 2025四川蜀道建筑科技有限公司招聘16人考试参考试题及答案解析
- 芯片研发流程管理办法
- 2025-2026学年广美版(2024)小学美术二年级上册教学计划及进度表
- 电子工程师知识培训课件
- 2025年手电筒行业研究报告及未来行业发展趋势预测
- 设备使用与保养培训课件
- 浙江省中考科学说理题训练及答题技巧
- 兵团连队职工考试试题及答案解析
- 假如我变成了班主任课件
- 首尔之春影视解读
评论
0/150
提交评论