请教单片机高手,关于TLC549数据处理的问题~~

/********************************************************************
* 名称 : AD_Change(void)
* 功能 :
* 输入 : 无
* 输出 : temp (电压值)
***********************************************************************/
uchar AD_Change(void)
{
uchar i,temp = 0;
AD_In = 0;
_nop_();
_nop_();
CS = 0;
_nop_();
_nop_();
_nop_();
_nop_();
if(AD_Out == 1) temp += 1;
for(i=0; i<8; i++) //循环读8位数据
{
AD_In = 1;
_nop_();
_nop_();
AD_In = 0;
_nop_();
_nop_();
if(i != 7)
{
temp = temp << 1;
if(AD_Out == 1) temp += 1;
}
}
CS = 1;
return temp;
}
其中:temp = temp << 1;
if(AD_Out == 1) temp += 1;有什么用呢???

以串口的形式得到的数据是一位一位传的, temp<<=1的意思是temp像左移动一位 就是高位先传 传输的是一个8位数据 我打个比方 比如AD传来的数是0X44就是01000100 那么从高位到低位 AD_OUT 是依次得到的数据是0,1,0,0,0,1,0,0 首先接收的是最高位0 因为是0 所以不执行+1 之后temp像左移动一位 下面接收的是1 temp就+1 这时temp的值是00000001 注意 1前面的那个0是最高位0 依次循环就得到了 temp=01000100也就是0x44 你的那个程序进入for循环读的是余下7位数据 并不是8位
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-07

这些题都是基础的,你好好看书,做题应该是没有问题的,而且单片机是进行数字电路设计的基础,绝对不能偷懒的。
相似回答