keil C51使用printf函数
0赞
发表于 3/16/2017 9:03:51 PM
阅读(5563)
在使用单片机开发过程中,很多情况下都希望能够通过串口输出一些调试信息。提及串口输出各种格式数据的方法,无非2种:一是自己完全编程串口函数,进行格式化各种可能要使用的数据;另一种比较简单的方法是使用库中的printf函数,这种方法虽然比较占用资源,但在很多情况下比较简单实用。
在使用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); }
效果如下,可以看到实现预期功能: