打印

单片机ACC问题?请问ACC是个变量呢还是个表达式?

[复制链接]
6732|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qisefengye|  楼主 | 2011-11-17 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dat1=ACC;//16进制转十进制
dat2=dat1/16;
dat1=dat1%16;
dat1=dat1+dat2*10;
return dat1;

上述程序中 必须把ACC付给变量dat1程序才对 而改成如下程序为什么就不对了呢?

dat1=ACC%16; //16进制转十进制
dat2=ACC/16;
dat1=dat1+dat2*10;
return dat1;

也就是说ACC直接参与运算为什么就出错了 ?ACC难道不是变量吗?比如ACC=ACC>>1  这个表达式ACC可以直接参与运算就对 宏定义中REG52.h 中不是定义了 #define ACC=0X80 了吗 ?求解答

相关帖子

沙发
chen3bing| | 2011-11-18 07:46 | 只看该作者
ACC是个寄存器。

使用特权

评论回复
板凳
ayb_ice| | 2011-11-18 07:58 | 只看该作者
ACC就是A的直接寻址方式

使用特权

评论回复
地板
delin17| | 2011-11-18 08:22 | 只看该作者
dat1=ACC%16; //16进制转十进制
dat2=ACC/16;
dat1=dat1+dat2*10;
return dat1;
第一步的实际运算已经使用到ACC了,第二步的ACC已经是被冲掉的值。
楼主,请注意看一下汇编。

使用特权

评论回复
5
ayb_ice| | 2011-11-18 08:32 | 只看该作者
在C里居然还敢这样用
会死的很快的

使用特权

评论回复
6
hotpower| | 2011-11-18 08:32 | 只看该作者
在函数中最好不要直接用ACC,因为它有规则和中间运算。

使用特权

评论回复
7
q331513266| | 2011-11-18 09:40 | 只看该作者
典型的不懂单片机结构……

使用特权

评论回复
8
DownCloud| | 2011-11-18 09:48 | 只看该作者
理论上好像如lz所说。但实际ACC是应该是声明为volatilel(猜的,寄存器都这样声明的,没声明就是编译器默认了),每次去读都是当前时刻的值。注意:51 acc参与几乎所有运算,值是千变万化的。
所以只能说ACC是类似于与硬件相关的东西(寄存器),不要轻易拿来当变量用。否则会死很惨吧?

使用特权

评论回复
9
ayb_ice| | 2011-11-18 10:24 | 只看该作者
8L
这和volatilel没有什么关系,
在高级语言中,这些寄存器都属于编译器管理使用的,
用户自己显示使用,但编译器并不知道用户使用了这些,规则是什么,所以编译器不理会用户的这些情况,冲突的概率极高,导致程序出错概率极高

使用特权

评论回复
10
DownCloud| | 2011-11-18 10:39 | 只看该作者
理解成易变的变量也可以啊。因为它确实与硬件相关。
反正它对于编译器是特殊的。不然编译器会读一次acc,以下的代码的acc都没被改变,所以就以第一次读的为一个标准答案。
但编译器没这样优化啊,因为acc特殊的。我那样理解其实也不错。

使用特权

评论回复
11
注册好烦| | 2011-11-18 16:39 | 只看该作者
和编译器有关吧!

使用特权

评论回复
12
wzc571212801| | 2012-5-6 10:17 | 只看该作者
怎么算的

使用特权

评论回复
13
xuyaqi| | 2012-5-6 10:23 | 只看该作者
了解汇编的人都知道ACC是累加器

使用特权

评论回复
14
原野之狼| | 2012-5-6 13:08 | 只看该作者
用C语言编程  就别去用啥ACC了  也不知道这个“传统”是怎么传下来的  害人不浅

使用特权

评论回复
15
bell1205| | 2012-5-7 00:13 | 只看该作者
顶4楼! 还是查查反汇编吧, 很快就可以出结果

使用特权

评论回复
16
logokfu| | 2012-5-7 08:30 | 只看该作者
第二步运算时候acc寄存器里的值早都已经变了吧。

使用特权

评论回复
17
luojing268| | 2012-12-27 15:25 | 只看该作者
ACC是累加器吗,ACC不是变量啊,看看51那个头文件就明白了

使用特权

评论回复
18
coody| | 2012-12-27 16:28 | 只看该作者
C里直接用ACC没啥问题的,8级或以下优化

使用特权

评论回复
19
uet_cache| | 2012-12-27 16:49 | 只看该作者
一看就知生手。

使用特权

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

本版积分规则

0

主题

11

帖子

1

粉丝