找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎样用一个SBUF传输两个数据到上位机,比如一个实时温度,一个是设定温度值

[复制链接]
跳转到指定楼层
楼主
ID:187588 发表于 2017-4-14 14:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实时温度传到上位机要实现曲线表示   设定温度就是一根直线
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2017-4-15 01:25 | 只看该作者
本帖最后由 yzwzfyz 于 2017-4-15 22:26 编辑

对于SBUF来说它只是收或发一个字节的数字:0-255,你写入一个它就发一个,管你是不是温度,它全然不介意,都认为是一个0-255之间的数据。
所以你需给这此数据作出规定,比如:以AAH,65H开头,以后是两个字节表示温度,再以后是……,最后以26H作为结束。这就叫协议!
你需要制定一个协议,规则一切由你所需要表达的数据形式及含意而定。收、发端都按照此协议编码、解码,就可以了。
当若干个温度值,发生时间,设定值,被收存之后,就可以画出曲线了。如EXCEL一样作出曲线。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:159015 发表于 2017-4-15 10:14 | 只看该作者
如上楼所述,首先自己制定一个协议,分别代表实时温度和设定温度,实时温度与设定温度可以交替发送注意延时,上位机进行接收判断
回复

使用道具 举报

地板
ID:47286 发表于 2017-4-15 10:44 | 只看该作者
定义变量时定义一个数组

uchar data[2]={0}; //定义数组 位数2 第一位放实时温度 第二位放设定温度

程序中在采集后分别把两个值赋值给数组

data[0]=GetADC(实时温度);  //把AD采集的实时温度赋值给数组data位0
data[1]=设定值;                  //把设定温度赋值给数组data位1

发送函数里 顺序发出去

Send1Byte(data[0]); //发送 实时温度
Send1Byte(data[1]); //发送 设定温度

上位机的缓冲区收到2位 就解释第1位 给实时温度位置显示 第2位给设定温度显示 然后清除缓冲区 准备下次接收

当然 有楼上说的协议会更好
回复

使用道具 举报

5#
ID:151348 发表于 2017-4-15 11:01 | 只看该作者
举个例子,定义一个数组dat[8],前4个元素分别储存实时温度的百位、十位、个位、小数位,后4个元素分别储存设定温度的百位、十位、个位、小数位,
unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
void Send()
{
for(i=0;i<8;i++)
SBUF = diget[dat[i]];
while(!TI);
      TI = 0;
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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