打印

KEIL下位运算之CY累加器的问题

[复制链接]
3218|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tinnyman|  楼主 | 2011-4-15 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主程序如下:
      outData=0xAA;
       for(i=0; i<8; i++)        
      {
         SCLK=0;
         outData <<= 1;
         P3_4 = CY;         
          SCLK=1;
          _nop_();
          _nop_();
          _nop_();
          _nop_();     
       }


我这个程序在调试的时候,单步执行,我发现outData <<= 1;语句执行完以后CY里面并变为1,而在for循环走完一遍的时候,CY才变成了1,难道这个CY不是代表移出去的数?CY究竟代表什么,在我这个程序中什么时候会变?谢谢

相关帖子

沙发
tinnyman|  楼主 | 2011-4-15 17:48 | 只看该作者
我发现outData <<= 1;语句执行完以后CY里面并没有变为1,但10101010第一次移出去的应该是1啊,难道移出去的1不是放进CY里?而是扔掉了?

使用特权

评论回复
板凳
playjian| | 2011-4-15 17:48 | 只看该作者
你用个高级语言编写的~~~变异通过后通过汇编窗口查看相应的汇编指令~~就可以发现问题了~~

使用特权

评论回复
地板
tinnyman|  楼主 | 2011-4-15 17:53 | 只看该作者
我看到只在for循环执行完一遍的时候执行了一句INC i(0X0A),然后CY由0变成了1,这一句汇编跟我的左移位运算有关系吗?

使用特权

评论回复
5
tinnyman|  楼主 | 2011-4-15 17:56 | 只看该作者
哦 没关系 他这个应该是i+1的时候CY变成了1 那我刚才左移出去的1在哪里啊 ?

使用特权

评论回复
6
tinnyman|  楼主 | 2011-4-15 18:05 | 只看该作者
CY会不会有生存周期 放进去的1瞬间就不见了 而我把CY赋值给P3_4的时候 CY里的那个1已经被清0了

使用特权

评论回复
7
airwill| | 2011-4-16 12:38 | 只看该作者
对, CY会不会有生存周期 是有问题的.
原因是, 这是个内核运算相关的寄存器(PSw 里的 C 位).
很多的计算都会影响它(比如加减法, 移位, 比较等)
楼主正好遇到了移位操作, 改变了 Cy 的值.
类似 Cy 的, 还有 Acc, 它也会随着计算而改变.
但是, 这并不能说明, 程序中 Cy 和Acc 会变化, 而不能使用这两个.
楼主的程序, 想必是 I2C 里的子程序吧, 这里是个技巧, 正好是利用了移位改变 Cy 的特性,
把 outData 的最高位送到 P3_4 口上去.
这是高手的包含技巧的程序, 难怪楼主疑惑.

使用特权

评论回复
8
afei9527| | 2011-4-16 17:54 | 只看该作者
顶:)

使用特权

评论回复
9
tinnyman|  楼主 | 2011-4-18 10:19 | 只看该作者
对, CY会不会有生存周期 是有问题的.
原因是, 这是个内核运算相关的寄存器(PSw 里的 C 位).
很多的计算都会影响它(比如加减法, 移位, 比较等)
楼主正好遇到了移位操作, 改变了 Cy 的值.
类似 Cy 的, 还有 Acc, 它也 ...
airwill 发表于 2011-4-16 12:38


谢谢,我目前观察到的CY是在第一次移位的时候置0,以后每次i++或者移位都会改变一次,那么CY似乎只是代表改变的次数,又怎么能代表outData 的最高位数字呢?期待高手解答

使用特权

评论回复
10
tinnyman|  楼主 | 2011-4-20 10:20 | 只看该作者
顶起来继续问 大家看看

使用特权

评论回复
11
tinnyman|  楼主 | 2011-4-20 13:47 | 只看该作者
打扰大家了 问题找到了 原因是我在定义outchar类型的时候定义成了整型 应该是字符型 我太郁闷了 搞了这么多天

使用特权

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

本版积分规则

0

主题

20

帖子

1

粉丝