关于在c中用ACC寄存器问题,出错?

[复制链接]
4877|11
 楼主| c555 发表于 2010-7-16 17:06 | 显示全部楼层 |阅读模式
sbit ACC_7 = ACC^7;    //先定义

   for ( i=8; i>0; i-- )
       {
              ACC_7=DIO;
              SCLK = 0;
              ACC=ACC>>=1;
              SCLK = 1;
                  }
其中DIO是单片机引脚,用ACC_7读出的数值
是FF,但是我用if语句判断引脚,不用ACC_7读就是对的
,难道这ACC用法不对?
ayb_ice 发表于 2010-7-16 17:21 | 显示全部楼层
本帖最后由 ayb_ice 于 2010-7-17 15:29 编辑

这样用可能死悄悄的

这里可能for ( i=8; i>0; i-- ) 会用到ACC,这样就会覆盖下面的ACC值

C里面一般不要去操作寄存器
efen 发表于 2010-7-16 17:27 | 显示全部楼层
LS利害,学习了
350304709 发表于 2010-7-16 17:42 | 显示全部楼层
恩,是的
李冬发 发表于 2010-7-16 18:15 | 显示全部楼层
用了C,除非你特牛,否则动到寄存器,死得难看。
hgjinwei 发表于 2010-7-16 20:43 | 显示全部楼层
啥都别说了,上代码一看就明白了。
  1.     32: void rmove(void)
  2.     33: {
  3.     34:         int i;
  4.     35:    for ( i=8; i>0; i-- )  
  5. C:0x008F    7F08     MOV      R7,#keyb(0x08)
  6. C:0x0091    7E00     MOV      R6,#0x00
  7.     36:        {
  8.     37:               ACC_7=DIO;
  9. C:0x0093    A297     MOV      C,DIO(0x90.7)
  10. C:0x0095    92E7     MOV      ACC_7(0xE0.7),C
  11.     38:               SCLK = 0;
  12. C:0x0097    C296     CLR      SCLK(0x90.6)
  13.     39:               ACC=ACC>>=1;
  14. C:0x0099    FD       MOV      R5,A
  15. C:0x009A    7C01     MOV      R4,#0x01
  16. C:0x009C    7801     MOV      R0,#0x01
  17. C:0x009E    08       INC      R0
  18. C:0x009F    8002     SJMP     C:00A3
  19. C:0x00A1    C3       CLR      C
  20. C:0x00A2    13       RRC      A
  21. C:0x00A3    D8FC     DJNZ     R0,C:00A1
  22.     40:               SCLK = 1;
  23. C:0x00A5    D296     SETB     SCLK(0x90.6)
  24.     41:                   }
  25.     42:  
  26. C:0x00A7    EF       MOV      A,R7
  27. C:0x00A8    1F       DEC      R7
  28. C:0x00A9    7001     JNZ      C:00AC
  29. C:0x00AB    1E       DEC      R6
  30. C:0x00AC    EF       MOV      A,R7
  31. C:0x00AD    4E       ORL      A,R6
  32. C:0x00AE    70E3     JNZ      C:0093
  33.     43: }
  34.     44:  
  35. C:0x00B0    22       RET      
hgjinwei 发表于 2010-7-16 20:49 | 显示全部楼层
而这样就行
  1.     32: void rmove(void)
  2.     33: {
  3.     34:         unsigned char i;
  4.     35:    for ( i=8; i>0; i-- )  
  5. C:0x008F    7F08     MOV      R7,#keyb(0x08)
  6.     36:        {
  7.     37:               ACC_7=DIO;
  8. C:0x0091    A297     MOV      C,DIO(0x90.7)
  9. C:0x0093    92E7     MOV      ACC_7(0xE0.7),C
  10.     38:               SCLK = 0;
  11. C:0x0095    C296     CLR      SCLK(0x90.6)
  12.     39:               ACC=ACC>>=1;
  13. C:0x0097    FE       MOV      R6,A
  14. C:0x0098    7D01     MOV      R5,#0x01
  15. C:0x009A    7801     MOV      R0,#0x01
  16. C:0x009C    08       INC      R0
  17. C:0x009D    8002     SJMP     C:00A1
  18. C:0x009F    C3       CLR      C
  19. C:0x00A0    13       RRC      A
  20. C:0x00A1    D8FC     DJNZ     R0,C:009F
  21.     40:               SCLK = 1;
  22. C:0x00A3    D296     SETB     SCLK(0x90.6)
  23.     41:                   }
  24.     42:  
  25. C:0x00A5    DFEA     DJNZ     R7,C:0091
  26.     43: }
  27.     44:  
  28. C:0x00A7    22       RET      
hgjinwei 发表于 2010-7-16 20:51 | 显示全部楼层
要在C语言中直接访问工作寄存器(R0~R7,A,B等等),你就得考虑后果。
和编译器抢资源,这不是自找苦吃吗?
xlsbz 发表于 2010-7-16 21:44 | 显示全部楼层
LZ 你是做项目呢?还是自己玩呢?

玩的话,我佩服  看样是厉害人物 即便现在不是。

但是做项目 用ACC 就夸张了啊  要不得!
Mindor 发表于 2010-7-17 08:17 | 显示全部楼层
我有次用I2C用了ACC,也被囧到了。。。
结果好像改成for(i = 0; i < 8; i++)就没事了。。。- -
tuzheng 发表于 2010-7-17 15:20 | 显示全部楼层
没听说过用C还要用ACC的
xuyiyi 发表于 2010-7-17 15:28 | 显示全部楼层
要在C语言中直接访问工作寄存器(R0~R7,A,B等等),你就得考虑后果。
和编译器抢资源,这不是自找苦吃吗?
hgjinwei 发表于 2010-7-16 20:51


同意LS观点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

264

主题

556

帖子

3

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