一、准备工作

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]相关推荐

  1. ABOV单片机UART串口通讯实现讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成串口通讯代码 1.在CodeGen8 代码生成器 ...

  2. ABOV单片机内部中断优先级寄存器IP1x/IPx的设置代码实现讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.外部中断EINT示例代码-MC96F6332D 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.代码部分 1.现代单片机MC96F ...

  3. ABOV单片机外部引脚中断EINT实现讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成外部引脚中断的代码 1.在CodeGen8 代码 ...

  4. ABOV单片机端口引脚GPIO讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成GPIO的代码 1.在CodeGen8 代码生成 ...

  5. ABOV单片机时钟切换讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成系统时钟代码 1.在CodeGen8 代码生成器 ...

  6. 51单片机——UART串口通讯-波特率可选,增添定时器2产生波特率1.0

    1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.定时器1波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,字符串发送函数. 3.增添:定时器2波特率有5种可选择 ...

  7. 51单片机——UART串口通讯-波特率4种模式可选1.0

    1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,n个字符发送函数. 3.有几个寄存器默认的reg52.h里面没 ...

  8. ABOV单片机模数转换ADC部分代码实现讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.ADC的配置和代码生成 1.在CodeGen8 代码 ...

  9. ABOV单片机内部看门狗WDT的代码实现讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.内部看门狗代码生成 1.在CodeGen8 代码生成 ...

最新文章

  1. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求
  2. py2数据分析_利用数据
  3. web页面到ajax,页面使用ajax加载页面后如果运行其中的js,webpack如何多页面展示...
  4. C# 创建、部署和调用WebService的示例
  5. 基于STM32系列芯片的 IAP实现的探索
  6. 4月24日Serverless Developer Meetup上海亮相
  7. 北京沙龙报名 | 关于Dubbo开源的那些事儿
  8. easyui datagrid 浏览器像素及改变表、列宽问题
  9. 面向对象之反射和其他内置方法
  10. sql用于字符串的聚合函数_SQL字符串函数用于数据整理(争用)
  11. oracle排列组合,Oracle SQL排列组合之排列问题
  12. Ribbon的基本应用
  13. JZOJ5773 简单数学题
  14. B站喷子脚本,bilibili喷人
  15. 【UV打印机】理光喷头组合说明(24H)
  16. 俄罗斯方块游戏的消行实现
  17. linux启动时、登录时或注销时执行脚本
  18. 使用 PHP-FFMpeg 操作视频/音频文件(转)
  19. keil如何添加STM32系列
  20. hive编程中的细枝末节

热门文章

  1. Jbuilder2005开发小技巧
  2. 2019录取通知书上线,别人家的通知书能3D立体,还会唱歌……
  3. 案例(我们要的是开发者,而不是hacker)辩驳
  4. 音频焦点 (audio focus)(二)
  5. 卸载 VirusScan 中的 ePolicy Orchestrator 代理
  6. 经典扫雷——JS原生代码
  7. 阿里天池竞赛 A股上市公司营收预测 使用LSTM模型做时序预测
  8. 智能防雷,智能防雷系统的应用研究方案
  9. location.href的使用
  10. MongoDB的Mongoose简介