#include
#include
typedef unsigned char uint8;
typedef unsigned int uint16;
sfr AUXR = 0x8E;
bit flag_500ms = 0;
void Config_Uart();
void Uart_Send(uint8 *str);
void Config_Timer_0();
void main()
{
uint8 str[40];
EA = 1;
Config_Uart();
Config_Timer_0();
sprintf(str,"%d",1234567890);
while(1)
{
if(flag_500ms)
{
flag_500ms = 0;
Uart_Send(str);
}
}
}
void Uart_Send(uint8 *str)
{
uint8 *p;
p = str;
while(*p != '\0')
{
SBUF = *p;
while(!TI);
TI = 0;
p++;
}
}
void Config_Uart()
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0x8F; //设定定时初值
TH1 = 0xFD; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1;
}
void Config_Timer_0()
{
TMOD |= 0xF0;
TMOD &= 0x01;
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256;
ET0 = 1;
TR0 = 1;
}
void Isr_Timer_0() interrupt 1
{
static uint16 counter = 0;
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256;
counter++;
if(counter>=250)
{
counter = 0;
flag_500ms = 1;
}
}
这个在上位机上只显示1,但是我将它变为sprintf(str,"%s%6.3f%c%c","temperature:",22.0625,'\r','\n');它就显示temperature:22.062,好的很,这是为什么呢?