语句谁解释一下~~

[复制链接]
3941|18
 楼主| 冯冯冯冯 发表于 2011-1-7 13:31 | 显示全部楼层 |阅读模式
本帖最后由 冯冯冯冯 于 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口的变化,自己看明白 理解的更加透彻
 楼主| 冯冯冯冯 发表于 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....么?
pineapple2009 发表于 2011-1-7 16:07 | 显示全部楼层
循环左移。。。
老鱼探戈 发表于 2011-1-7 16:13 | 显示全部楼层
函数应该没有错,是不是你的keil有问题
看看函数库吧
 楼主| 冯冯冯冯 发表于 2011-1-7 16:15 | 显示全部楼层
7# 老鱼探戈

那就是说是正常的循环左移?keil仿真追踪的是有问题的?
new1988 发表于 2011-1-7 16:20 | 显示全部楼层
去看看keil  的帮助文件吧!!
在.../keil/C51/hlp/C51.chm。   前面的...是你keil所在的目录。
刘前辈 发表于 2011-1-7 17:59 | 显示全部楼层
本帖最后由 刘前辈 于 2011-1-7 18:09 编辑

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

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
老鱼探戈 发表于 2011-1-7 18:53 | 显示全部楼层
10# 刘前辈
P0口的特殊性会影响这类函数的使用?
应该只是驱动能力的区别吧
wangkangming 发表于 2011-1-7 20:00 | 显示全部楼层
[img][img][/img][/img]
 楼主| 冯冯冯冯 发表于 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口特殊了点。
刘前辈 发表于 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;
        }
}

结果正确。

刘前辈 发表于 2011-1-8 12:23 | 显示全部楼层
……
嗯,改成了P1口以后,keil仿真追踪的值的确正常了,
不过P0口虽然不对,但是hex文件仿真到PROTUES里却是对的了。


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

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

c126 发表于 2011-1-8 13:13 | 显示全部楼层
学习了:handshake
刘前辈 发表于 2011-1-8 13:20 | 显示全部楼层
挂接实验板,P0端口外接负载发光管,走马灯移动结果正确。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 冯冯冯冯 发表于 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谢谢,很厉害。
程序医人 发表于 2011-1-8 20:27 | 显示全部楼层
那个keil仿真IO口不是有2排数据吗?  一组是IO寄存器值,不受外界影响的,另一排是IO口状态,是受外界电路影响的,有时寄存器值和io口状态是不一致的。 51中mov   A,Px,读的是IO口状态,不是寄存器值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:老了

0

主题

659

帖子

1

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