A/D转换程序中,模拟数据是如何引入单片机内的?针对的程序如下(芯片为PCF8591),请给位帮忙指点解释,感激不尽!!
字节数据传送函数
函数原型: unsigned char RcvByte();
功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),
发完后请用应答函数。
------------------------------------------------------------------*/
unsigned char RcvByte()
{
unsigned char retc;
unsigned char BitCnt;
retc=0;
SDA=1; //置数据线为输入方式
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
SCL=0; //置时钟线为低,准备接收数据位
_Nop();
_Nop(); //时钟低电平周期大于4.7us
_Nop();
_Nop();
_Nop();
SCL=1; //置时钟线为高使数据线上数据有效
_Nop();
_Nop();
retc=retc<<1;
if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}
其中的 retc=retc<<1;
if(SDA==1)retc=retc+1;是如何运作的?怎样得出八位数据呢?
静下心来思考下就知道了。
这个是读取转换成数字的结果。
每次retc左移一位,最低位变为0,然后给最低位赋值,如果SDA为1,就赋值1,为0,就不赋值,即默认0,循环8次,刚好8位。
回复 板凳 wisology 的帖子
thanks~后来看了几遍芯片的datasheet领悟到了~