版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、试验目的:
试验八I2C通信协议12、加深学生对I2C3、加强学生对模块化编程的理解;二、试验环境:1、硬件环境:PC机一台、单片机试验板一块、母头串口穿插线、USB电源线;2、软件环境:keiluVision2集成开发环境;STC-ISP下载上位机软件;三、试验原理:要学会I2C通信协议的编程,关键是要看懂并把握其时序图,理解对I2C通信协议相关子程序的试验编写。I2C通信协议的总线时序图如下所示:I2C总线时序图I2C相关子程序的具体介绍1SCL为高电寻常,SDA由高电平向低电平跳变,开头传送数据。2、完毕信号:SCL为高电寻常,SDA由低电平向高电平跳变,完毕传送数据。起始信号和完毕信号的时序图如下所示:起始信号的流程如下:
起始信号和完毕信号的时序图1SCLSDA0.6us-4us;2SDA0.6us-4us;3完毕信号的流程如下:1SCL置高电平,SDA0.6us-4us2SDA1.2-4us;IC8bitIC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,依据实际状况作出是否连续传递信号的推断。假设未收到应答信号,由推断为受控单元消灭故障。应答信号的时序图如下所示:应答时序图应答时序图发送时的应答信号;**********应答信号**********ACK: SETB SDA ;数据线置高SETB SCL ;时钟线置高ACALL DELAYJB SDA,$ ;等待数据线变低ACALL DELAYCLR SCL ;时钟线置低RET留意:这里假设数据线始终为高将进入死循环,所以一般我们都会在这做一个容错的处理。具体的程序如下:ACK:MOVR4,#00HSETBSDASETBSCLLOP0:JNBSDA,LOPDJNZR4,LOP0 ;255次LOP:ACALLDELCLRRETSCL接收时的应答信号ACK1: CLRSDA;数据线置低SETBNOPNOPSCL;时钟线置高CLRSCL;时钟线置低SETBRETSDA;数据线置高3开头时钟线置低开头时钟线置低累加器左移一位数据传送一个应答信号周期时钟线置高完毕Y8位信号完否?N6-22发送子程序流程图〔2〕一字节数据接收子程序,流程如下:开头开头数据线置高时钟线置高数据传送累加器左移一位时钟线置低8位信号完否NY完毕6-23接收子程序流程图7、写操作字节写流程如下:
6-24字节写时序图开头信号开头信号写器件命令应答信号器件地址应答信号数据地址应答信号停顿信号延时完毕6-25字节写的流程图页写图6-26页写时序图页写流程如下:开头信号开头信号写器件命令应答信号器件地址应答信号写数据字节初值7数据地址应答信号数据地址-1数据写完否?NY停顿信号8、读操作选择读图6-28选择读时序图6-29NOACK时序图连续读图6-30连续读时序图四、试验原理图:I2C总线电路图五、试验例题:例题一编写一程序,实现I2C24C08来记录单片机复位或者开机的次数,并将复位或者开机的次数显示在数码管上。程序分析本程序利用单片机复位时程序总是从0000H24C08的一124c08的对应单元。程序代码;**************************************************************************;****程序功能:实现对24C08的字节读写,用24C08记录开机次数,显示在数码管上;****程序编写:李代勇;****编写日期:2023/2/04;**************************************************************************;**************************************************************************;初始化数据设置;**************************************************************************SDA EQUP1.7;定义数据线为P1.7〔试验板上已固定,不行更改〕SCL EQUP1.6;定义始终线为P1.6I2C_Addr EQU10H;24C08的单元地址I2C_Data EQU12H;用于缓冲要读写的数据D_BUF0EQU55H;数码管显示缓冲区〔个位〕D_BUF1EQU56H;数码管显示缓冲区〔十位〕D_BUF2EQU57H;数码管显示缓冲区〔百位〕FLAG BIT00H ;定义标志位,确定百位是否等于001;**************************************************************************;程序段:主程序;**************************************************************************ORG 0000HLJMP STARTORG 0030HSTART: MOV SP,#70HMOV I2C_Data,#00HMOV I2C_Addr,#0FHACALL I2C_READMOV I2C_Data,A ;读出数据INCI2C_DataMOVI2C_Addr,#0FH;更数据ACALLI2C_WRITELCALL DATAEDIT ;数据加工WAIT: LCALL DISPLAY ;显示数据AJMP WAIT;**************************************************************************;函数名称:DATAEDIT;输入参数:I2C_Data;输出参数:D_BUF0,D_BUF1,D_BUF2;函数功能:处理数据,确定每一位数码管要显示的数字,; 011,1010〔010〕; 101101;**************************************************************************DATAEDIT:MOV A,I2C_DataMOV B,#100DIV ABJZ L1 ;依据百位是否等于0确定百位的显示MOV D_BUF2,A ;百位不等于0,直接显示百位的数字SETB FLAG ;百位不等于0,标志位置1AJMP NEXL1: MOV D_BUF2,#25 ;0,对百位赋一个超过段码个数的值NEX: MOV A,B ;对十位数的处理MOV B,#10DIV AB ;0确定十位的显示JZL2L3:MOVD_BUF1,A;0,0,显示十位的数字AJMPNEX1L2:JBFLAG,L3;00MOVD_BUF1,#22;0,十位赋超过段码个数的值NEX1:MOVD_BUF0,B;个位的赋值RET;**************************************************************************;函数名称:DISPLAY;输入参数:D_BUF0,D_BUF1,D_BUF2;输出参数:无;占用资源:R6,R7,R0;函数功能:将D_BUF0,D_BUF1,D_BUF2显示在数码管上;**************************************************************************DISPLAY:MOV R6,#3MOV R7,#0FEHMOV DPTR,#TABMOV R0,#D_BUF0LOPP1: MOV A,@R0MOVC A,@A+DPTRMOV P0,AMOV P2,R7LCALL DELAY5MS ;动态扫描延时,消退余辉效应INC R0MOV A,R7RL AMOV R7,ADJNZ R6,LOPP1NOPRET;**************************************************************************;函数名称:DELAY5MS;输入参数:无;输出参数:无;占用资源:60H,61H,62H;5MS〔24MHz晶振〕;**************************************************************************DELAY5MS:MOV60H,#1DDD2:MOV61H,#20DDD1:MOV62H,#248DJNZ62H,$DJNZ61H,DDD1DJNZ60H,DDD2RET;**************************************************************************;函数名称:I2C_WRITE;输入参数:I2C_Addr,I2C_data;输出参数:无;函数功能:24C08字节写,将I2Cdata24C08Address地址单元;**************************************************************************I2C_WRITE:I2C_WRITE_A:ACALL I2C_STARTMOV A,#10100000BLCALL I2C_SEND8BITLCALL I2C_ACKJC I2C_WRITE_ARS_ADDR:MOV A,I2C_AddrLCALL I2C_SEND8BITLCALL I2C_ACKJC RS_ADDRRS_DATA:MOV A,I2C_DataLCALL I2C_SEND8BITLCALL I2C_ACKJC RS_DATALCALL I2C_STOPLCALL DELAY10MSRET;**************************************************************************;函数名称:I2C_READ;输入参数:I2C_Addr;输出参数:I2C_Data;函数功能:24C0824C08的Address地址单元的内容读到I2Cdata;**************************************************************************I2C_READ:I2C_READ_A:LCALL I2C_STARTMOV A,#10100000BLCALL I2C_SEND8BITLCALL I2C_ACKJC I2C_READ_ARS_ADDR2:MOV A,I2C_AddrLCALL I2C_SEND8BITLCALL I2C_ACKJC RS_ADDR2LCALL I2C_STARTREAD_ADDR:MOV A,#10100001BLCALL I2C_SEND8BITLCALL I2C_ACKJC READ_ADDRACALL I2C_RECEIVE8BITMOV I2C_Data,AACALL I2C_ACKLCALL I2C_STOPRET;**************************************************************************;函数名称:I2C_START;输入参数:无;输出参数:无;24C08启动时序的编写;**************************************************************************I2C_START:SETBSCLSETBSDANOPNOP;TSU:STA0.6us,4usCLRSDANOPNOP;THD:STA0.6us,4usCLRSCLNOPNOPNOPRET;**************************************************************************;函数名称:I2C_STOP;输入参数:无;输出参数:无;24C08停赶忙序的编写;**************************************************************************I2C_STOP:CLR SDASETB SCLNOP ;TSU:STO0.6us,4usNOPSETB SDANOP ;TBUF的发送开头前的总线空闲时间,1.2us,4.7usNOPNOPRET;**************************************************************************;函数名称:I2C_ACK;输入参数:无;输出参数:C;24C08应答时序的编写;**************************************************************************I2C_ACK:SETB SDASETB SCLNOPNOPJB SDA,I2C_ACK0CLR CAJMP I2C_ACK_ENDI2C_ACK0:SETB CI2C_ACK_END:CLR SCLRET;**************************************************************************;函数名称:I2C_SEND8BIT;输入参数:A;输出参数:无;函数功能:24C088位数据;**************************************************************************I2C_SEND8BIT:MOV I2C_SEND8BIT_A:RLC AMOV SDA,CSETB SCLNOPNOPCLRSCLDJNZ B,I2C_SEND8BIT_ARET;**************************************************************************;函数名称:I2C_RECEIVE8BIT;输入参数:无;输出参数:A;函数功能:24C088位数据;**************************************************************************I2C_RECEIVE8BIT:MOV CLRASETB SDAI2C_RECEI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湖北科技职业学院单招职业技能考试参考题库带答案解析
- 外包服务协议(2025年IT支持)
- 2026年抚州幼儿师范高等专科学校单招职业技能笔试参考题库带答案解析
- 2026年成都艺术职业大学高职单招职业适应性测试备考试题有答案解析
- 2026年安徽工贸职业技术学院高职单招职业适应性测试模拟试题有答案解析
- 投资合作协议(2025年股权项目)
- 2026年广州体育职业技术学院单招综合素质考试备考题库带答案解析
- 2026年福建信息职业技术学院单招综合素质笔试备考试题带答案解析
- 2026年湖南城建职业技术学院单招综合素质笔试备考试题带答案解析
- 2026年黑龙江司法警官职业学院高职单招职业适应性测试备考题库有答案解析
- 计算机应用数学基础 教学 作者 王学军 计算机应用数学课件 第10章 图论
- DF6205电能量采集装置用户手册-2
- 神经内科品管圈成果汇报-提高脑卒中偏瘫患者早期自我肢体功能锻炼规范执行率
- 缺血性脑卒中静脉溶栓护理
- 电子电路基础-电子科技大学中国大学mooc课后章节答案期末考试题库2023年
- 四年级科学上册期末试卷及答案-苏教版
- 怀仁县肉牛养殖产业化项目可行性研究报告
- DB51T 2875-2022彩灯(自贡)工艺灯规范
- 主要负责人重大危险源安全检查表
- 《工程经济学》模拟试题答案 东北财经大学2023年春
- 2023-2024学年广西壮族自治区来宾市小学数学五年级下册期末自测试卷
评论
0/150
提交评论