单片机读写24C01

上传人:cl****1 文档编号:396422860 上传时间:2024-01-01 格式:DOCX 页数:6 大小:11KB
返回 下载 相关 举报
单片机读写24C01_第1页
第1页 / 共6页
单片机读写24C01_第2页
第2页 / 共6页
单片机读写24C01_第3页
第3页 / 共6页
单片机读写24C01_第4页
第4页 / 共6页
单片机读写24C01_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《单片机读写24C01》由会员分享,可在线阅读,更多相关《单片机读写24C01(6页珍藏版)》请在金锄头文库上搜索。

1、单片机读写24C0124C16程序51单片机 2009-08-14 10:13 阅读150 评论0字号:大中小单片机读写24C0124C16程序AT89S52晶振频率为11.0592MHz指令周期:1.0852us功能说明:24C01-16 程序,能读写:24C01、24C02、24C04、24C08、24C16读出的数据送P1 口显示#include reg52.h#include intrins.h#define uchar unsigned char#define uint unsigned intsbit sda=P3A7;模拟I2C数据传送位sbit scl=P3A6;/濮拟I2C时

2、钟控制状态标志void delay1(uint z)延时为 1msuchar x,x1;for(;z0;z-)for(x=0;x114;x+)for(x1=0;x11;x1+);void delay()/5us 延时_nop_();_nop_();_nop_();void star()/开始sda=1;delay();/5us 延时scl=1;delay();/5us 延时sda=0;delay();/5us 延时void stop()停止sda=0;delay();/5us 延时scl=1;delay();/5us 延时sda=1;delay();/5us 延时void ack()/应答 u

3、char z=0;while(sda=1)&(z50)z+;条件判断,sda=1,则没有应答。如果没有应答则延时:z50, z+;后返回scl=0;delay();/5us 延时/写一个数据函数器件写地址 slave_write_address字节地址 byte_address待写入数据data_datavoid write(uchar slave_write_address,uchar byte_address,uchar data_data)/写一个数据uchar temp,temp1,i,ii;star();/ 开始for(ii=0;ii3;ii+)根据24CXX文档资料,和时序图,按顺

4、序送:器件写地址,字节地址,数据if(ii=0)temp=slave_write_address;送器件写地址temp1=slave_write_address;else if(ii=1)temp=byte_address;送字节地址temp1=byte_address;else if(ii=2)temp=data_data;送数据temp1=data_data;for(i=0;i8;i+)scl=O;delay();/5us 延时temp=temp1;temp=temp&0x80;相与后,把不相关的位清零if(temp=0x80)根据前面相与后,判断temp是否等于0x80,是则该位为1sd

5、a=1;elsesda=0;delay();/5us 延时scl=1;delay();/5us 延时scl=0;delay();/5us 延时temp1=temp11; 向左移出 1 位sda=1;delay();/5us 延时scl=1;delay();/5us 延时ack();stop();/ 停止/读一个数据函数器件写地址 slave_write_address器件读地址 slave_read_address字节地址 byte_address读出的数据data_dataread(uchar slave_write_address,uchar byte_address,uchar slav

6、e_read_address)读一个数据uchar temp,temp1,i,ii,x,data_data;star(); 开始for(ii=0;ii3;ii+)根据24CXX文档资料,和时序图,按顺序送:器件写地址,字节地址,器件读地址if(ii=0)temp=slave_write_address;送器件写地址temp1=slave_write_address;else if(ii=1)temp=byte_address;送字节地址temp1=byte_address;else if(ii=2)star(); 开始temp=slave_read_address;送器件读地址temp1=sl

7、ave_read_address;for(i=0;i8;i+) 开始读数据scl=0;delay();/5us 延时temp=temp1;temp=temp&0x80;相与后,把不相关的位清零if(temp=0x80)根据前面相与后,判断temp是否等于0x80,是则该位为1sda=1;elsesda=0;delay();/5us 延时scl=1;delay();/5us 延时scl=0;delay();/5us 延时temp1=temp11; 向左移出 1 位sda=1;delay();/5us 延时scl=1;delay();/5us 延时ack();/ 应答for(x=0;x8;x+)d

8、ata_data=data_data1; 向左移入 1 位sda=1;delay();/5us 延时scl=0;delay();/5us 延时scl=1;delay();/5us 延时if(sda=1)/判断 数据线是否是高电平data_data|=OxO1;把读到的数据或0X01/elsedata_data|=0x00;ack();/ 应答stop();/ 停止return data_data;/返回读到的数据void main()write(0xa0,0xff,0x66);向器件写一个数据:(0xa0是器件写地址;0xff是字节地址;0x66是待写入的数据)delay1(5);/写与读的时间间隔应大于5ms,取决于器件24C02的响应速度向器件读一个数据把读出的数据送P1 口显示P1=read(0xa0,0xff,0xa1);向器件读一个数据:(0xa0是器件写地址;0xff是字节地址;0xa1是器件读地址)while(1);/跳转,相当于汇编指令JUMP $/0x66=亮灭灭亮亮灭灭亮

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号