找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1042|回复: 5
收起左侧

单片机串口发送丢字符 附源程序

[复制链接]
ID:970163 发表于 2022-3-17 16:12 来自手机 | 显示全部楼层 |阅读模式
51单片机,使用printf函数发送数据时,需要重写putchar函数
char putchar(char c)
{
   SBUF=c;
   while(bTI==0);
   bTI=0;
   return c;
}
bTI是位变量,在触发串口发送中断后软件清零。
调试发现,发送换行符\n时,只能收到n,而收不到\
什么原因,怎么解决呢?望指教,感谢!
回复

使用道具 举报

ID:935919 发表于 2022-3-17 17:00 | 显示全部楼层
把bTI换成 发送缓存区变空 标志位 看看, 不要用发送完成标志位
回复

使用道具 举报

ID:935919 发表于 2022-3-17 17:02 | 显示全部楼层
把bTI换成 "发送缓冲区变空" 标志位看看(此标志位不需要软件清0), 不要用发送完成标志位.
回复

使用道具 举报

ID:161164 发表于 2022-3-17 17:44 | 显示全部楼层
试试改一下位置
char putchar(char c)
{
   while(bTI==0);
   bTI=0;
   SBUF=c;
   return c;
}
回复

使用道具 举报

ID:401564 发表于 2022-3-18 10:37 | 显示全部楼层
个人认为,要重写库函数,还不是和自己再写一个重新写一个函数是一样的,所以,我用串口都是自己写的,不用printf函数的,这样自己也能加深对串口的理解和学习
以下是我现在用的串口发送函数,可以直接发送字符串Send_Out_txt("\n")         
//─────────────────────────────────────────────────────────────────────────────────────────────
void Send_Out_COM(unsigned char COM)        //发送一个字节数据
{
        while(busy);                                                //等待上次发送完成,Busy在串口2完成发送后清除       
        busy=1;
        SBUF=COM;       
}
//─────────────────────────────────────────────────────────────────────────────────────────────
void Send_Out_txt(char *p)                                 //发送TXT文本
{
   int a=0;
   while(p[a]!='\0')
                   {
                   Send_Out_COM(p[a]);
                   a++;
                   }
}
//─────────────────────────────────────────────────────────────────────────────────────────────

回复

使用道具 举报

ID:298123 发表于 2022-3-18 17:58 | 显示全部楼层
逻辑错误; 发送前把bTI置1,等待bTI变成0
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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