当前位置:首页 > 单片机 > 单片机
[导读]在用keil仿真查看串口输出时,遇到了一个问题,代码如下:#include#include /* 为使用printf函数而加入*/main(){ SCON= 0x50;/*SCON:工作模式1,8-bit UART,允许接收*/ TMOD |= 0x20;/*TMOD:定时器T1,工作模式2,

在用keil仿真查看串口输出时,遇到了一个问题,代码如下:

#include

#include /* 为使用printf函数而加入*/

main()

{

SCON= 0x50;/*SCON:工作模式1,8-bit UART,允许接收*/

TMOD |= 0x20;/*TMOD:定时器T1,工作模式2, 8位自动重载方式*/

TH1= 0xf3;/*当波特率为2400时,定时器初值*/

TR1= 1;/*定时器T1开始运行*/

TI= 1;/*允许发送数据*/

printf("hello world");

}

上面代码调试运行后,串口不断输出"hello world",程序陷入死循环。

问题的解决:在程序末尾应加上while(1);

原因:如果不加while(1); 单片机将执行一条RET指令,这条指令会让程序复

位(软件复位,从堆栈弹出0000H到PC寄存器),复位后程序重新开始

执行。

思考:习惯了window下编程,主程序执行完了就退出到操作系统,单片机就

不一样了,退到哪里呢?以下是单片机和编译器的对话:

单片机:我没事做了,死了算了~~~

编译器:想死?你还是复位吧~~~RET

单片机:o,shit~~~

单片机串口相关问题:标准51只有一个串口,但是现在很多基于51内核的单

片机都会有两个串口或是更多,那么printf函数针对哪个串口呢?

回答:KeilC51LIB目录下有个putchar.c文件,printf函数会调用该文件中的

putchar函数,putchar里面的使用的寄存器都是标准51的sfr(如TI,SBUF),它

们的地址是固定的,由此可知printf函数只针对串口0。如果想让printf函数支

持串口1或串口2。。。那么修改putchar函数的寄存器即可,比如SBUF改为

SBUF1。但是能不能用printf函数对串口0,串口1。。。都适用呢,自己想办

法吧:)

另外:如果只是用printf输出字符串的话还是自己编个函数吧,因为printf要处

理各类数据的输出,占用代码空间很大,我试了一下,程序里就一条printf语

句,code就1K了,而且printf执行起来也慢。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在实际项目中,我们经常需要提取一个数值的某些位的数码,比如用数码管来显示数值或将一个数值转成字符串,都会涉及到这一操作。

关键字: 数值 数码 printf

【开发工具】[keil]:概念科普:KEIL uVision,KEIL MDK,KEIL For ARM,RealView MDK,KEIL C51

关键字: keilc51 keil5

最近在忙活搞别的事情(太难受了),严重影响了硪那一颗自由飞翔的芯~~所以今天打算分享一个麻省理工小伙写的printf家族的函数~说是号称目前网上嵌入式最好的printf喔.在嵌入式中printf这种功能强大的函数可谓是c...

关键字: printf 嵌入式

大伙估计在多任务程序中使用printf打印一些信息是非常欢乐的一件事,运气不错的话偶尔错几个数据、乱几个码也不是什么大问题,倒霉点的可能就直接挂机、卡死了,那这些到底是什么原因导致的呢?

关键字: printf 可重入函数

SWO串行线输出是单引脚、异步串行通信,可在Cortex-M3/M4/M7上使用,并由主调试器探测支持,它是利用Cortex内核中ITM模块来实现此功能。

关键字: printf 嵌入式

目的:在串口0上实现printf、scanf等函数,它使用scanf、sscanf、printf等函数从串口接收一个十进制数字序列,然后将它转化为十六进制输出。 大致内容和uart实验类

关键字: printf 函数

使用IAR驱动CC2530的串口0,串口1,实现数据发送以及printf,中断接收数据uart.c/**************************************************

关键字: printf 串口

一、什么是可变参数我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个

关键字: C语言 printf 编程

USART1需要事先进行较为麻烦配置,配置之后发现即使用HAL函数发送语句还要事先以字符串方式定义,实在是麻烦,虽然后面另外自己写了一个简单的库来操作串口,但看到了更简单的方法,修改标准库中printf相关的两个函数

关键字: printf STM32 串口通信 usart打印

先说明一下,开发平台win7,工具RVMDK(keil),硬件stm32f103ve,打印到超级终端前两天开始关注一下一直被搁在一边的printf。。。其实应该有一个月前就有看了一下,调用C语言官方库,实现可变参数pri...

关键字: C语言 printf STM32 可变参数
关闭
关闭