打印

关于寄存器赋值的问题

[复制链接]
3052|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ksslx|  楼主 | 2007-10-18 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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 你弄成汇编你就知道了.要通过中间寄存器

使用特权

评论回复
5
ayb_ice| | 2007-10-18 13:43 | 只看该作者

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

程序员没有必须计算出确切值,这些留给编译器去处理。。。
估计LZ写程序经验不多。。。

使用特权

评论回复
6
ksslx|  楼主 | 2007-10-18 16:04 | 只看该作者

还是晕!

如题!

使用特权

评论回复
7
ayb_ice| | 2007-10-18 16:23 | 只看该作者

SYSCLK=?...

使用特权

评论回复
8
ksslx|  楼主 | 2007-10-18 17:14 | 只看该作者

回楼上的

SYSCLK为22.1184MHZ

使用特权

评论回复
9
ayb_ice| | 2007-10-18 17:18 | 只看该作者

"#define SYSCLK 22.1184"是这样吗?

使用特权

评论回复
10
ksslx|  楼主 | 2007-10-18 17:31 | 只看该作者

是的

使用特权

评论回复
11
ksslx|  楼主 | 2007-10-18 17:35 | 只看该作者

ayb_ice!!!

能帮忙解释一下是怎么回事嘛?我比较愚钝...  谢谢!

使用特权

评论回复
12
linqing171| | 2007-10-18 17:44 | 只看该作者

这个没有错误??

ADC0CF = (SYSCLK/25000000) << 4;
转换成汇编应该是 ADC0CF=0 吧. 编译器看看SYSCLK/25000000=0,整数除整数,结果就是整数,不到1当然就是0了.剩下的什么都没有了啊.
怀疑中啊.

使用特权

评论回复
13
ksslx|  楼主 | 2007-10-18 17:59 | 只看该作者

肯定是错的阿!

楼上说的肯定不对了...

使用特权

评论回复
14
ksslx|  楼主 | 2007-10-18 18:05 | 只看该作者

大家再帮忙想想啊!

谢拉!

使用特权

评论回复
15
ayb_ice| | 2007-10-18 18:18 | 只看该作者

随便说说

你的系统时钟都没有25M怎么会SAR=25M呢。。。
如果define SYSCLK 22.1184那么ADC0CF =0是对的,就象12L说有那样。。。
这个验证也很容易,看一下反汇编就知道了。。。
你这是什么芯片。。。

使用特权

评论回复
16
ksslx|  楼主 | 2007-10-18 19:37 | 只看该作者

回复楼上的

我的芯片是C8051F060

使用特权

评论回复
17
ayb_ice| | 2007-10-19 08:07 | 只看该作者

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

使用特权

评论回复
18
5141314| | 2014-4-22 10:29 | 只看该作者
我觉得计算结果应该是0;我最近也在用060

使用特权

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

本版积分规则

35

主题

105

帖子

0

粉丝