打印

语句谁解释一下~~

[复制链接]
2461|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 冯冯冯冯 于 2011-1-7 16:12 编辑

P0 = _crol_(P0,1);不知道这个语句意思,解释一下。
初步判断应该是左移,
左移效果很奇怪,开始时P0 = 0xFE,然后一直处理P0 = _crol_(P0,1)+延时,
根据keil仿真调试追踪P0口的值变化为:FE--FD--F9--F1--E1--C1--81--01--00然后00不变了。按照道理来讲不是应该是FE-FD-FB-F7-EF-DF-BF-7F-FE....么?谁帮我解释一下,O(∩_∩)O谢谢

相关帖子

沙发
ayb_ice| | 2011-1-7 14:13 | 只看该作者
就是把P0循环左移位
_crol_是个C51的内嵌函数

使用特权

评论回复
板凳
冯冯冯冯|  楼主 | 2011-1-7 14:17 | 只看该作者
本帖最后由 冯冯冯冯 于 2011-1-7 14:21 编辑

嗯,明白是左移,但是是怎么个移法?(P0,1)有什么意义?比如说换成(P0,2)呢。

使用特权

评论回复
地板
haishy| | 2011-1-7 14:31 | 只看该作者
你可以自己换成(P0,2) 看看IO口的变化,自己看明白 理解的更加透彻

使用特权

评论回复
5
冯冯冯冯|  楼主 | 2011-1-7 14:51 | 只看该作者
OK 试了一下,1,2是指移多少位。这个明白了。
剩下的就是:怎么左移的呢?
为什么我在keil仿真调试追踪P0口的值变化为:FE--FD--F9--F1--E1--C1--81--01--00
按照道理来讲不是应该是FE-FD-FB-F7-EF-DF-BF-7F-FE....么?

使用特权

评论回复
6
pineapple2009| | 2011-1-7 16:07 | 只看该作者
循环左移。。。

使用特权

评论回复
7
老鱼探戈| | 2011-1-7 16:13 | 只看该作者
函数应该没有错,是不是你的keil有问题
看看函数库吧

使用特权

评论回复
8
冯冯冯冯|  楼主 | 2011-1-7 16:15 | 只看该作者
7# 老鱼探戈

那就是说是正常的循环左移?keil仿真追踪的是有问题的?

使用特权

评论回复
9
new1988| | 2011-1-7 16:20 | 只看该作者
去看看keil  的帮助文件吧!!
在.../keil/C51/hlp/C51.chm。   前面的...是你keil所在的目录。

使用特权

评论回复
10
刘前辈| | 2011-1-7 17:59 | 只看该作者
本帖最后由 刘前辈 于 2011-1-7 18:09 编辑

呵呵,P0口是特殊的,见下面图,移动一次以后,读入与P0输出值开始不一致。

改成 P1=_crol_(P1,1); 正确。


使用特权

评论回复
11
老鱼探戈| | 2011-1-7 18:53 | 只看该作者
10# 刘前辈
P0口的特殊性会影响这类函数的使用?
应该只是驱动能力的区别吧

使用特权

评论回复
12
wangkangming| | 2011-1-7 20:00 | 只看该作者
[img][img][/img][/img]

使用特权

评论回复
13
冯冯冯冯|  楼主 | 2011-1-8 09:15 | 只看该作者
本帖最后由 冯冯冯冯 于 2011-1-8 09:24 编辑
呵呵,P0口是特殊的,见下面图,移动一次以后,读入与P0输出值开始不一致。改成 P1=_crol_(P1,1); 正确。
刘前辈 发表于 2011-1-7 17:59


嗯,改成了P1口以后,keil仿真追踪的值的确正常了,
不过P0口虽然不对,但是hex文件仿真到PROTUES里却是对的了。
再用P2口试了一下也是OK的
果然,呀哈里,只有P0口特殊了点。

使用特权

评论回复
14
刘前辈| | 2011-1-8 11:48 | 只看该作者
本帖最后由 刘前辈 于 2011-1-8 11:50 编辑

回11楼:P0口特殊,控制方法改变一下就行;并不影响移位使用。
改写如下:
main()
{
char LED;
        LED = 0xfe;
        P0 = LED;
  while(1)
{
//        delayms(250);                        
        LED =_crol_( LED,1 );               
        P0 = LED;
        }
}

结果正确。

使用特权

评论回复
15
刘前辈| | 2011-1-8 12:23 | 只看该作者
……
嗯,改成了P1口以后,keil仿真追踪的值的确正常了,
不过P0口虽然不对,但是hex文件仿真到PROTUES里却是对的了。


PROTUES 仿真是P0口外部模拟有上拉电阻(或者外接阻抗)的。实际上P0内部没有上拉电阻,所以KEIL模拟仿真不一样。

如果挂接实际电路板,板上P0端口加有外部上拉电阻,那么,P0=_crol_(P0,1); 语句执行结果将是正确的。

使用特权

评论回复
16
c126| | 2011-1-8 13:13 | 只看该作者
学习了:handshake

使用特权

评论回复
17
刘前辈| | 2011-1-8 13:20 | 只看该作者
挂接实验板,P0端口外接负载发光管,走马灯移动结果正确。

使用特权

评论回复
18
冯冯冯冯|  楼主 | 2011-1-8 13:21 | 只看该作者
PROTUES 仿真是P0口外部模拟有上拉电阻(或者外接阻抗)的。实际上P0内部没有上拉电阻,所以KEIL模拟仿真不一样。如果挂接实际电路板,板上P0端口加有外部上拉电阻,那么,P0=_crol_(P0,1); 语句执行结果将是正 ...
刘前辈 发表于 2011-1-8 12:23


嗯。我在PROTUES仿真里加了上拉电阻的, P0运行是OK的,就是疑惑keil追踪的值变化有问题。嗯O(∩_∩)O谢谢,很厉害。

使用特权

评论回复
19
程序医人| | 2011-1-8 20:27 | 只看该作者
那个keil仿真IO口不是有2排数据吗?  一组是IO寄存器值,不受外界影响的,另一排是IO口状态,是受外界电路影响的,有时寄存器值和io口状态是不一致的。 51中mov   A,Px,读的是IO口状态,不是寄存器值。

使用特权

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

本版积分规则

个人签名:老了

0

主题

659

帖子

1

粉丝