Gost 发表于 2013-3-22 01:30:34

--i和i--的区别,秒表延时程序出问题,真心想知道为什么

本帖最后由 Gost 于 2013-3-22 01:31 编辑



真心想知道我的程序是哪里的问题,真的是--i;i--;的原因吗??想不通
我的理解--i先减1在执行,i--先执行再减1.
下面上传程序
上面的程序是改正确的,如果想出错只需把delay里面的--i换为i--,错误会出现在按键消抖的程序段那里,当然不是编译不通过,是定义的P17和
P32按键按下后其他按键再也不起作用了,只能复位,在这先致谢了

wye11083 发表于 2013-3-22 07:51:37

这个应该是编译器问题,你不妨检查一下汇编代码,看它把while(i--)生成了什么东西。

klesky 发表于 2013-3-22 08:12:39

同意楼上,自己看一下汇编出来的代码就清楚了.

Gost 发表于 2013-3-22 09:56:14

wye11083 发表于 2013-3-22 07:51 static/image/common/back.gif
这个应该是编译器问题,你不妨检查一下汇编代码,看它把while(i--)生成了什么东西。 ...

好的 ,这就去看去

Gost 发表于 2013-3-22 11:40:30

C:0x09C3    22       RET      
C:0x09C4    7FC8   MOV      R7,#T2CON(0xC8)
C:0x09C6    7E00   MOV      R6,#0x00
    14: void delay(u16 a)          //延时这里要用a--就不对了,出错的地方可能在于P17,P32那两个if里面的延时
    15: {       while(a--);
C:0x09C8    EF       MOV      A,R7
C:0x09C9    1F       DEC      R7
C:0x09CA    AE1E   MOV      R4,0x1E
C:0x09CC    7001   JNZ      C:09CD
C:0x09CE    1E       DEC      R6
C:0x09CF    4E       ORL      A,R4
C:0x09D0    70F7   JNZ      delay(C:09C8)
    16: }
C:0x09D2    22       RET      
这里确实有问题,编译器的的问题,我又知道一个能出错的地方了

mandey 发表于 2013-3-22 11:58:54

一般不要用这种模棱两可的表达式吧,i-=1

Gost 发表于 2013-3-22 12:59:24

mandey 发表于 2013-3-22 11:58 static/image/common/back.gif
一般不要用这种模棱两可的表达式吧,i-=1

恩恩 ,以后少用

jz701209李 发表于 2013-3-23 11:17:40

学习一下....
页: [1]
查看完整版本: --i和i--的区别,秒表延时程序出问题,真心想知道为什么