打印

怀疑是keil的bug

[复制链接]
2180|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hopeasy|  楼主 | 2008-6-19 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是keil uv3 V806
下面一段关于51的c程序

#include "reg52.h"
main()
{
  char s=0xfe;
  while(1)
  {
    if(s==0xff)
      s=0xfe;
    s=s<<1|0x01;
    P1=s;
  }
}

我的本意是弄个流水灯的样子,但是那个if语句不执行,请教各位,谢谢

相关帖子

沙发
computer00| | 2008-6-19 11:01 | 只看该作者

哈哈~~~估计是被扩展成整型了……

0xff==s,当s为负数时,高字节全部被扩展为1,结果就是0x00FF == 0xFFFF,结果当然是不等了……

所以最好写成无符号的,具有更高的效率:

unsigned char s=0xfe;

或者把0xFF换成-1。

使用特权

评论回复
板凳
gyt| | 2008-6-19 12:51 | 只看该作者

这么简单的问题

不可能是keil的bug

使用特权

评论回复
地板
dai_weis| | 2008-6-19 13:13 | 只看该作者

自己的错误或者马虎不能怪到Keil身上

这个是汇编代码
     2: main() 
     3: { 
     4:   char s=0xfe; 
C:0x0003    7FFE     MOV      R7,#0xFE
     5:   while(1) 
     6:   { 
     7:     if(s==0xff) 
C:0x0005    EF       MOV      A,R7
C:0x0006    FD       MOV      R5,A
C:0x0007    33       RLC      A
C:0x0008    95E0     SUBB     A,ACC(0xE0)
C:0x000A    FC       MOV      R4,A
C:0x000B    ED       MOV      A,R5
C:0x000C    F4       CPL      A
C:0x000D    4C       ORL      A,R4
C:0x000E    7002     JNZ      C:0012
     8:       s=0xfe; 
C:0x0010    7FFE     MOV      R7,#0xFE
     9:     s=s<<1|0x01; 
C:0x0012    EF       MOV      A,R7
C:0x0013    25E0     ADD      A,ACC(0xE0)
C:0x0015    4401     ORL      A,#0x01
C:0x0017    FF       MOV      R7,A
    10:     P1=s; 
C:0x0018    F590     MOV      P1(0x90),A
    11:   } 
C:0x001A    80E9     SJMP     C:0005

使用特权

评论回复
5
ayb_ice| | 2008-6-19 14:42 | 只看该作者

uchar即可

使用特权

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

本版积分规则

8

主题

40

帖子

1

粉丝