主要分三个部分(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单片机使用printf串口调试
下一篇:基于51 单片机的串口收发数据
推荐阅读最新更新时间:2024-11-10 16:27
设计资源 培训 开发板 精华推荐
- MC32PF3000A7EP PMIC 解决方案电源管理的典型应用
- 使用符合 EN55022 B 类(24Vin 和 48Vin,单输出)具有 EMC 滤波的 RP40-4815SFR DC/DC 转换器的典型应用
- LT3970IDDB-5 12V 降压转换器的典型应用
- AZ1117C 低压差线性稳压器的典型应用 Adjustbale 版本
- 使用 NXP Semiconductors 的 TDA8933B 的参考设计
- 113990039, 433Mhz 无线串行收发器模块 - 1 公里
- LT3686A 的典型应用 - 采用 3mm-3mm DFN 和 MSE 的 37V/1.2A 降压型稳压器
- NHS3100UCODEADK: NHS3100 - UCODE-I2C
- LT3091IR 重合跟踪电源的典型应用
- 具有 12V VDD 输入的 LTC2945CUD-1 3.3V 输入电源监视器的典型应用