标题: 串口发送字符串问题 [打印本页]

作者: micrer001    时间: 2017-7-14 23:27
标题: 串口发送字符串问题
我要用串口助手发一个 123456字符串出去 要一次性发出去如何办到求大神们帮忙

作者: HC6800-ES-V2.0    时间: 2017-7-15 08:38
办不到!
串口通讯是8位数据,所以一次只能发送一个字符。
如果你的判断控制需要一次性123456,则可以在发送完字符串后,加上结束符,一般是回车符,就可以了。即:在没有接收到回符之前,程序一直等接收并保存,直到接收到回车符,才开始判断控制,结果就相当于一次性获得了那些字符一样。我有这样的一个程序,你看看:
#include<reg51.h>

unsigned char code PuZh1[] = "我的51单片机串口实验----发送字符串\r\n";

unsigned char i,j,k;
unsigned char DD[10];

void UsartConfiguration();
void Delay10ms(unsigned int c);
void Out_Data (unsigned char Data[]);

void main()//主函数
{
        UsartConfiguration();//设置串口
        Delay10ms(10);
        i=0;
        while(1)
        {
                if (RI==1)
                {
                        RI=0;
                        k=SBUF;
                        if (k!='\n')//不是结束符
                        {
                                DD[i]=k;
                                i++;
                                if (i>9)
                                {
                                        i=0;
                                }
                        }
                        else
                        {
                                DD[i]=k;
                                i=0;
                                if ((DD[0]=='1')&&(DD[1]=='2')&&(DD[2]=='3')&&(DD[3]==0x0d)&&(DD[4]==0x0a))//接收到的是字符123回车
                                {
                                        j=sizeof(PuZh1);
                                        Out_Data(PuZh1);
                                        Delay10ms(50);
                                }
                                j=sizeof(DD);
                                Out_Data(DD);
                                Delay10ms(50);
                        }
                }
        }
}

void UsartConfiguration()//设置串口
{
        SCON=0X50;//串口通信设置为工作方式1
        TMOD=0X20;//设置定时器1工作方式2
        PCON=0X80;//波特率加倍
        TH1=0XF3;//计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        TR1=1;//打开计数器
}

void Delay10ms(unsigned int c)//延时10ms
{
    unsigned char a, b;
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }      
}

void Out_Data (unsigned char Data[])//发送字符串子函数
{
        unsigned char i;
        for (i=0;i<j;i++)
        {
                SBUF = Data[i];
                while (!TI);
                TI = 0;
        }
        k=0;
}



作者: cjjcjj1    时间: 2017-7-15 08:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: xuzhoubin110    时间: 2017-7-15 14:17
2楼回答的正确, 接收只能8个字节。  你电脑发送直接点发送就可以了。
作者: 怕瓦落地    时间: 2017-7-15 15:27
12345,发送
作者: laorentou    时间: 2017-7-15 17:21
cjjcjj1 发表于 2017-7-15 08:57
直接在串口助手输入“123456”,然后点发送

楼主这个串口调试助手还有附加码功能,这个在一些特殊情况下比较方便啊,貌似在网上没有看到过这个版本的,这是哪里下载的?能不能分享给我?
作者: micrer001    时间: 2017-7-16 09:28
xuzhoubin110 发表于 2017-7-15 14:17
2楼回答的正确, 接收只能8个字节。  你电脑发送直接点发送就可以了。

你根本不懂,一次只能发送和接收一个字节8bit
作者: piaoye08    时间: 2017-7-17 15:25
助手直接发就好了,要是用单片机接收,就要考虑一下了,单片机每次接收一个字节,要得到完整数据就要用个数组把数据先存起来。




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