找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3039|回复: 2
打印 上一主题 下一主题
收起左侧

分享一个51单片机实现printf串口打印方法 附源程序

[复制链接]
跳转到指定楼层
楼主
ID:351097 发表于 2019-7-22 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机具有收发串口,可以可PC进行串口通信。但是如果要实现类似printf(“data = %d\naddr data = %x\n”,a,&a),就需要写一个printf函数,里面封装串口发送功能。//printf打印函数

int Printf(const char*fmt, ...)
{
    int  ulLen;
    va_list ap;
    char *pBuf = (char*)malloc(200);  // 开辟缓冲区
    va_start(ap, fmt);
    ulLen = vsprintf(pBuf, fmt, ap);        // 用虚拟打印函数实现
    va_end(ap);
    Uart_write((uint8*)pBuf, ulLen); // 从串口0输出
free(pBuf);    // 释放内存空间
PBuf = NULL;
    return ulLen;
};
//串口发送ullen个字节的数据函数
void Uart_write((uint8*)pBuf, ulLen)
{
    uint8 i;
    for(i = 0; i < ullen ; i++)
    {
       SBUF=*pBuf;  //数据加载到发送缓冲区
       while(!TI);   //等待发送完成
       pBuf++;     //指针指向下一组数据
       TI=0;     
     }   
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:421308 发表于 2019-7-22 21:50 | 只看该作者
有工程吗
回复

使用道具 举报

板凳
ID:351097 发表于 2019-7-23 09:09 | 只看该作者

没有工程。我这个只是提供一个串口打印的方法。就算是其他类型的单片机,也可以这样处理。也就是直接修改void Uart_write((uint8*)pBuf,ulLen)里面的串口发送驱动部分
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表