ABOV单片机UART串口通讯中Printf函数实现讲解及示例代码-[MC96F6332D]
一、准备工作
1、KEIL C51编译环境
2、CodeGen8 代码生成器
3、MC96F6332D 开发板
4、USB-OCD II仿真器
二、生成串口代码
1、在CodeGen8 代码生成器的外设窗口中选择内部RC时钟作为时钟源,设置时钟源的频率为8MHz,配置UART的引脚P40(Pin8)-->RXD0引脚, P41(Pin9)-->TXD0引脚;配置UART0的参数为ASync. 9600bps N 8 1;具体配置如下图①所示,代码生成部分如下图②所示;
2、点击 C 图标,自动打开KEIL C51软件;针对串口部分的代码进行重新修改;
①:添加stdio头文件:因为Printf函数是标准的I/O函数,所以在工程中需要添加头文件 #include "stdio.h"
②:重定义putchar和getchar函数:关于Printf函数底层调用的putchar和getchar函数属于C语言基础知识,这里不再赘述;重定义的示例代码如下所示:
/*** @brief Retargets the C library printf function to the UART.* @param[in] c Character to send* @retval char Character sent* @par Required preconditions:* - None*/
char putchar(char c)
{/* Write a character to the UART */ UART_write(0,c);return (c);}/*** @brief Retargets the C library scanf function to the UART.* @param[in] None* @retval char Character to Read* @par Required preconditions:* - None*/
char getchar (void)
{int c = 0; c = UART_read(0);return (c);
}
③:UART_write(0,c);和UART_read(0);直接使用CodeGen8 代码生成器生成的代码,这样可以增加代码的可移植性;因为这里用到的是串口0,所以串口读取和写入函数中关于串口编号的参数固定为0;read/write的示例代码如下:
//串口读取函数
unsigned char UART_read(unsigned char ch)
{unsigned char dat;if (ch == (unsigned char)0) { // UART0while(!(USI0ST1 & 0x20)); // waitdat = USI0DR; // read}return dat;
}//串口写入函数
void UART_write(unsigned char ch, unsigned char dat)
{if (ch == (unsigned char)0) { // UART0while(!(USI0ST1 & 0x80)); // waitUSI0DR = dat; // write}
}
这样修改后的工程就可以方便的调用Printf函数进行MCU的调试了。
④:在主函数的循环体中增加函数:printf("%c",getchar());可以实现串口数据的透传功能;
3、编译该工程并下载程序到MCU。
三、实验现象(具体内容可以参考工程中的Readme.txt文件)
1、循环体中增加printf("%c",getchar());可以实现串口数据的透传功能,即PC发送数据到MCU,MCU会返回相同的数据到PC端。
2、具体的代码可以访问链接:https://share.weiyun.com/5Ivphmm;进行免费下载
因为小编自己能力水平有限,文中难免有错误或表达失误的信息,还望广大阅读者留言批评指正,谢谢。
ABOV单片机UART串口通讯中Printf函数实现讲解及示例代码-[MC96F6332D]相关推荐
- ABOV单片机UART串口通讯实现讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成串口通讯代码 1.在CodeGen8 代码生成器 ...
- ABOV单片机内部中断优先级寄存器IP1x/IPx的设置代码实现讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.外部中断EINT示例代码-MC96F6332D 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.代码部分 1.现代单片机MC96F ...
- ABOV单片机外部引脚中断EINT实现讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成外部引脚中断的代码 1.在CodeGen8 代码 ...
- ABOV单片机端口引脚GPIO讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成GPIO的代码 1.在CodeGen8 代码生成 ...
- ABOV单片机时钟切换讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成系统时钟代码 1.在CodeGen8 代码生成器 ...
- 51单片机——UART串口通讯-波特率可选,增添定时器2产生波特率1.0
1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.定时器1波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,字符串发送函数. 3.增添:定时器2波特率有5种可选择 ...
- 51单片机——UART串口通讯-波特率4种模式可选1.0
1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,n个字符发送函数. 3.有几个寄存器默认的reg52.h里面没 ...
- ABOV单片机模数转换ADC部分代码实现讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.ADC的配置和代码生成 1.在CodeGen8 代码 ...
- ABOV单片机内部看门狗WDT的代码实现讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.内部看门狗代码生成 1.在CodeGen8 代码生成 ...
最新文章
- 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求
- py2数据分析_利用数据
- web页面到ajax,页面使用ajax加载页面后如果运行其中的js,webpack如何多页面展示...
- C# 创建、部署和调用WebService的示例
- 基于STM32系列芯片的 IAP实现的探索
- 4月24日Serverless Developer Meetup上海亮相
- 北京沙龙报名 | 关于Dubbo开源的那些事儿
- easyui datagrid 浏览器像素及改变表、列宽问题
- 面向对象之反射和其他内置方法
- sql用于字符串的聚合函数_SQL字符串函数用于数据整理(争用)
- oracle排列组合,Oracle SQL排列组合之排列问题
- Ribbon的基本应用
- JZOJ5773 简单数学题
- B站喷子脚本,bilibili喷人
- 【UV打印机】理光喷头组合说明(24H)
- 俄罗斯方块游戏的消行实现
- linux启动时、登录时或注销时执行脚本
- 使用 PHP-FFMpeg 操作视频/音频文件(转)
- keil如何添加STM32系列
- hive编程中的细枝末节