51单片机Keil C51下使用printf输出到串口,为何初始化了串口之后就可以使用了?
使用的51单片机是C8051F340,编译环境是KeiluVision4仅仅在对串口进行初始化后,发现就可以使用printf函数直接将内容输出到串口了,这是为什么呢?串口...
使用的51单片机是C8051F340,编译环境是Keil uVision4
仅仅在对串口进行初始化后,发现就可以使用printf函数直接将内容输出到串口了,这是为什么呢?
串口初始化代码如下:
void UART0_Create(void)
{
P0MDOUT |= (1 << 4);//P0.4为串口输出脚,设该管脚为输出
XBR0 |= (1 << 0);//UART0连到P0.4(TX0) P0.5(RX0)引脚
XBR1 |= (1 << 6); //使能交叉开关
SCON0 = 0x10; // SCON0: 波特率可设置的8位串口
// 忽略停止位逻辑电平
// 接收使能
// 第九位是0位
// 清除发送和接收中断标志
CKCON |= (1 << 3);//定时器1使用系统时钟
TH1 = (256-UART0_PCLK/2/UART0_BAUDRATE);
TL1 = TH1;
TMOD &= ~0xf0;//TMOD: 定时器1工作为8位自动重装载模式
TMOD |= 0x20;
TR1 = 1;//开启定时器1
TI0 = 1;//Indicate TX0 ready
}
main函数如下:
#include <stdio.h>
void main(void)
{
UART0_Create();
printf("Hello World!\n");
}
请问printf是如何自动找到单片机的串口,并将内容输出的? 展开
仅仅在对串口进行初始化后,发现就可以使用printf函数直接将内容输出到串口了,这是为什么呢?
串口初始化代码如下:
void UART0_Create(void)
{
P0MDOUT |= (1 << 4);//P0.4为串口输出脚,设该管脚为输出
XBR0 |= (1 << 0);//UART0连到P0.4(TX0) P0.5(RX0)引脚
XBR1 |= (1 << 6); //使能交叉开关
SCON0 = 0x10; // SCON0: 波特率可设置的8位串口
// 忽略停止位逻辑电平
// 接收使能
// 第九位是0位
// 清除发送和接收中断标志
CKCON |= (1 << 3);//定时器1使用系统时钟
TH1 = (256-UART0_PCLK/2/UART0_BAUDRATE);
TL1 = TH1;
TMOD &= ~0xf0;//TMOD: 定时器1工作为8位自动重装载模式
TMOD |= 0x20;
TR1 = 1;//开启定时器1
TI0 = 1;//Indicate TX0 ready
}
main函数如下:
#include <stdio.h>
void main(void)
{
UART0_Create();
printf("Hello World!\n");
}
请问printf是如何自动找到单片机的串口,并将内容输出的? 展开
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
加了串口初始化程序后的printf函数能用的真正关键在于TI0先拉高了(TI0=1),因为第一次运行到printf函数的时候,如果前面没有TI0=1,那么程序指针PC就一直在这条语句上判断,也就死在这里等待。所以要使用printf,开头必须要先置TI0(传统51为TI)为1。
详见
http://wenku.baidu.com/link?url=av9rridiaYoRfjr-Wty7ynDQw2tQ8qsv4kUQDQW_vZavfxFg7cp5eFehO80pnwsj8pvRSnWaQFWajG2vpa8HKVY8vVeWbmaAeUmtaj8ONsm
望采纳!
详见
http://wenku.baidu.com/link?url=av9rridiaYoRfjr-Wty7ynDQw2tQ8qsv4kUQDQW_vZavfxFg7cp5eFehO80pnwsj8pvRSnWaQFWajG2vpa8HKVY8vVeWbmaAeUmtaj8ONsm
望采纳!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
单片机C对标准C进行了一些扩充、删减和更改优化,因为keil里的单片机c
把printf函数重定义到串口了,这是单片机C与标准C的差别之一。
把printf函数重定义到串口了,这是单片机C与标准C的差别之一。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
他有默认的串口吧,刚好你的这一串口可用,所以就输出了。一般都要在设备管理器中找到可用串口然后对应设置的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询