找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机怎样对从串口接收到的数学运算式进行运算

  [复制链接]
跳转到指定楼层
楼主
ID:110648 发表于 2016-3-24 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51中单片机怎样对从串口接收到的数学运算式进行运算,并把运算结果再输出到串口?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:110666 发表于 2016-3-25 00:05 | 只看该作者
通过程序控制。
回复

使用道具 举报

板凳
ID:97438 发表于 2016-3-25 11:08 | 只看该作者
什么数学运算式?如果传过来的是字符串“1+1”这样的话,你需要自己解释这个字符串,再做运算

评分

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

查看全部评分

回复

使用道具 举报

地板
ID:110694 发表于 2016-3-25 11:21 | 只看该作者
一般单片机收到的数据是根据你定的协议来的,你的传输协议应该规定了哪个字符是什么意思。如果像你说的串口收到数学运算式,那么你收到数据后对数据一个一个解析出来再运算就可以了。

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:110694 发表于 2016-3-25 11:22 | 只看该作者
算出来结果以后再通过串口发出去啊

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:110715 发表于 2016-3-25 13:09 | 只看该作者
我也想知道,求解答
回复

使用道具 举报

7#
ID:110648 发表于 2016-3-25 15:18 | 只看该作者
luoluoluo136 发表于 2016-3-25 11:08
什么数学运算式?如果传过来的是字符串“1+1”这样的话,你需要自己解释这个字符串,再做运算

就是像(2+3)*3这样计算器的功能,具体怎么解释

评分

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

查看全部评分

回复

使用道具 举报

8#
ID:110648 发表于 2016-3-25 15:20 | 只看该作者
129 发表于 2016-3-25 11:21
一般单片机收到的数据是根据你定的协议来的,你的传输协议应该规定了哪个字符是什么意思。如果像你说的串口 ...

怎样对字符进行解析啊

评分

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

查看全部评分

回复

使用道具 举报

9#
ID:97438 发表于 2016-3-26 16:11 | 只看该作者
先在字符串中找运算符号,然后运算符号之间的就是数值了,然后就是字符串转数值,再进行运算

评分

参与人数 1黑币 +20 收起 理由
admin + 20

查看全部评分

回复

使用道具 举报

10#
ID:114742 发表于 2016-5-5 19:16 | 只看该作者
luoluoluo136 发表于 2016-3-26 16:11
先在字符串中找运算符号,然后运算符号之间的就是数值了,然后就是字符串转数值,再进行运算

可是串口接收的时候会出现数据不完整的情况呀比如123456可能会显示12356少一些数据怎么办呀

评分

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

查看全部评分

回复

使用道具 举报

11#
ID:97438 发表于 2016-5-6 08:45 | 只看该作者
3263065307 发表于 2016-5-5 19:16
可是串口接收的时候会出现数据不完整的情况呀比如123456可能会显示12356少一些数据怎么办呀

这个就是你串口处理的问题了额。。。数据基础问题没有解决好。。。建议你先去做一下串口收发的程序,调通了再去搞运算

评分

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

查看全部评分

回复

使用道具 举报

12#
ID:114742 发表于 2016-5-7 20:45 | 只看该作者
luoluoluo136 发表于 2016-5-6 08:45
这个就是你串口处理的问题了额。。。数据基础问题没有解决好。。。建议你先去做一下串口收发的程序,调通 ...

我感觉我的数据处理没问题呀,就是会出现那种现象你看看我的代码
void uart() interrupt 4
{
           unsigned char dat;
           if(RI)
          {
                   dat = SBUF;            //接收到的数据暂存在dat中
                  datebuf[ i]=dat;
                  SBUF = dat;                //接收到的数据发送给PC机
                  while(TI==0);        //等待发送完成,发送使用的查询方式
                  i++;
                   TI = 0;                        //清除发送结束标志
                  RI = 0;                        //清除接收中断标志
          }
}

评分

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

查看全部评分

回复

使用道具 举报

13#
ID:910922 发表于 2021-4-23 17:01 | 只看该作者
luoluoluo136 发表于 2016-3-25 11:08
什么数学运算式?如果传过来的是字符串“1+1”这样的话,你需要自己解释这个字符串,再做运算

请问解释完字符串后,如何计算数据得到结果,并输出
回复

使用道具 举报

14#
ID:911163 发表于 2021-4-24 07:46 | 只看该作者
51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。
当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。
无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。
在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。
看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。
接收数据时,基本上都是使用“中断方式”,这是正确合理的。
即:每当收到一个新数据,就在中断函数中,把 RI 清零,并用一个变量,通知主函数,收到了新数据。
发送数据时,很多的程序都是使用的“查询方式”,就是执行 while(TI ==0); 这样的语句来等待发送完毕。
这时,处理不好的话,就可能带来问题。
看了一些网友编写的程序,发现有如下几条容易出错:
1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。
这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。
这种处理方法,就会遗漏收到的数据。
2.有人在发送数据之前,并没有关闭串口中断,当 TI = 1 时,是可以进入中断程序的。
但是,却在中断函数中,将 TI 清零!
这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。
3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收中断的程序。
对此,做而论道发表自己常用的方法:
接收数据时,使用“中断方式”,清除 RI 后,用一个变量通知主函数,收到新数据。
发送数据时,也用“中断方式”,清除 TI 后,用另一个变量通知主函数,数据发送完毕。
这样一来,收、发两者基本一致,编写程序也很规范、易懂。
更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。
回复

使用道具 举报

15#
ID:909161 发表于 2021-4-24 11:14 | 只看该作者
以查询为例,简单来说,就是利用软件(代码)去判断、查询TI和RI标志位的状态,然后依据其状态去执行各种操作。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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