MSP430技术william hill官网
直播中

huhao0223

9年用户 9经验值
擅长:测量仪表 EMC/EMI设计 处理器/DSP
私信 关注
[问答]

I2C的通信问题

#include
#define uchar unsigned char
#define slavewriteaddr 0x90  //定义从机写控制字节
#define slavereadaddr 0x91   //定义从机读控制字节
typedef unsigned char uint8
;uint8 date;
***it SDA=P2^0;               //定义I2C通信的数据线
***it SCL=P2^1;               //定义I2C通信的时钟线
***it DS1302=P2^4;            //定义DS1302的复位引脚
void delay(uchar x)     //延时xms函数
{
uchar i,j;
for(i=x;i>0;i--)
   for(j=110;j>0;j--);
}
void init_ser()        //串口初始化,设置通信速率9600
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET1=0;
}
void I2C_start()       //I2C起始信号
{
SCL=1;
delay(1);
SDA=1;
delay(1);
SDA=0;
delay(1);
SCL=0;
}
void I2C_init()       //I2C初始化信号
{
SDA=1;
delay(1);
SCL=1;
delay(1);
}
void I2C_stop()       //I2C结束信号
{
SDA=0;
delay(1);
SCL=1;
delay(1);
SDA=1;
delay(1);
SCL=0;
delay(1);
}
uint8 I2C_writebyte(uint8 y)      //I2C写(发送)一个字节,y为待发送的字节数据
{
uchar i;
for(i=0;i<8;i++)
{
  SCL=0;
  delay(1);
  if(bit(y&0x80))
  SDA|=0x01;
  else
  SDA&=0xfe;
  delay(1);
  SCL=1;
  delay(1);
  y<<=1;
}
SDA=1;
delay(1);
SCL=1;
delay(1);
SDA=0;
delay(1);
SCL=0;
delay(1);

}
uchar I2C_readbyte()            //I2C读(接收)一个字节 ,y用于储存读到的字节数据
{
uchar i;
uint8 y;
for(i=0;i<8;i++)
{
  SDA=1;                            //释放数据总线
  SCL=0;
  y<<=1;
  if(SDA)
   y|=0x01;
  delay(1);
  SCL=1;
}
return y;
SCL=0;
delay(1);
SDA=1;
delay(1);
SCL=1;
delay(1);
SCL=0;
delay(1);

}
uchar readtype(uchar addr)          //I2C从PCF8591的某个通道读取数据
{
I2C_start();
I2C_writebyte(slavewriteaddr);
delay(1);
I2C_writebyte(addr);
delay(1);
I2C_start();
I2C_writebyte(slavereadaddr);
delay(1);
date=I2C_readbyte();
I2C_stop();
return date;
}
void UART_send(uint8 date)            //I2C从PCF8591读到的数据发送到串口缓存
{
SBUF=date;
while(!ti);
TI=0;
}
void main()                           //主函数
{
I2C_init();
init_ser();
DS1302=0;
while(1)
{
readtype(0x42);                       //从PCF8591通道2读取数据,并设置串口输出使能和单通道输入
UART_send(date);
delay(100);
}
}

各位大虾,现在求助啊
我做串口调试时,发现收到的总是ff,求各位大神帮忙解答下,万分感激

回帖(7)

曲终人散

2016-10-5 17:55:44
问题是什么呀,我分享过一个i2c的帖子,有源代码,你可以去看看
1 举报

huhao0223

2016-10-6 10:29:28
大虾,文件就是下载到板子上,串口收到的全是ff,芯片地址也是正确的,我都搞了两天了还没搞出来,疑惑呀,希望大虾指点指点下,万分感谢(^o^)/~
举报

huhao0223

2016-10-6 10:32:36
@曲终人散  怎么没看到说的I2C的帖子,谢谢大虾了
举报

huhao0223

2016-10-6 11:59:46
引用: @曲终人散@ 发表于 2016-10-5 17:55
问题是什么呀,我分享过一个i2c的帖子,有源代码,你可以去看看

大虾,文件就是下载到板子上,串口收到的全是ff,芯片地址也是正确的,我都搞了两天了还没搞出来,疑惑呀,希望大虾指点指点下,万分感谢(^o^)/~
举报

曲终人散

2016-10-6 13:34:40
引用: huhao0223 发表于 2016-10-6 11:59
大虾,文件就是下载到板子上,串口收到的全是ff,芯片地址也是正确的,我都搞了两天了还没搞出来,疑惑呀,希望大虾指点指点下,万分感谢(^o^)/~

我的51学习之IIC/I2C
https://bbs.elecfans.com/jishu_941108_1_1.html
(出处: 中国电子技术william hill官网 )
你参考一下这个帖子
举报

huhao0223

2016-10-7 18:32:25
引用: @曲终人散@ 发表于 2016-10-6 13:34
我的51学习之IIC/I2C
https://bbs.elecfans.com/jishu_941108_1_1.html
(出处: 中国电子技术william hill官网 )

谢谢大虾了,以后还有很多问题请教呢
举报

张君

2016-11-11 14:28:29
                          
举报

更多回帖

发帖
×
20
完善资料,
赚取积分