求高手详细解释一下这段单片机程序,是用pcf8591 实现ad转换的。

求高手详细解释一下这段单片机程序,是用pcf8591 实现ad转换的。
#include "pcf8591.h"

void iic_start(void)
{
SDA = 1;
_nop_();
SCL = 1;
somenop;
SDA = 0;
somenop;
SCL = 0;
}

void iic_stop(void)
{
SDA = 0;
_nop_();
SCL = 1;
somenop;
SDA = 1;
}

void iic_ack(bit ackbit) 具体解释这段
{
if(ackbit)
SDA = 0;
else
SDA = 1;
somenop;
SCL = 1;
somenop;
SCL = 0;
SDA = 1;
somenop;
}

bit iic_waitack(void) 具体解释这段

{
SDA = 1;
somenop;
SCL = 1;
somenop;
if(SDA)
{
SCL = 0;
iic_stop();
return 0;
}
else
{
SCL = 0;
return 1;
}
}

void iic_sendbyte(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byt&0x80)
SDA = 1;
else
SDA = 0;
somenop;
SCL = 1;
byt <<= 1;
somenop;
SCL = 0;
}
}

unsigned char iic_recbyte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++)
{
SCL = 1;
somenop;
da <<= 1;
if(SDA)
da |= 0x01;
SCL = 0;
somenop;
}
return da;
}

void delay(unsigned char t)
{
unsigned char i;
while(t--)
{
for(i=0;i<112;i++);
}
}

unsigned char adc_pcf8591(void)
{
unsigned char temp;

iic_start();
iic_sendbyte(0x91);
iic_waitack();
temp = iic_recbyte();
iic_ack(0);
iic_stop();

return temp;
}
想理解一个芯片,首先要先仔细看用户手册,在网上搜它的手册,然裤液后重点看时序图那一块,你就会明白了,还要要理解IIC总线中的巧羡SDA和SCL,一个数据,一个时钟线,void iic_ack(bit ackbit)和bit iic_waitack(void) 分别胡宽物是应答和等待应答。void iic_start(void)是开始,stop是结束,时序图里都有写,一般是在SCL拉低的时候,才能改变数据总线,unsigned char iic_recbyte(void)是接受字节数,你自己对照手册好好看吧 顺带看看IIC总线 ,时间仓促,希望能帮到你一些。

void iic_ack(bit ackbit)
{
if(ackbit) 如果收到应答
SDA = 0;数据为0
else
SDA = 1;
somenop;延时
SCL = 1;拉高时钟线
somenop;延时
SCL = 0;拉低时钟
SDA = 1;拉高数据线
somenop;
}
这就是一个IIC总线驱动的程序。其实像这类驱动程序可以不必深究其工作过程,橡友返就是梁饥按时序访问而已,你只告搭要把此程序复制过来,把其中的接口变量搞清楚就好。
通过设置单片机内部的转换器来实现功能的,首先要看看使用迅租说明,就是该亩正兆芯片的详细资料里面包含了清毁转换器的设置说明
不用也可以
← 上一篇: 下一篇: →