这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » F149,I2C 【求助】F149模拟I2C的问题(收不到应答)

共2条 1/1 1 跳转至

F149,I2C 【求助】F149模拟I2C的问题(收不到应答)

院士
2006-09-17 18:14:16     打赏
F149,I2C 【求助】F149模拟I2C的问题(收不到应答)



关键词: 求助     模拟     问题     不到     应答    

院士
2006-12-22 22:43:00     打赏
2楼
问 我最近在用P口模拟I2C 通信。但总是不成功。
F149 的端口模拟IIC与F169 通信。其中,F169 为从机。但是在F149总是接受不到F169 的应答信号。4.7k上拉电阻. 示波器观测输出地址信号正确.延时DELAY从1到10都试过.
调试了一星期,一点结果都没有.是不是有某些地方没注意到?请各位有过I2C经验的指点指点.

#include "MSP430x14x.h"
//P3.2 SCL
//P3.3 SDA

#define SDA_1 P3DIR &=~ BIT3 //SDA = 1
#define SDA_0 P3DIR |= BIT3 //SDA = 0
#define SCL_1 P3DIR &= ~BIT2 //SCL = 1
#define SCL_0 P3DIR |= BIT2 //SCL = 0
#define DIR_IN P3DIR &= ~BIT3 //I/O口为输入
#define SDA_IN ((P3IN >> 3) & 0x01) //Read SDA 判断是否为1

void Delay(unsigned int n)
{
unsigned int i;
for (i=0; i<n; i++) {;}
}

void Start(void) //开始
{

SDA_1;
Delay(1);
SCL_1;
Delay(2);
SDA_0;
Delay(1);
SCL_0;
Delay(1);
}

void Stop(void) //结束
{
SDA_0;
Delay(1);
SCL_1;
Delay(1);
SDA_1;
Delay(1);
SCL_0;
}

void WriteByte(unsigned char WriteData) //写一个字节
{
unsigned char i;

for (i=0; i<8; i++)
{


if (((WriteData >> 7) & 0x01) == 0x01)
{
SDA_1;
}
else
{
SDA_0;
}
SCL_1;
WriteData = WriteData << 1;
Delay(1);
SCL_0;
SDA_1;
}

}


void ReceiveAck(void)//接受应答
{

unsigned char i = 0;
Delay(10);
SDA_1;
SCL_1;
Delay(20);
DIR_IN;
while ((SDA_IN == 0x01 /*sda==1*/) && (i < 255))
{
i++;
if(i==254)//超时亮灯
{
P1DIR |= 0x01;
P1OUT |= 0x01;
}
}
SCL_0;
Delay(1);
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 |= XT2OFF;//关XT2
BCSCTL2 = SELS+SELM_2;//配置时钟
P3DIR = BIT2+BIT3;
P3OUT &= ~BIT2;//初始输出为0
P3OUT &= ~BIT3;
SCL_0;

while(1)
{
SCL_0;
Start();
WriteByte(0x91);
ReceiveAck();
Stop();
Delay(100);//观察用
}
} 1: 请参考下面资料 2: 谢谢斑竹,解决了!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]