打印

AD转换的位

[复制链接]
1988|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
看见未来|  楼主 | 2012-2-29 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
while(ADGO) ;
adres=( ((unsigned int)ADRESH) << 8)+ADRESL;
adres=((long)adres*5000/1023);
DisplayData(adres);  // 显示一次的时间远远大于25us
ADGO=1;
这是8位pic的AD转换部分程序。我想问的是ADRESH不是8位的吗?怎么还能左移8位?假如ADRESH的低两位保存AD转换的高两位,这样的话意思就是讲ADRESH转成10位的,但是ADRESH本身是8位的,怎么还能左移8位得到想要的数值呢?
沙发
Ryanhsiung| | 2012-3-1 08:31 | 只看该作者

ADRESL是低8位,ADRESH是高2位,所以要高位左移两位+低位。

你也可以选择对齐方式,将ADRESH存放高8位。这样你就可以认为转换结果为8位的!

使用特权

评论回复
板凳
yewuyi| | 2012-3-1 09:10 | 只看该作者
1、是ADRESH本身是8位的,怎么还能左移8位得到想要的数值呢?
被编译器执行了强制类型转换后扩展为整型参与计算了。
2、1023尽量改成1024,这样计算会方便很多。

使用特权

评论回复
地板
看见未来|  楼主 | 2012-3-1 10:07 | 只看该作者

ADRESL是低8位,ADRESH是高2位,所以要高位左移两位+低位。

你也可以选择对齐方式,将ADRESH存放高8位。这样你就可以认为转换结果为8位的!
Ryanhsiung 发表于 2012-3-1 08:31

这个我知道。举个例子,两个容器,容量都只有8,其中一个装了2个,一个装了8个,但是我需要一个10的东西,所以就需要把其中装了2个的的容器变成容量为10,然后把这两个东西移到最左边,把另外8个东西装进来。有点乱哈!
问题是,容量是8的容器怎么就变成容量是10(16)了,也就是ADRESH是8位的,怎么还能左移8位呢?

使用特权

评论回复
5
看见未来|  楼主 | 2012-3-1 10:09 | 只看该作者
3# yewuyi
整型是2个字节,16位的。所以这个强制转换就是这个作用(将ADRESH强制转换成16位的),对吗?

使用特权

评论回复
6
tmark| | 2012-3-1 10:13 | 只看该作者
学习

使用特权

评论回复
7
kvdong| | 2012-3-1 10:23 | 只看该作者
3# yewuyi  
整型是2个字节,16位的。所以这个强制转换就是这个作用(将ADRESH强制转换成16位的),对吗?
看见未来 发表于 2012-3-1 10:09


使用特权

评论回复
8
yewuyi| | 2012-3-1 11:05 | 只看该作者
3# yewuyi  
整型是2个字节,16位的。所以这个强制转换就是这个作用(将ADRESH强制转换成16位的),对吗?
看见未来 发表于 2012-3-1 10:09


呵呵,C语言的基础知识就不要再讲了吧?

ADRESH本身是8位的,强制转换一般是引入临时变量。

使用特权

评论回复
9
看见未来|  楼主 | 2012-3-1 11:40 | 只看该作者
8# yewuyi
很多时候我猜测是这样的,但是不敢肯定,所以就网上问问。明白了,谢谢哈。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:loser

17

主题

1073

帖子

1

粉丝