- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
I2C 总线操作
2010-11-01 11:32:44
编程:
定义:
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1
sbit SCL=P1A0;
sbit SDA=PM1;
其实在调用函数时,真正需要用到的是如下两个函数:
void WriteI2C(unsigned char *Wdata,unsigned char RomAddress,unsigned char number)
写三要素:写什么?写到哪里?写几位?
如:Writel2C(addw,0x00,8);写ADDW 指针的数据,到以0X00开始的空间,连
续写 8 位。
void Readl2C(unsigned char *RamAddress,unsigned char RomAddress,un signed char bytes)
读三要素:放到哪里?从哪里开始读?读几位?
如: Readl2C(addr,0x00,1); 从 0X00 单元读入 1 位,放到 ADDR 指针指向的单 片机中。
当然,从哪里读,需要一个数组空间,读完以后也需要一个数组空间,可以如下 定义:
unsigned char writeByte[8]={0xC0,0x34,0x12,0x11,0x22,0x01,0x00,0x00};// 写 8 个字节 USB 数据 ID
unsigned char readByte[8];
为了方便使用,定义指向数组的指针:
unsigned char *addw;
unsigned char *addr;
addw=writeByte;
addr=readByte;
当然也可以设置读写的标记,当 write==1 时,可实现读写。 if(write==1)
{}
下面是 IIC 通信协议程序:
void DelayMs(unsigned int number)
{
unsigned char temp;
for(;number!=0;number--,DOG=!DOG)
{
for(temp=112;temp!=0;temp--)
{
/************************************************************************* void Start()
{
SDA=1;
DelayMs(1);
SCL=1;
DelayMs(1);
SDA=0;
DelayMs(1);
SCL=0;
DelayMs(1);
}
/************************************************************************* void Stop()
{
SCL=0;
DelayMs(1);
DelayMs(1);
SCL=1;
DelayMs(1);
SDA=1;
DelayMs(1);
}
/************************************************************************* void Ack()
{
SDA=0;
DelayMs(1);
SCL=1;
DelayMs(1);
SCL=0;
DelayMs(1);
SDA=1;
DelayMs(1);
}
void NoAck()
{
SDA=1;
DelayMs(1);
SCL=1;
DelayMs(1);
SCL=0;
DelayMs(1);
}
/************************************************************************* bit TestAck()
{
bit ErrorBit;
SDA=1;
DelayMs(1);
SCL=1;
DelayMs(1);
ErrorBit=SDA;
DelayMs(1);
DelayMs(1);
return(ErrorBit);
}
/*************************************************************************
bit Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input0x80);
DelayMs(1);
SCL=1;
DelayMs(1);
SCL=0;
DelayMs(1);
input=input1;
}
return 1;
}
void WriteI2C(unsigned char *Wdata,unsigned char RomA
原创力文档


文档评论(0)