打印

KEILC的移位如何实现?

[复制链接]
2686|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自动发

使用特权

评论回复
5
leo_yang| | 2008-12-17 09:40 | 只看该作者

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

使用特权

评论回复
6
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时读的是输入,而不是输出.

使用特权

评论回复
7
hgjinwei| | 2008-12-17 09:52 | 只看该作者

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

但并不是同一个硬件实体.

使用特权

评论回复
8
ljm810010| | 2008-12-17 09:53 | 只看该作者

不宜直接对端口移位

端口数据属于挥发型的,写入后再读出,不证是原值.例如口线被外部拉低为0,即使写入1,回读却是0.

使用特权

评论回复
9
weishg| | 2008-12-17 16:16 | 只看该作者

re

用的51单片机的吗?
移位指令的操作数只能是累加器A
如果用P0=P0《1,由于P0无法作为操作数,所以不能生成移位指令

使用特权

评论回复
10
happyrun|  楼主 | 2008-12-25 11:01 | 只看该作者

哦,谢谢大家

P0=P0《1   P0无法作为操作数

使用特权

评论回复
11
twz8858877| | 2008-12-25 14:40 | 只看该作者

没错啊

指令没问题,注意硬件

使用特权

评论回复
12
mklwcai| | 2008-12-25 15:56 | 只看该作者

P0口有无上拉

P0=P0《1 这个语句应该么错,这是对于C来说的,编译后会用几条指令来实现功能。 

使用特权

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

本版积分规则

9

主题

34

帖子

0

粉丝