关于寄存器赋值的问题

[复制链接]
4093|17
 楼主| ksslx 发表于 2007-10-18 10:53 | 显示全部楼层 |阅读模式
  代码如下:   
ADC0CF = (SYSCLK/25000000) << 4;    // Select SAR clock frequency =~ 25MHz 转换速度 SYSCLK为22.1184MHZ
  小弟不明白:(SYSCLK/25000000)的值得出来应该是0.884736,是怎么左移4位赋值给寄存器ADC0CF的?
  希望得到各位大虾的赐教!不胜感激...
shiguo 发表于 2007-10-18 11:02 | 显示全部楼层

下面这俩个式子等价

  ADC0CF = (SYSCLK/25000000) << 4; ==ADC0CF = (SYSCLK/25000000)*16
 楼主| ksslx 发表于 2007-10-18 11:32 | 显示全部楼层

还有疑问...

楼上的说:ADC0CF = (SYSCLK/25000000) << 4; ==ADC0CF = (SYSCLK/25000000)*16,那么我还想问一句:(SYSCLK/25000000)*16得出的值是多少,这个值是怎么赋给寄存器ADC0CF的?
gjg191 发表于 2007-10-18 11:47 | 显示全部楼层

dd

这是c 你弄成汇编你就知道了.要通过中间寄存器
ayb_ice 发表于 2007-10-18 13:43 | 显示全部楼层

就是个简单的赋值语句。。。

程序员没有必须计算出确切值,这些留给编译器去处理。。。
估计LZ写程序经验不多。。。
 楼主| ksslx 发表于 2007-10-18 16:04 | 显示全部楼层

还是晕!

如题!
ayb_ice 发表于 2007-10-18 16:23 | 显示全部楼层

SYSCLK=?...

 楼主| ksslx 发表于 2007-10-18 17:14 | 显示全部楼层

回楼上的

SYSCLK为22.1184MHZ
ayb_ice 发表于 2007-10-18 17:18 | 显示全部楼层

"#define SYSCLK 22.1184"是这样吗?

 楼主| ksslx 发表于 2007-10-18 17:31 | 显示全部楼层
 楼主| ksslx 发表于 2007-10-18 17:35 | 显示全部楼层

ayb_ice!!!

能帮忙解释一下是怎么回事嘛?我比较愚钝...  谢谢!
linqing171 发表于 2007-10-18 17:44 | 显示全部楼层

这个没有错误??

ADC0CF = (SYSCLK/25000000) << 4;
转换成汇编应该是 ADC0CF=0 吧. 编译器看看SYSCLK/25000000=0,整数除整数,结果就是整数,不到1当然就是0了.剩下的什么都没有了啊.
怀疑中啊.
 楼主| ksslx 发表于 2007-10-18 17:59 | 显示全部楼层

肯定是错的阿!

楼上说的肯定不对了...
 楼主| ksslx 发表于 2007-10-18 18:05 | 显示全部楼层

大家再帮忙想想啊!

谢拉!
ayb_ice 发表于 2007-10-18 18:18 | 显示全部楼层

随便说说

你的系统时钟都没有25M怎么会SAR=25M呢。。。
如果define SYSCLK 22.1184那么ADC0CF =0是对的,就象12L说有那样。。。
这个验证也很容易,看一下反汇编就知道了。。。
你这是什么芯片。。。
 楼主| ksslx 发表于 2007-10-18 19:37 | 显示全部楼层

回复楼上的

我的芯片是C8051F060
ayb_ice 发表于 2007-10-19 08:07 | 显示全部楼层

ksslx 你回复我倒是很快,自己去验证一下嘛。。。

5141314 发表于 2014-4-22 10:29 | 显示全部楼层
我觉得计算结果应该是0;我最近也在用060
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

105

帖子

0

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