keilc51 KeilC51中的库函数printf

使用模拟查看串口输出时,我遇到了一个问题,代码如下:
#include&lt。reg52.h&gt。
#include &lt。stdio.h&gt。/* add */
main()
{
SCON = 0x 50;/*SCON:工作模式1,8位通用异步收发器,允许接收*/
TMOD | = 0x 20;/*TMOD:定时器T1,工作模式2,8位自动过载模式*/
TH1 = 0xf3/*波特率为2400时定时器的初始值*/
TR1 = 1;/*定时器T1开始运行*/
TI = 1;/*允许发送数据*/
printf(" hello world ");
}
以上代码调试运行后,串口不断输出“hello world”,程序陷入无限循环。
问题的解决方法:在程序末尾加while(1);
原因:如果不加while(1);将执行RET命令,这将使程序重复
位(软件复位,从堆栈弹出0000小时到PC寄存器),复位后程序再次启动
执行。
思维:习惯了窗下编程。当主程序执行完毕,我退出操作系统,单片机就会
不一样。你要去哪里?下面是单片机和编译器的对话:
单片机:没事干,死了就算了~ ~ ~
编译器:想死?最好复位~~~RET
单片机:o,狗屎~~~
单片机串口相关问题:标准51只有一个串口,但是现在很多基于51内核的单片机
胶片机有两个或两个以上串口,那么printf功能针对哪个串口?
答案:KeilC51LIB目录中有一个putchar.c文件,printf函数会调用
Putchar funcTIon,Putchar中使用的寄存器都是标准的51(比如ti,SBUF),这
它们的地址是固定的,所以printf函数只针对串口0。如果希望printf函数分支
握住串行端口1或串行端口2。。。然后修改putchar函数的寄存器,比如SBUF改成
SBUF1 .但是串口0和串口1可以用printf函数吗?。。都适用。你想自己做吗
法律栏:)
另外:如果只使用printf输出字符串,应该自己做一个函数,因为printf很重要
各种数据的输出占用大量代码空。我试过了,程序里只有一种printf语言
换句话说,代码是1K,printf执行慢。
【keilc51 KeilC51中的库函数printf】原始链接:

    推荐阅读