51单片机串口如何接收多位字节数据

2019-07-15 21:12发布

各位大侠看一下,我下面的程序为什么不能接收两个字节的数据呢?
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
void rs232_init();
uchar flag,i,g,d;
uchar code table[]="I get ";
//sbit led=P1^0;
main()
{
        rs232_init();
        while(1)
        {
                if(flag==1)
                {
                        ES=0;
                        for(i=0;i<6;i++)
                        {
                                SBUF=table[i];
                                while(!ti);
                                TI=0;
                        }
                        SBUF=g;
                        while(!TI);
                        TI=0;
                        SBUF=d;
                        while(!TI);
                        TI=0;
                        ES=1;
                        flag=0;
                }               
        }
}
void rs232_init()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;       
}
void ser()interrupt 4
{
        RI=0;
        g=SBUF;
        d=SBUF;
        flag=1;
}

我用串口调试助手调试时,上位机给单片机发送两个字节的数据,例如发送ck两个字母时,只接收到cc两个字母呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
mou_jc
1楼-- · 2019-07-17 22:23
收益匪浅..收益匪浅..
冯浩恩
2楼-- · 2019-07-17 22:34
 精彩回答 2  元偷偷看……
mqzhou2006
3楼-- · 2019-07-18 00:14
嗯,高手如云,一起学习,谢谢了
烈焰123
4楼-- · 2019-07-18 01:41
tangkii 发表于 2013-12-27 16:22
首先数据发送是一位一位发送的,串口接收也是一位一位接收的,当接收8位数据后,申请中断。

你的程序中,程序进入中断后,你用了g=SBUF,d=SBUF,程序之所以进入中断是因为串口接收到了八位数据,是八位数据,不是十六位数据,也就是你发送的字母ck中的c,k还没有发送完呢,所以g和d都被赋值了c,打印结果当然是cc了。

高人啊,你写的这个程序能接收5个字节的数据么
yanlin1
5楼-- · 2019-07-18 06:53
 精彩回答 2  元偷偷看……
lc电子
6楼-- · 2019-07-18 07:23
想学习都应该建个微信群哈哈

一周热门 更多>