数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1005|回复: 2

[C51] printf()重定向到单片机串口程序

[复制链接]
发表于 2022-8-26 21:29:19 | 显示全部楼层 |阅读模式
在B站看到printf()重定向到单片机串口,网上下载示例,修改调试后在普中开发板上通过。确实好用,但要20多RAM,1K多代码。
#include <stdio.h>
#include<STC90C5xAD.h>
unsigned int j;
void UartInit();


//发送一个字节数据
void sendByte(unsigned char dat){
   SBUF = dat;     //写入发送缓冲寄存器
   while(!TI);    //等待发送完成,TI发送溢出标志位 置1
   TI = 0;      //对溢出标志位清零        
}

/*void sendString(unsigned char *string){
        while(*string!='\0'){    //指针的数据没到最后一位一直执行循环体
                sendByte(*string++); //发送指针指向的数据(字节byte)
                                                         //指针自增,指向下一个数据
        }
}  */

/*
**重写printf调用的putchar函数,重定向到串口输出
**需要引入头文件<stdio.h>
*****/
char putchar(char c){
        //输出重定向到串口
        sendByte(c);
        return c;  //返回给函数的调用者printf
}

void main ()
{
UartInit();
        
        
while(1)
        {
        printf("普中科技有限公司\n\r");
         
        for (j=0;j<3000;j++);
        }


}

void UartInit(void)                //4800bps@22.1MHz
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XE8;                    //计数器初始值设置,注意波特率是4800的
        TL1=0XE8;
//        ES=1;                                                //打开接收中断
//        EA=1;                                                //打开总中断
        TR1=1;                //启动定时器1
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
 楼主| 发表于 2022-8-27 13:04:35 | 显示全部楼层
hujj 发表于 2022-8-27 08:57
发送字节的代码可以直接写在字符串发送的函数里,减少一个多余的中断调用,提高程序的运行效率。 ...

试过,编译通不过,暂时没找到原因。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-23 03:14 , Processed in 0.171600 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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