专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
C8051f中用keil编程,printf()这个函数是不是直接向串口输?
2020-01-23 14:38
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
4009
12
12
C8051f中用keil编程,printf()这个函数是不是直接向串口输出字符串?用这个函数时,输出的是哪个串口(我用的C8051f023有两个串口)?用这个函数时,串口是否要初始化?初始化时主要设置哪几个参数?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
techbaby
2020-01-24 19:46
以前项目中使用的代码,MCU貌似是C8051F520A
/*
***************************************************************************************************
*
* 上海有限公司
* 研 发 部
* Shanghai Co.,Ltd
* All Rights Reserved
*
*------------------------------------------------文件信息------------------------------------------
* 文 件 名: uart0.c
* 版 本: v0.0
* 日 期: 2012.06.06
* 作 者:
* 描 述: uart0串口通信
***************************************************************************************************
*/
/*
***************************************************************************************************
* include files
***************************************************************************************************
*/
// #pragma src
#include "cpu.h"
#include "uart0.h"
#include "flash.h"
#include "adc0.h"
/*
***************************************************************************************************
* predefinition
***************************************************************************************************
*/
/*
***************************************************************************************************
* constants ¯os & variables
***************************************************************************************************
*/
#define BAUDRATE (9600) // Baud rate of UART in bps
FRAME frame;
//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
//-----------------------------------------------------------------------------
static void _UART0_Init (void)
{
SCON0 = 0x10; // SCON0: 8-bit variable bit rate
// level of STOP bit is ignored
// RX enabled
// ninth bits are zeros
// clear RI0 and TI0 bits
#if (SYSCLK/BAUDRATE/2/256 < 1)
TH1 = -(SYSCLK/BAUDRATE/2);
CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
CKCON |= 0x08;
#elif (SYSCLK/BAUDRATE/2/256 < 4)
TH1 = -(SYSCLK/BAUDRATE/2/4);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
CKCON |= 0x01;
#elif (SYSCLK/BAUDRATE/2/256 < 12)
TH1 = -(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
#else
TH1 = -(SYSCLK/BAUDRATE/2/48);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
CKCON |= 0x02;
#endif
TL1 = TH1; // Init Timer1
TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
TMOD |= 0x20;
TR1 = 1; // START Timer1
TI0 = 1; // Indicate TX0 ready
ET1 = 1; // Timer1 interrupt enabled
// ES0 = 1; // Enable UART0 interrupt
}
/*
***************************************************************************************************
* 函数名称: uart0_init()
* 输 入:
* 输 出:
* 作 者:
* 日 期: 2012.06.15
* 功能描述: uart0 init
***************************************************************************************************
*/
void uart0_init(void)
{
_UART0_Init();
frame.flag = FALSE;
}
/*
* putchar (basic version): expands ' ' into CR LF
*/
char putchar (char c)
{
if (c == ' ')
{
while (!TI0);
TI0 = 0;
SBUF0 = 0x0d; /* output CR */
}
while (!TI0);
TI0 = 0;
return (SBUF0 = c);
}
/*
***************************************************************************************************
* 函数名称: uart0_init()
* 输 入:
* 输 出:
* 作 者:
* 日 期: 2012.06.15
* 功能描述: uart0 init
***************************************************************************************************
*/
void frame_scan(void)
{
if (frame.flag == TRUE)
{
if ((FRAME_START == frame.buf[0]) /* 帧开始 */
&& (FRAME_STOP == frame.buf[3])) /* 帧结束 */
{
if (FRAME_TYPE_V == frame.buf[1]) /* 帧类型:电压V */
{
if (FRAME_TYPE_INC == frame.buf[2]) /* 修改类型:增加 */
{
flash_change(TYPE_VOLTAGE, flash_voltage_value + ADC_VOLTAGE_MAX/2500);
printf("SV+P ");
}
else if (FRAME_TYPE_DEC == frame.buf[2]) /* 修改类型:减少 */
{
flash_change(TYPE_VOLTAGE, flash_voltage_value - ADC_VOLTAGE_MAX/2500);
printf("SV-P ");
}
}
else if (FRAME_TYPE_I == frame.buf[1]) /* 帧类型:电流I */
{
if (FRAME_TYPE_INC == frame.buf[2]) /* 修改类型:增加 */
{
flash_change(TYPE_CURRENT, flash_current_value + 2);
printf("SI+P ");
}
else if (FRAME_TYPE_DEC == frame.buf[2]) /* 修改类型:减少 */
{
flash_change(TYPE_CURRENT, flash_current_value - 2);
printf("SI-P ");
}
}
}
frame.flag = FALSE;
}
}
/*
***************************************************************************************************
* 函数名称: uart0_init()
* 输 入:
* 输 出:
* 作 者:
* 日 期: 2012.06.15
* 功能描述: uart0 init
***************************************************************************************************
*/
// static void uart0_isr(void) interrupt INTERRUPT_UART0
// {
// static bool flag = FALSE;
// static int8u cnt;
// if (RI0)
// {
// if (frame.flag == FALSE)
// {
// if (flag == TRUE)
// {
// frame.buf[cnt++] = SBUF0;
// if (cnt > FRAME_BUF_MAX - 1)
// {
// cnt = 0;
// frame.flag = TRUE;
// flag = FALSE;
// }
// }
// else
// {
// frame.buf[0] = SBUF0;
//
// if (FRAME_START == frame.buf[0])
// {
// cnt = 1;
// flag = TRUE;
// }
// }
// }
// }
//
// RI0 = 0;
// TI0 = 0;
// }
复制代码
加载中...
查看其它12个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
以前项目中使用的代码,MCU貌似是C8051F520A
- /*
- ***************************************************************************************************
- *
- * 上海有限公司
- * 研 发 部
- * Shanghai Co.,Ltd
- * All Rights Reserved
- *
- *------------------------------------------------文件信息------------------------------------------
- * 文 件 名: uart0.c
- * 版 本: v0.0
- * 日 期: 2012.06.06
- * 作 者:
- * 描 述: uart0串口通信
- ***************************************************************************************************
- */
- /*
- ***************************************************************************************************
- * include files
- ***************************************************************************************************
- */
- // #pragma src
- #include "cpu.h"
- #include "uart0.h"
- #include "flash.h"
- #include "adc0.h"
- /*
- ***************************************************************************************************
- * predefinition
- ***************************************************************************************************
- */
- /*
- ***************************************************************************************************
- * constants ¯os & variables
- ***************************************************************************************************
- */
- #define BAUDRATE (9600) // Baud rate of UART in bps
- FRAME frame;
- //-----------------------------------------------------------------------------
- // UART0_Init
- //-----------------------------------------------------------------------------
- //
- // Return Value : None
- // Parameters : None
- //
- // Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
- //-----------------------------------------------------------------------------
- static void _UART0_Init (void)
- {
- SCON0 = 0x10; // SCON0: 8-bit variable bit rate
- // level of STOP bit is ignored
- // RX enabled
- // ninth bits are zeros
- // clear RI0 and TI0 bits
- #if (SYSCLK/BAUDRATE/2/256 < 1)
- TH1 = -(SYSCLK/BAUDRATE/2);
- CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
- CKCON |= 0x08;
- #elif (SYSCLK/BAUDRATE/2/256 < 4)
- TH1 = -(SYSCLK/BAUDRATE/2/4);
- CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
- CKCON |= 0x01;
- #elif (SYSCLK/BAUDRATE/2/256 < 12)
- TH1 = -(SYSCLK/BAUDRATE/2/12);
- CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
- #else
- TH1 = -(SYSCLK/BAUDRATE/2/48);
- CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
- CKCON |= 0x02;
- #endif
- TL1 = TH1; // Init Timer1
- TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
- TMOD |= 0x20;
- TR1 = 1; // START Timer1
- TI0 = 1; // Indicate TX0 ready
- ET1 = 1; // Timer1 interrupt enabled
-
- // ES0 = 1; // Enable UART0 interrupt
- }
- /*
- ***************************************************************************************************
- * 函数名称: uart0_init()
- * 输 入:
- * 输 出:
- * 作 者:
- * 日 期: 2012.06.15
- * 功能描述: uart0 init
- ***************************************************************************************************
- */
- void uart0_init(void)
- {
- _UART0_Init();
- frame.flag = FALSE;
- }
- /*
- * putchar (basic version): expands '
' into CR LF
- */
- char putchar (char c)
- {
- if (c == '
')
- {
- while (!TI0);
- TI0 = 0;
- SBUF0 = 0x0d; /* output CR */
- }
- while (!TI0);
- TI0 = 0;
- return (SBUF0 = c);
- }
- /*
- ***************************************************************************************************
- * 函数名称: uart0_init()
- * 输 入:
- * 输 出:
- * 作 者:
- * 日 期: 2012.06.15
- * 功能描述: uart0 init
- ***************************************************************************************************
- */
- void frame_scan(void)
- {
- if (frame.flag == TRUE)
- {
- if ((FRAME_START == frame.buf[0]) /* 帧开始 */
- && (FRAME_STOP == frame.buf[3])) /* 帧结束 */
- {
- if (FRAME_TYPE_V == frame.buf[1]) /* 帧类型:电压V */
- {
- if (FRAME_TYPE_INC == frame.buf[2]) /* 修改类型:增加 */
- {
- flash_change(TYPE_VOLTAGE, flash_voltage_value + ADC_VOLTAGE_MAX/2500);
- printf("SV+P
");
- }
- else if (FRAME_TYPE_DEC == frame.buf[2]) /* 修改类型:减少 */
- {
- flash_change(TYPE_VOLTAGE, flash_voltage_value - ADC_VOLTAGE_MAX/2500);
- printf("SV-P
");
- }
- }
- else if (FRAME_TYPE_I == frame.buf[1]) /* 帧类型:电流I */
- {
- if (FRAME_TYPE_INC == frame.buf[2]) /* 修改类型:增加 */
- {
- flash_change(TYPE_CURRENT, flash_current_value + 2);
- printf("SI+P
");
- }
- else if (FRAME_TYPE_DEC == frame.buf[2]) /* 修改类型:减少 */
- {
- flash_change(TYPE_CURRENT, flash_current_value - 2);
- printf("SI-P
");
- }
- }
- }
-
- frame.flag = FALSE;
- }
- }
- /*
- ***************************************************************************************************
- * 函数名称: uart0_init()
- * 输 入:
- * 输 出:
- * 作 者:
- * 日 期: 2012.06.15
- * 功能描述: uart0 init
- ***************************************************************************************************
- */
- // static void uart0_isr(void) interrupt INTERRUPT_UART0
- // {
- // static bool flag = FALSE;
- // static int8u cnt;
- // if (RI0)
- // {
- // if (frame.flag == FALSE)
- // {
- // if (flag == TRUE)
- // {
- // frame.buf[cnt++] = SBUF0;
- // if (cnt > FRAME_BUF_MAX - 1)
- // {
- // cnt = 0;
- // frame.flag = TRUE;
- // flag = FALSE;
- // }
- // }
- // else
- // {
- // frame.buf[0] = SBUF0;
- //
- // if (FRAME_START == frame.buf[0])
- // {
- // cnt = 1;
- // flag = TRUE;
- // }
- // }
- // }
- // }
- //
- // RI0 = 0;
- // TI0 = 0;
- // }
复制代码一周热门 更多>