Keil C51重定向printf到串口
来源:互联网 发布:侠客风云传 mac玩 编辑:程序博客网 时间:2024/04/27 20:07
概述
进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向。
重定向
重定向printf很简单,我们知道,printf函数是调用putchar实现字符数据传送的。我们只要重写putchar函数,就可以对printf进输出重定向
代码清单
下面是自己在Keil 5环境下,使用单片机STC89C52/52RC测试printf重定向功能的代码清单
#include <reg52.h> #include <stdio.h> #define uint unsigned int #define uchar unsigned char uchar flag = 0; uchar buf = 0x55; void init_T1() { TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; } void uart_init() { SM0 = 0; SM1 = 1; REN = 1; EA = 1; ES = 1; } //UART1 发送串口数据 void UART1_SendData(char dat) { ES=0; //关串口中断 SBUF=dat; while(TI!=1);//等待发送成功 TI=0; //清除发送中断标志 ES=1; //开串口中断 } //UART1 发送字符串 void UART1_SendString(char *s) { while(*s)//检测字符串结束符 { UART1_SendData(*s++);//发送当前字符 } } //重写putchar函数 char putchar(char c) //printf函数会调用putchar() { UART1_SendData(c); return c; } void main() { init_T1(); uart_init(); UART1_SendString("Hello World!\r\n"); printf("printf Test!\r\n"); printf("Complie Time:%s\r\n", __TIME__); while(1) { if(flag) { ES = 0; SBUF = buf; while(TI ==1) TI = 0; ES = 1; flag = 0; } } } void UART_isr(void) interrupt 4 using 0 { TI = 1; buf = SBUF; while(!RI); flag = 1; TI = 0; RI = 0; }打开串口把波特率调成115200bps(不对的话调成9600),可以看到串口打印如下信息:
Hello World!
printf Test!
Complie Time:11:12:36
阅读全文
0 0
- Keil C51重定向printf到串口
- Keil C51重定向printf到串口
- Keil C51重定向printf到串口
- keil C51 重定向printf到串口
- keil C51 printf 重定向 串口
- keil c51 printf 重定向
- Keil重定向printf到串口UART输出
- Keil 重定向 printf
- 编写读取内存的程序 ——keil uVision3 printf函数重定向到串口输出
- 【STM32】keil MDK下重定向printf到串口(基于STM32CubeMX)
- STM32中printf重定向到串口
- STM32中printf重定向到串口
- 关于printf重定向到串口
- STM32中printf重定向到串口
- 串口输出重定向到 printf
- STM32输出调试信息-printf重定向到串口
- CoIDE串口重定向printf
- printf in KEIL C51
- leetcode 657. Judge Route Circle
- selenium2.0关于python的常用函数(一)
- PHP之判断函数和方法是否存在
- ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[4096]
- lodop打印插件用法
- Keil C51重定向printf到串口
- CodeForces
- Python DataFrame 添加行
- 用函数交换两个引用指向的对象--java
- eclipse默认编码
- 拦截导弹
- SVN提交文件失败:系统找不到指定路径
- C学习笔记20170813
- 分布式锁的几种实现方式~