怀疑是keil的bug

[复制链接]
3081|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
ayb_ice 发表于 2008-6-19 14:42 | 显示全部楼层

uchar即可

您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

40

帖子

1

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