IIC驱动程序

上传人:206****923 文档编号:41773893 上传时间:2018-05-31 格式:DOCX 页数:5 大小:14.52KB
返回 下载 相关 举报
IIC驱动程序_第1页
第1页 / 共5页
IIC驱动程序_第2页
第2页 / 共5页
IIC驱动程序_第3页
第3页 / 共5页
IIC驱动程序_第4页
第4页 / 共5页
IIC驱动程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《IIC驱动程序》由会员分享,可在线阅读,更多相关《IIC驱动程序(5页珍藏版)》请在金锄头文库上搜索。

1、#include“main.h“ #include“iic.h“void delay1ms500us(void) /误差 -0.434027777778us unsigned char a,b;for(b=153;b0;b-)for(a=3;a0;a-); /延时函数 void delay(void) /误差 -0.659722222222us /IIC 通信起始信号 void iic_start(void) SCL = 1; delay(); SDA = 1; delay(); SDA = 0; delay(); SCL = 0; /IIC 通信结束信号 void iic_stop(void

2、) SCL = 0; delay(); SDA = 0; delay(); SCL = 1; delay(); SDA = 1; delay(); /应答位读取函数 /返回 0:应答位 ACK=0/返回 1:非应答位 NACK=1 bit read_ack(void) SDA = 1; delay(); SCL = 1; delay(); if(SDA) SCL = 0; iic_stop(); return 1; else SCL = 0; return 0; /主机发送应答信号 /ack=0:发送应答位 0 /ack=1:发送非应答 1 void send_ack(bit ack) if(

3、ack) SDA = 1; else SDA = 0; delay(); SCL = 1; delay(); SCL = 0; delay(); SDA = 1; delay(); /IIC 总线发送一个 8 位数据 void iic_sendbyte(uint8 dat) uint8 i; for(i = 0;i 8;i+) if(dat else SDA = 0; dat = 1; delay(); SCL = 1; delay(); SCL = 0; /IIC 总线接收一个 8 位数据 /返回读取的 8 位数据 uint8 iic_receivebyte(void) uint8 i,by

4、te = 0; for(i = 0;i 8;i+) SCL = 1; delay(); byte = 1; if(SDA) byte |= 0x01; delay(); SCL = 0; delay(); return byte; /*void h() ENLED = 0; ADDR3 = 0; ADDR0 = 0; ADDR1 = 0; ADDR2 = 0; P0 = 0xfe; */向 eeprom 指定地址写入一个 8 位数据 /addr:数据在 eeprom 中的存储地址 /dat:要发送的数据bit iic_writebyte(uint8 addr,uint8 dat) iic_st

5、art(); iic_sendbyte(CONTROL); if(read_ack()return 1; iic_sendbyte(addr); if(read_ack()return 1; iic_sendbyte(dat); if(read_ack()return 1; iic_stop(); delay1ms500us(); return 0; /从 eeprom 指定地址读取一个 8 位数据 /addr:要读取的数据在 eeprom 中的存储地址 /dat:读出数据存储在 dat 中 bit iic_readbyte(uint8 addr,uint8 *dat) iic_start()

6、; iic_sendbyte(CONTROL); if(read_ack()return 1; iic_sendbyte(addr);if(read_ack()return 1; iic_start(); iic_sendbyte(CONTROL+1); if(read_ack()return 1; *dat = iic_receivebyte(); send_ack(1); iic_stop(); return 0; /向 eeprom 中连续的存储单元连续写入 8 位数据 /addr:数据在 eeprom 中的存储地址 /len:写入数据的个数 /buf:要写入数据的首地址 bit iic_writebuf(uint8 *buf,uint8 addr,uint8 len) while(len-) if(iic_writebyte(addr+,*buf+) return 1; return 0; /从 eeprom 连续的存储单元中连续读出数据 /addr:要读取的数据在 eeprom 中的首地址 /len:读出数据的个数 /buf:读出数据要存储的首地址 bit iic_readbuf(uint8 *buf,uint8 addr,uint8 len) while(len-) if(iic_readbyte(addr+,buf+) return 1; return 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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