热度 14
2013-7-17 10:44
1661 次阅读|
0 个评论
单片机软件延时出现问题-又是整型int惹的祸 wxleasyland@sina.com 2013.7 用的是STC12C5A60S2的1T单片机,STC的软件(stc-isp-15xx-v6.24.exe)可以帮忙生成延时程序,比如1ms延时是: void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } 拷到我的其它有时序要求程序中,结果发现功能异常,一直找不到原因,以前有一版本的程序用的延时也是STC生成的,功能正常,而这个程序却不行! 后来发现确实是延时不对,奇怪,找了很久也找不到原因。 后来将延时子程序Delay1ms()整体替代掉,OK了,终于发现,原来: 我只拷了精华段,没有拷unsigned char i, j;,而原程序中的是unsigned int i, j;!!! int与char有天壤之别啊! 因为单片机做int的加减法运算,需要比char多很多的汇编指令,这样导致延时时间完全不一样了,多了好几倍!这里用C编程,看不出来,导致忽略了这个问题。 哎,用int已经出现过不少问题了。差一点,就差很多!