STC Uart1,Uart2 关联 printf 函数

printf 调用的应该是putchar来打印的函数。
所以应该是需要重写putchar函数。初始化与uart1/2一致。
找到的其他的类似与置 TI=0; 好像是不行

在uart.c 中添加如下片段。
【引用自http://bbs.elecfans.com/jishu_405035_1_1.html】

//uart1
void putchar(char c){
    ES = 0;
    SBUF = c;
    while(TI==0);
    TI = 0;
    ES = 1;
}

//uart2
void putchar(char c){
    IE2 &= 0xfe;
    S2BUF = c;
    while((S2CON & S2TI) == 0);
    S2CON &= ~S2TI;
    IE2 |= 0x01;
}

添加完putchar函数后,keil 编译时提示
【C:\KEIL C51\C51\INC\STDIO.H(30): error C231: ‘_putchar’: redefinition】
函数重复定义,此时可以打开stdio.h头文件,注释掉“extern char putchar (char);”
然后再次编译,通过,此时可在任意位置调用printf(“%x, %s, %d,…”, hex, str, int);

你可能感兴趣的:(单片机,C语言)