在使用printf函数之前需要注意亮点,一是调用头文件stdio.h,二是重定义putchar发送单个字符函数。这一点和MDK中开发AMR处理器不太一样,后者重定义的函数名fputc。
写个测试程序,不断通过串口发送一个字符串:
#include <STC15F2K60S2.H>
#include "stdio.h"
#include "intrins.h"
void Delay1000ms(void);
void UartInit(void);
void main(void)
{
UartInit();
for(;;)
{
printf("Hello, STC!\r\n");
Delay1000ms();
}
}
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xE0; //设定定时初值
T2H = 0xFE; //设定定时初值
AUXR |= 0x10; //启动定时器2
}
char putchar(char ch)
{
SBUF = ch;
while(TI == 0);
TI = 0;
return ch;
}
void Delay1000ms(void) //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
效果如下,可以看到实现预期功能:
另外,C51中 printf的常用输出格式如下
其他的输出格式含义
以输出浮点数举例
printf("tempX=%f\r\n",tempX);
输出效果如下:
————————————————