标题: 关于串口通信的代码问题,萌新提问~~ [打印本页]

作者: yxdbc2008    时间: 2017-7-3 11:27
标题: 关于串口通信的代码问题,萌新提问~~
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,a,i;
uchar code table[]="I get ";
void init()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        EA=1;
        SM0=0;
        SM1=1;
        ES=1;
}

void main()
{
        init();
        while(1)
        {
                if(flag==1)
                {
                        ES=0;
                        for(i=0;i<6;i++)
                        {
                                SBUF=table[i];
                                while(!TI);
                                TI=0;
                        }
                        SBUF=a;
                        while(!TI);
                        TI=0;
                        ES=1;
                        flag=0;
                }
        }
}

void ser()interrupt 4
{
        RI=0;
        a=SBUF;
        flag=1;
}

原理就是发送I get到串口调试助手上,也能实现
但是我再看一遍的时候没搞懂这里面a的作用是什么
求解答,不胜感激


作者: HC6800-ES-V2.0    时间: 2017-7-3 12:23
你的程序中的a变量,有两个功能:
第一:接收到数据时,它是接收数据缓存。
就是这句:a=SBUF;
将接收到的数据,存放在该变量中。
第二:发送数据的最后数据。即,将接收到数据又发送回上位机。
就是这句:SBUF=a;
从你说的程序功能上看,这个变量的功能是无用的。不论上位机发送什么,都可以让单片机发送信息给上位机。
当然,为了好看,如,你在上位机输出1,单片机发送“I get”后,再发送这个1,在上位机上看到一个完整的意思,“我得到了1”。也不错。
作者: hzlsw1    时间: 2017-7-3 12:37
a是个累加器就是sbuf里的数据也就是table里面你要显示的
作者: dzbj    时间: 2017-7-3 12:42
发送你发给单片机的指令

串口有中断发生时 a=SBUF 把接收到的上位机指令放在a里 然后标记置1 主程序里发现标记置1就开始向上位机发送你定义的数据串 发送完毕数据串后 再把a的置给SBUF 然后再发送
作者: yxdbc2008    时间: 2017-7-3 15:01
HC6800-ES-V2.0 发表于 2017-7-3 12:23
你的程序中的a变量,有两个功能:
第一:接收到数据时,它是接收数据缓存。
就是这句:a=SBUF;

谢谢~
我后来又自己看了一遍发现就是你说的意思
所以一开始还在纠结这个功能是什么
作者: yxdbc2008    时间: 2017-7-3 15:02
dzbj 发表于 2017-7-3 12:42
发送你发给单片机的指令

串口有中断发生时 a=SBUF 把接收到的上位机指令放在a里 然后标记置1 主程序里发 ...

谢谢~我明白了
作者: yxdbc2008    时间: 2017-7-3 15:03
hzlsw1 发表于 2017-7-3 12:37
a是个累加器就是sbuf里的数据也就是table里面你要显示的

谢谢啦,累加器这个说法我挺喜欢的
作者: xiaoxiezi    时间: 2017-7-6 10:09
就是变量的作用




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1