51单片机串口通信的时候,利用温度传感器采集数据传输到串口上,寄存器不断地向计算机串口上发送温度的数据,我们能不能由用户控制单片机发送数据到串口呢?例如:用户在上位机上发送一个指令03到单片机上,单片机接收到03的指令后,就会把采集到的温度发送到串口上,单片机没有收到用户给指令03就不会向串口上发送数据,这样可以实现吗?如果能实现,那么,单片机上接收到用户的03后,单片机就会向串口发送数据,只发送一次,这样又能实现吗?求解,求指导

系统消息 若觉得内容不错,请点击左上角的"赞"图标,以优化网站的内容呈现。 另外,请及时验证注册邮箱,否则收不到21QA发出的红包。 官方Q群:250203055

asked 31 Oct '14, 17:38

%E6%B4%BE%E5%A4%A7%E6%98%9F%E3%80%81's gravatar image

派大星、
64121217


串口本来就有主从模式,任何一本单片机书不讲这个都没有道理.

SCON的SM2位是进行多机通信时的控制位.

系统消息 若觉得内容不错,请点击左上角的"赞"图标,以优化网站的内容呈现。 另外,请及时验证注册邮箱,否则收不到21QA发出的红包。 官方Q群:250203055
permanent link

answered 31 Oct '14, 18:08

perr's gravatar image

perr
406364151

理解不清楚呢,可否详细点的呢

(01 Nov '14, 10:02) 派大星、 %E6%B4%BE%E5%A4%A7%E6%98%9F%E3%80%81's gravatar image

方式1(非中断):

1.main()做初始化

2.main()中不断轮询温度传感器获取温度信息,同时轮询串口获取指令.

3.当指令到了,把温度通过串口发出去.

方式2(串口中断):

1.main()中做初始化,注册串口中断

2.main()中不断轮询温度传感器获取温度信息

3.串口中断中,解析指令,发送温度信息

方式3(全中断):

1.main()中做初始化,注册串口中断

2.串口中断,解析指令,然后读取温度,发送温度信息.

如果有多个单片机挂在同一个串口上,考虑主从模式解决总线竞争问题.

(01 Nov '14, 11:06) perr perr's gravatar image

当然可以了,且不说串口是双通信的,即使使用的是RS485半双工通信方式的也可以。
具体思路是:
1 单片机收数据到缓存
2 单片机检测缓存是否有合适的命令码(03)
3 有合适的命令码,则根据命令码执行相应的动作(发温度数据到pc)
4 处理完命令,复位接收缓存
5 跳到1进行loop动作

系统消息 若觉得内容不错,请点击左上角的"赞"图标,以优化网站的内容呈现。 另外,请及时验证注册邮箱,否则收不到21QA发出的红包。 官方Q群:250203055
permanent link

answered 31 Oct '14, 22:05

major's gravatar image

major
351283237

编辑于 31 Oct '14, 22:05

可是单片机接收到后,怎么让它只发送一次呢

(01 Nov '14, 10:03) 派大星、 %E6%B4%BE%E5%A4%A7%E6%98%9F%E3%80%81's gravatar image

当然可以呀!这个很随意的,你PC发一条指令0x03,单片机接收到之后,可以读一次数据上传,也可以读多次,这个你根据需要定就好了。很方便的。

系统消息 若觉得内容不错,请点击左上角的"赞"图标,以优化网站的内容呈现。 另外,请及时验证注册邮箱,否则收不到21QA发出的红包。 官方Q群:250203055
permanent link

answered 31 Oct '14, 23:41

%E6%9D%8E%E5%B0%8F%E7%99%BD's gravatar image

李小白
309252733

怎么样实现呢,用到什么呢,没有思路呢

(01 Nov '14, 09:28) 派大星、 %E6%B4%BE%E5%A4%A7%E6%98%9F%E3%80%81's gravatar image

没有问题。 PC机甚至可以发送多种命令,例如发送03是要单片机发送一次温度数据,发送02是要单片机发送一次湿度数据,发送01是要单片机发送一次压强数据……等等。上位机发送不等长码(二字节、三字节甚至更长)也可以的,单片机接收到之后应该与码表比较,查出符合的就执行,没有符合的就执行一次空操作。 不过,最好不要用这几个码,因为ASCII码中02和03有特定涵义。

系统消息 若觉得内容不错,请点击左上角的"赞"图标,以优化网站的内容呈现。 另外,请及时验证注册邮箱,否则收不到21QA发出的红包。 官方Q群:250203055
permanent link

answered 31 Oct '14, 23:55

maychant's gravatar image

maychant
1

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link: [text](http://url.com/ "title")
  • image: ![alt](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×213
×7

question asked: 31 Oct '14, 17:38

question was seen: 3,399 times

last updated: 01 Nov '14, 11:06

powered by O*S*Q*A

粤ICP备14040061号-1