标题: 单片机串口通信程序printf ("\nYou transfer %s",s)的意思? [打印本页]

作者: DaYzz1114    时间: 2022-5-17 16:11
标题: 单片机串口通信程序printf ("\nYou transfer %s",s)的意思?
printf ("\nYou transfer %s",s)
你好 我想问一下这句话在程序中是什么意思吗

作者: DaYzz1114    时间: 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)     //发送数据
        {
        }         
}
作者: Hephaestus    时间: 2022-5-17 16:20
就是把接收到的字符串用printf发出去,以判断是否正常接收。
作者: DaYzz1114    时间: 2022-5-17 16:57
Hephaestus 发表于 2022-5-17 16:20
就是把接收到的字符串用printf发出去,以判断是否正常接收。

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

作者: 名字不是重点    时间: 2022-5-17 17:01
for(j=0;s[j]!='#'&&j<50;j++)   ==>for循环还可以这么用?妙。学习了!

作者: 188610329    时间: 2022-5-17 17:21
DaYzz1114 发表于 2022-5-17 16:57
printf("\n");
那这句不也是可以判断是否正常接收吗

一个是发换行, 最多是证明 程序认为正常接收了.
一个是发内容, 让你肉眼去判断, 接收的正常么.
这两个,二选一也好,都用也好,具体要发什么,要如何判断, 这个应该是你 ----- 写程序的人, 来设计的,不是你来反问 不是 XXXXX 也可以么?
作者: DaYzz1114    时间: 2022-5-17 18:08
188610329 发表于 2022-5-17 17:21
一个是发换行, 最多是证明 程序认为正常接收了.
一个是发内容, 让你肉眼去判断, 接收的正常么.
这两个 ...

啊我知道了 谢谢老师
作者: lida046400    时间: 2022-5-18 13:33
查了半天发现参考的是郭天祥书里的代码
作者: yaoyao2022    时间: 2022-5-18 13:45
标准打印输出 建议看看printf 函数




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1