8051单片机串口复杂命令接收与解析

下面程序是为了实现二自由度自动进样检测器的控制而编写的. 在程序执行过程中, 我发现, 在发送Start.E再发送Stop.E后, 串口助手接收缓存区并未显示一连串"00": 这说明在输入Start.E后, 虽然又收到Stop.E时执行了"en = 0"这个表达式, 但是回到第一层中断处理程序后, 这里的en还是"1"(并未变为我们希望的"0"). 这说明, 以串口中断实现对二自由度自动进样检测仪的控制, 还是有一定难度的. 接下来我将致力于解决这一难题.

#include <STC89C5xRC.H>

char buf[30];//存放串口传来的数据

int i = 0;

int en;

void UART_INT() interrupt 4//串行通信中断处理程序
{
    int len = 0;
    int j = 0;
    if(RI == 1)//如果收到数据
    {
        if(i == 30)
        {
            i = 0;//防止越界访问
        }
        RI = 0;
        buf[i++] = SBUF;//将数据接收下来
        if(buf[i - 1] == 'E')//到达结尾
        {
            len = i - 1;//记录数据长度
            i = 0;
            if(len == 6)
            {
                if(buf[0] == 'S' && buf[1] == 't' && buf[2] == 'a' && buf[3] == 'r' && buf[4] == 't' && buf[5] == '.')
                {
                    //Start命令(开机)
                    en = 1;
                    while(1)
                    {
                        SBUF = 1;
                        while(TI == 0);
                        TI = 0;
                        while(en == 0)
                        {
                            SBUF = 0;
                            while(TI == 0);
                            TI = 0;
                        }
                    }

                }
                else if(buf[0] == 'R' && buf[1] == 'e' && buf[2] == 's' && buf[3] == 'e' && buf[4] == 't' && buf[5] == '.')//主转盘回到原始位置,针臂抬到最高位置
                {
                    //Reset命令(复位命令)
                    while(j < len)
                    {
                        SBUF = buf[j];
                        while(TI == 0);//等待数据发送
                        TI = 0;
                        j++;
                    }
                    j = 0;
                    en = 0;
                }
            }
            else if(len == 5)//停机命令
            {
                if(buf[0] &

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好梦成真Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值