1、单片机实验报告十一曲 靖 师 范 学 院 物 理 系单 片 机 原 理 及 接 口 技 术实 验 报 告实验题目:IIC实验专 业:电子信息科学与技术 班级学号:2014123102姓 名:刘林军组 别:A组实验室时间:2016 年 12 月 2 日预习报告:实验目的及要求了解IIC总线的基本原理内容,掌握IIC总线的实验原理。实验仪器及用具单片机实验板两块,程序下载线一根,计算机一台。需要安装Protel99,KeilC51或伟福6000,Easy51Pro等软件。实验原理及内容:IIC总线是一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。IIC总线只有
2、两根双向信号线,一根是数据线SDA,一根是时钟线SCL。IIC总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。每个接到IIC总线上的器件都有唯一的地址。在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,IIC总线要通过总线仲裁,以决定由哪一台主机控制总线。IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。24C01/02/04/08/016是低工作电压的1k/2k/4k/8k/16k位串行电可擦除只读存储器。其结构框图如下:器件操作:(1)时钟及数据传输:SDA引脚
3、通常被外围器件拉高。SDA引脚的数据应在 SCL 为低时变化;当数据在SCL 为高时变化,将视为下文所述的一个起始或停止命令。(2)起始命令:当 SCL 为高,SDA由高到低的变化被视为起始命令,必须以起始命令作为任何一次读/写操作命令的开始。(3)停止命令:当 SCL为高,SDA 由低到高的变化被视为停止命令,在一个读操作后,停止命令会使 EEPROM 进入等待态低功耗模式。(4)应答:所有的地址和数据字节都是以 8 位为一组串行输入和输出的。每收到一组 8 位的数据后,EEPROM都会在第9 个时钟周期时返回应答信号。每当主控器件接收到一组8 位的数据后,应当在第9 个时钟周期向EEPRO
4、M 返回一个应答信号。收到该应答信号后,EEPROM 会继续输出下一组8 位的数据。若此时没有得到主控器件的应答信号,EEPROM 会停止读出数据,直到主控器件返回一个停止命令来结束读周期。(5)等待模式:24C01/02/04/08/16特有一个低功耗的等待模式。可以通过以下方法进入该模式:(a)上电 (b)收到停止位并且结束所有的内部操作后。(6)器件复位:在协议中断、下电或系统复位后,器件可通过以下步骤复位:a.连续输入 9 个时钟;b.在每个时钟周期中确保当SCL 为高时SDA 也为高;c.建立一个起始条件。实验程序:#include#define uchar unsigned cha
5、r#define uint unsigned intuchar dispbitcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar dispbuf4,dispbuf04; sbit scl =P24;sbit sda =P25;void Delay(unsigned int m) unsigned int i,j; for (i=0; im; i+) for(j=0; j125;j+) ; void delaym(uchar delaym_temp) uchar i; for(i=0;idelaym_temp;i+);void
6、 Display() P1=dispbitcodedispbuf3; P2=0x01; Delay(1); P1=0xff; P1=dispbitcodedispbuf2; P2=0x02; Delay(1); P1=0xff; P1=dispbitcodedispbuf1; P2=0x04; Delay(1); P1=0xff; P1=dispbitcodedispbuf0; P2=0x08; Delay(1); P1=0xff; void sta(void) delaym(10); sda=1; delaym(10); scl=1; delaym(10); sda=0; delaym(10
7、); scl=0;void stop(void) delaym(1); sda=0; /delaym(1); scl=1; delaym(1); sda=1; delaym(1); scl=0;uchar cack(void) uchar k; k=0x00; sda=1; scl=1; if(sda=1)k=0xff; scl=0; return k;void mnack(void)/ sda=1; delaym(1); scl=1; delaym(1); scl=0; delaym(1); sda=0;void wrbyt(uchar date_w24) uchar i,j; j=0x80
8、; for(i=0;i1; uchar rdbyt(void) uchar i,j; j=0x00; for(i=0;i8;i+) sda=1; scl=1; if(sda=0) j=j&0xfe; else j=j|0x01; if(i!=7)j=j1; scl=0; return j;main(void) uchar num,num1; dispbuf00=6; dispbuf01=1; dispbuf02=0; dispbuf03=2; for(num=0;num4;num+) sta(); wrbyt(0xa0);/24C02 if(cack()!=0)break; wrbyt(num
9、);/ if(cack()!=0)break; wrbyt(dispbuf0num); if(cack()!=0)break; stop(); Delay(20); while(1) for(num1=0;num14;num1+) sta(); delaym(1); wrbyt(0xa0); delaym(1); if(cack()!=0)break; wrbyt(num1); delaym(1); if(cack()!=0)break; sta(); wrbyt(0xa1); if(cack()!=0)break; dispbufnum1=rdbyt(); mnack(); stop();
10、/Delay(20); Display(); 教师签字: 年 月 日实验结果和讨论:在SCL输入时钟信号的上升沿将数据送入EEPROM器件,并在时钟的下降沿将数据读出,SDA引脚可实现双向串行数据传输。该引脚为开漏输出,可与其他多个开漏输出器件或开集电极器件线相连。24C01/02/04/08/16具有用于硬件数据写保护功能的引脚,当该引脚接GND时,允许正常的读写操作,当该引脚接VCC时,芯片启动写保护功能。实验中,当 SCL 为高,SDA由高到低的变化被视为起始命,当 SCL为高,SDA 由低到高的变化被视为停止命令。在起始信号发生后,总线就处于被占用的状态;在终止信号发生后,总线就处于空闲状态。成绩评定预习25分实作25分程序编写40分讨论10分总分100分 教师签字: 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1