找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于串口通信的代码问题,萌新提问~~

[复制链接]
跳转到指定楼层
楼主
ID:213766 发表于 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的作用是什么
求解答,不胜感激

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

使用道具 举报

沙发
ID:164602 发表于 2017-7-3 12:23 | 只看该作者
你的程序中的a变量,有两个功能:
第一:接收到数据时,它是接收数据缓存。
就是这句:a=SBUF;
将接收到的数据,存放在该变量中。
第二:发送数据的最后数据。即,将接收到数据又发送回上位机。
就是这句:SBUF=a;
从你说的程序功能上看,这个变量的功能是无用的。不论上位机发送什么,都可以让单片机发送信息给上位机。
当然,为了好看,如,你在上位机输出1,单片机发送“I get”后,再发送这个1,在上位机上看到一个完整的意思,“我得到了1”。也不错。
回复

使用道具 举报

板凳
ID:207702 发表于 2017-7-3 12:37 来自手机 | 只看该作者
a是个累加器就是sbuf里的数据也就是table里面你要显示的
回复

使用道具 举报

地板
ID:47286 发表于 2017-7-3 12:42 | 只看该作者
发送你发给单片机的指令

串口有中断发生时 a=SBUF 把接收到的上位机指令放在a里 然后标记置1 主程序里发现标记置1就开始向上位机发送你定义的数据串 发送完毕数据串后 再把a的置给SBUF 然后再发送
回复

使用道具 举报

5#
ID:213766 发表于 2017-7-3 15:01 | 只看该作者
HC6800-ES-V2.0 发表于 2017-7-3 12:23
你的程序中的a变量,有两个功能:
第一:接收到数据时,它是接收数据缓存。
就是这句:a=SBUF;

谢谢~
我后来又自己看了一遍发现就是你说的意思
所以一开始还在纠结这个功能是什么
回复

使用道具 举报

6#
ID:213766 发表于 2017-7-3 15:02 | 只看该作者
dzbj 发表于 2017-7-3 12:42
发送你发给单片机的指令

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

谢谢~我明白了
回复

使用道具 举报

7#
ID:213766 发表于 2017-7-3 15:03 | 只看该作者
hzlsw1 发表于 2017-7-3 12:37
a是个累加器就是sbuf里的数据也就是table里面你要显示的

谢谢啦,累加器这个说法我挺喜欢的
回复

使用道具 举报

8#
ID:217545 发表于 2017-7-6 10:09 | 只看该作者
就是变量的作用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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