我用uart_printf发送9个浮点数,串口助手能接收到9个数,但是只有前三个数据是对的,怎么回事啊,如果三个三个发送就都是对的
void uart_init(void)
{
TR1=1;//启动定时器/计数器1
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
IE=0x00; //由于是查询方式,故需要禁止中断,CPU不允许中断,串行不允许中断
}
void sendbyte(unsigned char c)
{
if(c=='\n')//如果遇到\n就换行
{
//发送CR(carriage return)
SBUF=0x0D;
while(!TI);//等待发送完成
TI=0;
//发送 LF(NL line feed,new line)
SBUF=0x0A;
while(!TI);//等待发送完成
TI=0;
}
else
{
SBUF=c;
while(!TI);//等待发送完成
TI=0;
}
}
void sendstring(unsigned char *string)//此处*string相当于数组
{
while(*string!='\0')//判断是否到字符串末尾
{
sendbyte(*string);
string++;
}
}
void uart_printf(const char *fmt,...)
{
va_list ap;
char xdata string[1024];//访问内部拓展RAM,非访问外部RAM,不能超过内部拓展RAM大小(此处为1024)
va_start(ap,fmt);
vsprintf(string,fmt,ap);//此处也可以使用sprintf函数,用法差不多,稍加修改即可,此处略去
sendstring(string);
va_end(ap);
}