KEILC的移位如何实现?

[复制链接]
4280|11
 楼主| happyrun 发表于 2008-12-16 17:29 | 显示全部楼层 |阅读模式
偶的程序是
#include<reg51.h>
#include<reg51.h>//头函数,用于调用
#include<stdio.h>//输入输出函数
#define uchar unsigned char
#define uint unsigned int

main()
{
  uchar i;
  for(;;)
  {
    P0=0X01;
    for(i=0;i<8;i++)
    {
         P0=P0<<1;
         }
  }
}

实现不了移位,但是将P0口换位变量a就可以正常移位,
这是什么原因那?
ayb_ice 发表于 2008-12-16 19:52 | 显示全部楼层

可以吧

不过读的是IO
dtmcp 发表于 2008-12-16 21:44 | 显示全部楼层

P0口是硬件口

leolle 发表于 2008-12-17 09:15 | 显示全部楼层

你得把一个变量值通过P1发出去,而P1自动发

leo_yang 发表于 2008-12-17 09:40 | 显示全部楼层

只能移动变量哦,还没有直接移动硬件的经验,呵呵

hgjinwei 发表于 2008-12-17 09:50 | 显示全部楼层

反汇编结果显示可以哦

    14:     { 
    15:          P0=P0<<1; 
C:0x0008    E580     MOV      A,P0(0x80)
C:0x000A    25E0     ADD      A,ACC(0xE0)
C:0x000C    F580     MOV      P0(0x80),A
    16:          } 

是不是硬件方面的事情啊?读P0时读的是输入,而不是输出.
hgjinwei 发表于 2008-12-17 09:52 | 显示全部楼层

输入与输出虽然是同一个地址,

但并不是同一个硬件实体.
ljm810010 发表于 2008-12-17 09:53 | 显示全部楼层

不宜直接对端口移位

端口数据属于挥发型的,写入后再读出,不证是原值.例如口线被外部拉低为0,即使写入1,回读却是0.
weishg 发表于 2008-12-17 16:16 | 显示全部楼层

re

用的51单片机的吗?
移位指令的操作数只能是累加器A
如果用P0=P0《1,由于P0无法作为操作数,所以不能生成移位指令
 楼主| happyrun 发表于 2008-12-25 11:01 | 显示全部楼层

哦,谢谢大家

P0=P0《1   P0无法作为操作数
twz8858877 发表于 2008-12-25 14:40 | 显示全部楼层

没错啊

指令没问题,注意硬件
mklwcai 发表于 2008-12-25 15:56 | 显示全部楼层

P0口有无上拉

P0=P0《1 这个语句应该么错,这是对于C来说的,编译后会用几条指令来实现功能。 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

34

帖子

0

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