找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机串口通信问题 发送数字 led灯反转程序如何写?

[复制链接]
跳转到指定楼层
楼主
ID:425921 发表于 2019-2-8 22:57 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这是串口通信的问题,发送一个数字  0  led灯就会反转。我想一次发送123456789一共9个数字才能让led反转要怎么写?

IMG_20190208_223152.jpg (653.33 KB, 下载次数: 27)

IMG_20190208_223152.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:432823 发表于 2019-2-9 08:15 | 只看该作者
接收9个字符,用字符连接函数将其连接后作判断。
回复

使用道具 举报

板凳
ID:213173 发表于 2019-2-9 09:12 | 只看该作者
楼主这是自定义通讯协议问题。首先要把收到的字符按序分别保存在缓存中,1帧字符接收完毕后产生一个结束标志。然后对缓存中保存的字符解析判断,正确:执行相应任务。错误:清除缓存,重新等待接收。1帧数据通常由数据头、有效数据、验证码、数据尾等组成。其目的是为了保证传输信号的准确性。
回复

使用道具 举报

地板
ID:164602 发表于 2019-2-9 14:38 | 只看该作者
我做了一个程序,满足123456789的数字,控制LED灯开关。
/*
长数字控制控制
*/
#include<reg51.h>

sbit LED0=P2^0;

unsigned char i=0,k;
//unsigned char DD[5];

void UsartConfiguration();
void Delay10ms(unsigned int c);

void main()
{
        UsartConfiguration();
        Delay10ms(10);
        while(1)
        {
        }
}

void UsartConfiguration()//9600bps@11.0592MHz
{
        SCON=0X50;
        TMOD=0X20;
        PCON=0X80;
        TH1=0XFa;
        TL1=0XFa;
        TR1=1;
        ET1=0;
        ES=1;
        EA=1;
}

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

void CKTX() interrupt 4
{
        RI=0;
        k=SBUF;
        if (k==0x12)
        {
                if (i==0)
                {
                        i++;
                }
                else
                {
                        i=0;
                }
        }
        if (k==0x34)
        {
                if (i==1)
                {
                        i++;
                }
                else
                {
                        i=0;
                }
        }
        if (k==0x56)
        {
                if (i==2)
                {
                        i++;
                }
                else
                {
                        i=0;
                }
        }
        if (k==0x78)
        {
                if (i==3)
                {
                        i++;
                }
                else
                {
                        i=0;
                }
        }
        if (k==0x09)
        {
                if (i==4)
                {
                        i++;
                }
                else
                {
                        i=0;
                }
        }
        if (i==5)
        {
                LED0=~LED0;
                i=0;
        }
}
回复

使用道具 举报

5#
ID:164602 发表于 2019-2-9 14:55 | 只看该作者
如果你是用字符串进行控制,我也是有程序的。
/*
长字符串控制
*/
#include<reg51.h>

sbit LED0=P2^0;

unsigned char i=0,k;
unsigned char DD[11];

void UsartConfiguration();
void Delay10ms(unsigned int c);

void main()
{
        UsartConfiguration();
        Delay10ms(10);
        while(1)
        {
        }
}

void UsartConfiguration()//设置串口12M\4800
{
        SCON=0X50;
        TMOD=0X20;
        PCON=0X80;
        TH1=0XF3;
        TL1=0XF3;
        TR1=1;
        ES=1;
        EA=1;
}

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

void CKTX() interrupt 4
{
        RI=0;
        k=SBUF;
        if (k!='\n')
        {
                DD[i]=k;
                i++;
                if (i>11)
                {
                        i=0;
                }
        }
        else
        {
                DD[i]=k;
                i=0;
                if ((DD[0]=='1')&&(DD[1]=='2')&&(DD[2]=='3')&&(DD[3]=='4')&&(DD[4]=='5')&&(DD[5]=='6')&&(DD[6]=='7')&&(DD[7]=='8')&&(DD[8]=='9')&&(DD[9]==0x0d)&&(DD[10]==0x0a))
                {
                        LED0=~LED0;
                }
        }
}
程序要求,字符串必须以回车结束,字符串长度最大九位
回复

使用道具 举报

6#
ID:475444 发表于 2019-2-10 11:02 | 只看该作者
wulin 发表于 2019-2-9 09:12
楼主这是自定义通讯协议问题。首先要把收到的字符按序分别保存在缓存中,1帧字符接收完毕后产生一个结束标 ...

这个建议很好,楼主再调调

评分

参与人数 3黑币 +78 收起 理由
春风十里吹 + 8
shuisheng60 + 35
shuisheng + 35

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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