也许是菜鸟问题~急用求高手指点

[复制链接]
2867|5
 楼主| jarvis1547 发表于 2011-10-24 21:36 | 显示全部楼层 |阅读模式
也许是菜鸟问题~急用求高手指点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;是如何运作的?怎样得出八位数据呢?

相信哥咯 发表于 2011-10-25 01:19 | 显示全部楼层
不能言语
 楼主| jarvis1547 发表于 2011-10-25 09:01 | 显示全部楼层
2# 相信哥咯 不是吧~那你之前怎么弄懂的?可以指点不?
weiyg8051 发表于 2011-10-25 15:25 | 显示全部楼层
前面移位了,+1= 最低位置位 移8次就是一个字节
meteor_lcj 发表于 2011-10-25 19:22 | 显示全部楼层
:shutup:
chunyang 发表于 2011-10-25 23:16 | 显示全部楼层
如果AD是外置的,通过IO操作读入MCU,内置ID则是自动的,结果放在MCU片内的指定寄存器中,建议楼主好好看看相关器件手册。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部