I2C总线读写程序通用.doc_第1页
I2C总线读写程序通用.doc_第2页
I2C总线读写程序通用.doc_第3页
I2C总线读写程序通用.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档/=头文件加载=#include /加载52系列单片机头文件/=端口声明=sbit CLK=P36; /74hc574时钟信号线sbit G=P24; /74hc574使能sbit IIC_SDA=P26; /声明IIC总线的数据线接在单片机的P2.5端口。sbit IIC_SCL=P25; /声明IIC总线的时钟线接在单片机的P2.7端口。unsigned char tabl=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0BF,0x8C;/0,1,2,3,4,5,6,7,8,9,-,P/=函数声明=void display(unsigned char aa);void delay(unsigned int t);void delay_IIC(void);void IIC_Init(void);void IIC_start(void);void IIC_stop(void);bit IIC_Tack(void);void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data);unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Waddr);void IIC_write_byte(unsigned char Data);unsigned char IIC_read_byte(void);/=主函数=void main() /主函数unsigned char Data=2,addr=0x01; /-系统初始化- IIC_Init();/初始化IIC总线。 /P1=0x7f;/LED8先亮。 while(1) /死循环 IIC_single_byte_write(0xa0,0x02,Data);/保存LED的状态 delay(50000);/延时约0.5S Data=IIC_single_byte_read(0xa0,0x02);/读出LED的状态if(Data10)Data+;elseData=0;display(Data);delay(50000);/延时约0.5S /=功能子函数=void delay(unsigned int t)/延时函数 while(t)t-; /延时循环计数/-void delay_IIC(void) /IIC总线限速延时函数。/该函数是空函数,延时4个机器周期。;/-void IIC_Init(void)/IIC总线初始化函数 IIC_SDA=1;/释放IIC总线的数据线。 IIC_SCL=1;/释放IIC总线的时钟线。/-void IIC_start(void)/IIC总线产生起始信号函数 IIC_SDA=1;/拉高数据线 IIC_SCL=1;/拉高时钟线 delay_IIC(); IIC_SDA=0;/在时钟线为高电平时,拉低数据线,产生起始信号。 delay_IIC(); IIC_SCL=0;/拉低时钟线/-void IIC_stop(void) /IIC总线产生停止信号函数 IIC_SDA=0;/拉低数据线 delay_IIC(); IIC_SCL=1;/拉高时钟线。 delay_IIC(); IIC_SDA=1;/时钟时线为高电平时,拉高数据线,产生停止信号。 delay_IIC();/-bit IIC_Tack(void)/接收应答信号函数 bit ack;/定义一个位变量,来暂存应答状态。 IIC_SDA=1;/释放数据总线,准备接收应答信号。 delay_IIC(); IIC_SCL=1;/拉高时钟线。 delay_IIC(); ack=IIC_SDA;/读取应答信号的状态。 delay_IIC(); IIC_SCL=0;/拉低时钟线。 delay_IIC(); return ack;/返回应答信号的状态,0表示应答,1表示非应答。/-void IIC_write_byte(unsigned char Data)/向IIC总线写入一个字节的数据函数 unsigned char i; for(i=0;i8;i+)/有8位数据 IIC_SDA=Data&0x80;/写最高位的数据 delay_IIC(); IIC_SCL=1; /拉高时钟线,将数写入到设备中。 delay_IIC(); IIC_SCL=0;/拉低时钟线,允许改变数据线的状态 delay_IIC(); Data=Data1;/数据左移一位,把次高位放在最高位,为写入次高位做准备 /-unsigned char IIC_read_byte()/从IIC总线读取一个字节的数据函数 unsigned char i; unsigned char Data; /定义一个缓冲寄存器。 for(i=0;i8;i+)/有8位数据 IIC_SCL=1;/拉高时钟线,为读取下一位数据做准备。 delay_IIC(); Data=Data1;/将缓冲字节的数据左移一位,准备读取数据。 delay_IIC(); if(IIC_SDA)/如果数据线为高平电平。 Data=Data|0x1;/则给缓冲字节的最低位写1。 IIC_SCL=0;/拉低时钟线,为读取下一位数据做准备。 delay_IIC(); return Data;/返回读取的一个字节数据。/-void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data)/向任意地址写入一个字节数据函数 IIC_start();/产生起始信号 IIC_write_byte(Daddr);/写入设备地址(写) IIC_Tack();/等待设备的应答 IIC_write_byte(Waddr);/写入要操作的单元地址。 IIC_Tack();/等待设备的应答。 IIC_write_byte(Data);/写入数据。 IIC_Tack();/等待设备的应答。 IIC_stop();/产生停止符号。/-unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Waddr)/从任意地址读取一个字节数据函数 unsigned char Data;/定义一个缓冲寄存器。 IIC_start();/产生起始信号 IIC_write_byte(Daddr);/写入设备地址(写) IIC_Tack();/等待设备的应答 IIC_write_byte(Waddr);/写入要操作的单元地址。 IIC_Tack();/等待设备的应答。 IIC_start();/产生起始信号 IIC_write_byte(Daddr+1);/写入设备地址(读)。 IIC_Tack();/等待设备的应答。 Data=IIC_read_byte();/写入数据。 IIC_stop

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论