标题: 单片机编程中这个细节不注意,查错要查到怀疑人生 [打印本页]
作者: zxwdown 时间: 2019-4-2 19:15
标题: 单片机编程中这个细节不注意,查错要查到怀疑人生
编程中,对于有些变量,可以不赋初值,但有些变量,一定要赋初值,如果没有赋初值,就会出现错误,如果事先有所了解还好,知道查变量初值是不是没有赋值,如果没有这方面的经验,可能要排查好久才能查出故障,有时甚至查不出故障。如下面这段单片机程序:
#include <reg52.h>
#define uchar unsigned char
sbit rs=P3^5;
sbit rw=P3^6;
sbit E=P3^7;
//================================
void delay(int ii){int i;for(i=0;i<ii;i++);}
//-------------------------------
void LM1602_write(uchar dat,char cd)
{E=0;rw=0;rs=cd;
P0=dat;
E=1;delay(5);E=0;
}
//--------------------------------
void Putstr(char *str)
{int i;
while(str[ i]!=0){LM1602_write(str[ i],1);i++;delay(50);}
}
//===============================
main()
{
LM1602_write(0x38,0);
LM1602_write(0x0f,0);
delay(50);
Putstr("Hello MCU!");Putstr("12345");
while(1);
}
程序原意要在液晶显示器上显示出两个字符,但运行结果如下。
可以看出不如预期,这是因为变量Putstr(char *str)的变量i没有赋初值,如果改成这样就不会出现以上情况。
void Putstr(char *str)
{int i=0;
while(str[ i]!=0){LM1602_write(str[ i],1);i++;delay(50);}
}
此时运行情况如下:
程序运行达到预期。所以象这种变量大家要记得赋初值。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |