以前我说过KEIL里面写51程序时,如果要使用printf函数时一定要把串口配置好,把TI置1才可以正常使用,但仍然有部分同学遇到一个问题,那就是为什么有时候输出变量不正确,明明是8位的变量最多也就255,居然输出个16位的变量。
原因很简单:printf如果输出变量的话,一定要用unsigned int型才可以,不能用char型!!!
如果是char 或unsigned char的变量要打印出来的话一定强制转换成int 或unsigned int才可以!!!
遇到此类问题的同学可以尝试一下……
举例子:
unsigned int i;
i = 15;
printf("%d
",i); 可以正确打印
若是
unsigned char i;
i = 15;
printf("%d
",i); 则会出现错误
需要改一下
unsigned char i;
i = 15;
printf("%d
",(unsigned int)(i)); 可以正确打印
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
感觉你是刚学单片机的,怎么说呢,单片机编程和PC机编程不同之一是单片机要考虑资源和效率,pc机可以忽略。
不知道你用的是不是Keil,keil中自带的printf函数是个通用的函数,所用的资源相较之多效率低,而在实际当中用不了那么多,所以可以自己写个类似printf的函数,根据所需,砍掉不需要的功能。
给你举个例子,
只需要发送一个字节就可以这样:
unsigned char SendData(unsigned char dat) //相当于printf函数,你需要什么功能,就写成什么功能,函数名随便起,最好有意义点
{
if(0 == TI){
SBUF = dat;
return TRUE;
}
else return FALSE;
}
中断函中在进行相关处理。
一周热门 更多>