--i和i--的区别,秒表延时程序出问题,真心想知道为什么
本帖最后由 Gost 于 2013-3-22 01:31 编辑真心想知道我的程序是哪里的问题,真的是--i;i--;的原因吗??想不通
我的理解--i先减1在执行,i--先执行再减1.
下面上传程序
上面的程序是改正确的,如果想出错只需把delay里面的--i换为i--,错误会出现在按键消抖的程序段那里,当然不是编译不通过,是定义的P17和
P32按键按下后其他按键再也不起作用了,只能复位,在这先致谢了
这个应该是编译器问题,你不妨检查一下汇编代码,看它把while(i--)生成了什么东西。 同意楼上,自己看一下汇编出来的代码就清楚了. wye11083 发表于 2013-3-22 07:51 static/image/common/back.gif
这个应该是编译器问题,你不妨检查一下汇编代码,看它把while(i--)生成了什么东西。 ...
好的 ,这就去看去 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
这里确实有问题,编译器的的问题,我又知道一个能出错的地方了 一般不要用这种模棱两可的表达式吧,i-=1 mandey 发表于 2013-3-22 11:58 static/image/common/back.gif
一般不要用这种模棱两可的表达式吧,i-=1
恩恩 ,以后少用 学习一下....
页:
[1]