找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4952|回复: 7
打印 上一主题 下一主题
收起左侧

串口发送字符串问题

[复制链接]
跳转到指定楼层
楼主
我要用串口助手发一个 123456字符串出去 要一次性发出去如何办到求大神们帮忙
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164602 发表于 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;
}


评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:82765 发表于 2017-7-15 08:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

地板
ID:219877 发表于 2017-7-15 14:17 | 只看该作者
2楼回答的正确, 接收只能8个字节。  你电脑发送直接点发送就可以了。
回复

使用道具 举报

5#
ID:219880 发表于 2017-7-15 15:27 | 只看该作者
12345,发送
回复

使用道具 举报

6#
ID:214603 发表于 2017-7-15 17:21 | 只看该作者
cjjcjj1 发表于 2017-7-15 08:57
直接在串口助手输入“123456”,然后点发送

楼主这个串口调试助手还有附加码功能,这个在一些特殊情况下比较方便啊,貌似在网上没有看到过这个版本的,这是哪里下载的?能不能分享给我?
回复

使用道具 举报

7#
ID:194747 发表于 2017-7-16 09:28 | 只看该作者
xuzhoubin110 发表于 2017-7-15 14:17
2楼回答的正确, 接收只能8个字节。  你电脑发送直接点发送就可以了。

你根本不懂,一次只能发送和接收一个字节8bit
回复

使用道具 举报

8#
ID:220290 发表于 2017-7-17 15:25 | 只看该作者
助手直接发就好了,要是用单片机接收,就要考虑一下了,单片机每次接收一个字节,要得到完整数据就要用个数组把数据先存起来。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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