找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 946|回复: 8
收起左侧

单片机串口通信程序printf ("\nYou transfer %s",s)的意思?

[复制链接]
ID:1027319 发表于 2022-5-17 16:11 | 显示全部楼层 |阅读模式
printf ("\nYou transfer %s",s)
你好 我想问一下这句话在程序中是什么意思吗
回复

使用道具 举报

ID:1027319 发表于 2022-5-17 16:12 | 显示全部楼层
这是大神的原代码
#include <reg52.h>
#include <stdio.h>              //printf头文件
#define uc unsigned char
#define uint unsigned int

uc flag,i,flag_t,s[50]="",j=0,flag_n=0;
uc code table[]="I get ";        

void init()
{
        TMOD=0x20;          //定时器工作方式,选择了定时器1,工作方式2 八位初值自动重装的8位定时器。                 
        TH1=0xfd;            //定时器1初值        ,设置波特率为9600 晶振11.0529MHZ?
        TL1=0xfd;
        TR1=1;                    //开启定时器1

        SM0=0;
        SM1=1;                  //10位异步接收,(8位数据)波特率可变
  REN=1;                  //允许串行口接收位
        EA=1;              //允许中断(总闸)
        ES=1;                    //允许串口中断
}
void main()
{
        init();
        while(1)
{
          if(flag==1)
        {          if(flag_n!=0)                   //使第二个及以后I get xx 换行,不与You transfer在一行
                        {TI=1;
                        printf("\n");
                        while(!TI);
                        TI=0;
                        }
                for(i=0;i<6;i++)
                {
                        SBUF=table[i];//串口缓冲器
                        while(!TI);
                        TI=0;
                }
                        for(i=0;s[i]!='#'&&i<50;i++)
                {
                        SBUF=s[i];
                        while(!TI);
                        TI=0;
                }
                flag=0;
        }
        if(flag_t==1)                                                   //发送完毕之后,在电脑端输出。
        {
                TI=1;                                                               //printf之前必须将T1置为1才行。
                printf ("\nYou transfer %s",s);   
                while(!TI);
                TI=0;
                flag_t=0;
        }       
}
}

void ser() interrupt 4
{
                if(RI)                 //接收数据,手动将RI清0串行口的接收中断标志
        {            
                RI=0;
               
                if(flag==0&&j!=0)//1.循环赋值为'\0'(字符串结尾标志符),j=0,为了第二次传递字符串是又是从头输出
                {                         //2.flag为0和j不为0时,保证是第二次及以后,传输字符串(控制输出格式)
                        flag_n++;                         
                        for(j=0;s[j]!='#'&&j<50;j++)
                                  s[j]='\0';
                       
                                  j=0;
                }
                s[j]=SBUF;
                flag=1;
                if(s[j]=='#'||j==49)         //以'#'作为传送字符串的结尾符,我定义的字符数组最长为50所以49也应该结束。
                        flag_t=1;
                else
                         j++;
        }c
        if(TI)     //发送数据
        {
        }         
}
回复

使用道具 举报

ID:883242 发表于 2022-5-17 16:20 | 显示全部楼层
就是把接收到的字符串用printf发出去,以判断是否正常接收。
回复

使用道具 举报

ID:1027319 发表于 2022-5-17 16:57 | 显示全部楼层
Hephaestus 发表于 2022-5-17 16:20
就是把接收到的字符串用printf发出去,以判断是否正常接收。

printf("\n");
那这句不也是可以判断是否正常接收吗
回复

使用道具 举报

ID:824490 发表于 2022-5-17 17:01 | 显示全部楼层
for(j=0;s[j]!='#'&&j<50;j++)   ==>for循环还可以这么用?妙。学习了!
回复

使用道具 举报

ID:624769 发表于 2022-5-17 17:21 | 显示全部楼层
DaYzz1114 发表于 2022-5-17 16:57
printf("\n");
那这句不也是可以判断是否正常接收吗

一个是发换行, 最多是证明 程序认为正常接收了.
一个是发内容, 让你肉眼去判断, 接收的正常么.
这两个,二选一也好,都用也好,具体要发什么,要如何判断, 这个应该是你 ----- 写程序的人, 来设计的,不是你来反问 不是 XXXXX 也可以么?
回复

使用道具 举报

ID:1027319 发表于 2022-5-17 18:08 | 显示全部楼层
188610329 发表于 2022-5-17 17:21
一个是发换行, 最多是证明 程序认为正常接收了.
一个是发内容, 让你肉眼去判断, 接收的正常么.
这两个 ...

啊我知道了 谢谢老师
回复

使用道具 举报

ID:759805 发表于 2022-5-18 13:33 | 显示全部楼层
查了半天发现参考的是郭天祥书里的代码
回复

使用道具 举报

ID:1026496 发表于 2022-5-18 13:45 | 显示全部楼层
标准打印输出 建议看看printf 函数
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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