1 / 8
文档名称:

IIC驱动 IO模拟.doc

格式:doc   大小:245KB   页数:8页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

IIC驱动 IO模拟.doc

上传人:xunlai783 2017/12/18 文件大小:245 KB

下载得到文件列表

IIC驱动 IO模拟.doc

相关文档

文档介绍

文档介绍:QPSK
STV0903 TUNER STV6110 驱动设计
IIC 理论
MEGA128 模拟IIC时序控制QPSK 中的STV0903 STV6110
STV0903 STV6110 连接图
IIC时序理论
先看下STV0903写时序图
1)起总线
先将SCL、SDA拉高,然后维持SCL为高先将SDA拉低参考代码如下:
void Start(void)
{
SBI(PORTD,SAA7113_DATA);
SBI(PORTD,SAA7113_CLK);
IIC_delay();
CBI(PORTD,SAA7113_DATA);
IIC_delay();
CBI(PORTD,SAA7113_CLK);
IIC_delay();
}
2)停总线
先将SCL、SDA拉低,然后先拉高SCL,维持SCL为高时拉高SDA
参考代码:
void Stop(void)
{
CBI(PORTD,SAA7113_DATA);
CBI(PORTD,SAA7113_CLK);
IIC_delay();
SBI(PORTD,SAA7113_CLK);
IIC_delay();
SBI(PORTD,SAA7113_DATA);
IIC_delay();
}
3)写总线
在写总线时将SDA设置为输出,参考代码:
void write_byte(unsigned char data)
{
uchar m,tmp;
SBI(SAA7113_DDR,SAA7113_DATA);
for(m = 0; m < 8; m++)
{
if(data & 0x80)
SBI(PORTD,SAA7113_DATA);
else
CBI(PORTD,SAA7113_DATA);
IIC_delay();
SBI(PORTD,SAA7113_CLK);
IIC_delay();
data = data<<1;
CBI(PORTD,SAA7113_CLK);
}
IIC_delay();
saa7113_ack();
IIC_delay();
}
4)应答
应答由被控制芯片回应过来,在此时SDA应该设置为输入等待ACK, 在CLK第九个脉冲时,CLK为高电平,而SDA为一个低电平在表示收到器件的一个ACK应答。。
参考代码:
void saa7113_ack()
{
uchar tmp,m;
CBI(DDRD,SAA7113_DATA);

SBI(PORTD,SAA7113_CLK);
for(m=0;m<10;m++)
{
IIC_delay();
tmp = PIND;
tmp &=0x02;
if(tmp == 0)
break;
}

CBI(PORTD,SAA7113_CLK);
SBI(DDRD,SAA7113_DATA);
}
5)读时序
读芯片的数据时SDA应该设置为输入,
参考代码:
uchar read_byte(void)
{
uchar m;
uchar tmp1 = 0;
uchar