找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 3123 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-2-8 22:57

正文摘要:

这是串口通信的问题,发送一个数字  0  led灯就会反转。我想一次发送123456789一共9个数字才能让led反转要怎么写?

回复

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

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

评分

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

查看全部评分

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;
                }
        }
}
程序要求,字符串必须以回车结束,字符串长度最大九位
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;
        }
}
ID:213173 发表于 2019-2-9 09:12
楼主这是自定义通讯协议问题。首先要把收到的字符按序分别保存在缓存中,1帧字符接收完毕后产生一个结束标志。然后对缓存中保存的字符解析判断,正确:执行相应任务。错误:清除缓存,重新等待接收。1帧数据通常由数据头、有效数据、验证码、数据尾等组成。其目的是为了保证传输信号的准确性。
ID:432823 发表于 2019-2-9 08:15
接收9个字符,用字符连接函数将其连接后作判断。

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

Powered by 单片机教程网

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