历史上的今天
今天是:2025年05月13日(星期二)
2020年05月13日 | 51单片机 printf函数 调试程序
2020-05-13 来源:eefocus
主要分三个部分(1)51单片机程序部分;(2)keil工具部分;(3)为何printf输出为串口。
(1)51单片机程序部分
#include #include void InitUART(void)//使用定时器1作为串口波特率发生器 { TH1 = 0xF3; //晶振12mhz 波特率串口上设为2400才不显示乱码代码是4800 TL1 = TH1; TMOD |= 0x20; //定时器1方式2 SCON = 0x50; //串口接收使能 ES = 1; //串口中断使能 TR1 = 1; //定时器1使能 TI = 1; //发送中断标记位,必须设置 } //毫秒延时函数 void delay_ms(unsigned int t) { unsigned char a,b; while(t--) { for(b=102;b>0;b--) for(a=3;a>0;a--); } } void main() { InitUART(); //初始化串口 EA = 1; //开总中断 while(1) { delay_ms(500); printf("hellon");//串口打印结果 } } 代码部分注意事项: 代码中包含 头文件#include 串口初始化时,TI = 1; (2)keil设置显示串口输出结果 在C51中、printf和scanf函数主要用于串行数据的收发 有时在进行软件调试的时候,需要使用printf函数输出一些结果 要在Keil中看到这些结果,只需要两步:(当然首先要进入调试界面再做以下两步) 1 设置 打开Peripherals-->Serial窗口,选择IRQ中的TI、RI两个选项 2 打开输出窗口 打开View-->Serial Window #1窗口 在程序中的printf语句的输出就显示在这个窗口中 现在就到程序窗口运行程序、运行结束后打开Serial窗口就可以看到printf的输出了。 (3)为何printf从串口输出 查看了keil的帮助文件里面的printf函数说明,原来printf函数最终是调用putchar函数来实现打印输出字符的。 KeilC51LIB文件夹里面找到了putchar.c文件,putchar函数使用TI和SBUF,确定为串口终端输出。 注意:printf重定向功能,即用户自己定义putchar函数,例如 //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) { UART1_SendData(c); return c; }
下一篇:基于51 单片机的串口收发数据
史海拾趣
|
今天运气很好,刚一上车就有座位,于是我就从容地从包里拿出临走前从办公室里顺的两瓣柚子,旁若无人地吃了起来,想着SOSO同志今天买的比上次好。 吃着柚子,思考这几天论坛里的一个也算是大热的帖子。我关注他,是EEWORLD论坛里几乎没有如此针锋 ...… 查看全部问答> |
|
之前见到有人发帖“lpc1343之三:通过USB接口控制开发板LED闪烁速度并读取AD转换结果”,详见https://bbs.eeworld.com.cn/thread-106706-1-2.html,作者很牛很有实力,1343的C源码至今我还没有完全看懂,但鄙人用VB做软件,最近挤出点时间解决了VB ...… 查看全部问答> |
|
请问:在嵌入式(wince)下如何通过GPRS模块利用手机卡提供的GPRS上网 各位前辈大家好。 请问:在嵌入式(wince)下如何通过GPRS模块利用手机卡提供的GPRS上网,我买了个嵌入式开发板utu-s3c2440-s和GSM/GPRS/CDMA-MODEM模块,现在连接上之后,可以实现给其他手机发送信息和拨打电话,但不知怎么实现通过它实现无线上 ...… 查看全部问答> |
|
为什么程序加while(1),运行起来程序还是会跳出while执行上面的初始化呢? 为什么程序加while(1),运行起来程序还是会跳出while执行它上面的初始化呢? 我是触摸屏加ADC采样,触摸屏是GPIO低电平产生中断,ADC是定时器触发中断。两个一起用,触摸液晶屏总是会死掉,没一点反应,还有就是会跳出while(1),执行上面的ADC初 ...… 查看全部问答> |
|
EZ430-RF2500 CC2500无线开发套件,EZ430-TMS37157 PaLFI 无源低频评估套件,展示 拿到两套开发套件,开包展示ing。EZ430-RF2500 CC2500无线开发套件EZ430-TMS37157 PaLFI 无源低频评估套件… 查看全部问答> |




