单片机编程中 如何清除串口接收寄存器中的值,即清除SBUF中的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机编程中 如何清除串口接收寄存器中的值,即清除SBUF中的值相关的知识,希望对你有一定的参考价值。

追问:可是我做实验,需要清除。以便接收到新的不同的值,从而单片机做出相应的动作回答清除标志位
----
不用清除。也不可能清除。

可以这样做:
每收到一个新数据,就置位一个自定义的标志位,如:R_flag = 1;。
程序中,一旦发现它为1,就进行一次处理,然后就将其清零:R_flag = 0;。
这样,收到一个,就仅仅处理一遍。
参考技术A 单片机的SBUF是不需要清零的!
你是模拟串口通信吗?
不管是模拟串口通信还是硬件串口通信,都是是不需要清零的.因为模拟串口通信时是判断串口有无起始位来决定是否接受数据,而硬件串口SBUF是自动接收数据,并会产生一个中断,这时你只需要读出SBUF的值就行了。
参考技术B value属性可以直接获取其选中项的value值。
单击按钮获取下拉列表选中项的value值:
<select id="test">
<option value="1">option-1</option>
<option value="2">option-2</option>
<option value="3">option-3</option>
<option value="4">option-4</option>
</select> <br>
<input type='button' value='获取选中项' onClick="fun()"/>2、javascript代码
function fun()
obj = document.getElementById("test");
alert(obj.value);

参考技术C 不用清除。追问

可是我做实验,需要清除。以便接收到新的不同的值,从而单片机做出相应的动作

追答

清除标志位
CLR RI

追问

clr RI; 在程序中编译通不过,显示没有定义,有错误。请问高手,有没一段完完整的程序?

代码中的ipython笔记本清除单元格输出

【中文标题】代码中的ipython笔记本清除单元格输出【英文标题】:ipython notebook clear cell output in code 【发布时间】:2014-09-09 01:46:57 【问题描述】:

在 iPython 笔记本中,我有一个 while 循环,用于侦听串行端口和 print 实时接收的数据。

我想要实现的只是显示最新收到的数据(即只有一行显示最新数据。在单元格输出区域中没有滚动)

我需要(我认为)是在收到新数据时清除旧单元格输出,然后打印新数据。我想知道如何以编程方式清除旧数据?

【问题讨论】:

【参考方案1】:

如果我没记错的话,你的意思是你只需要清除单元格的输出部分,这可能是有效的输出,也可能是一些你不再看的错误。如是!只需转到顶部功能区并选择 Cell > Current Outputs > Clear

【讨论】:

这应该适用于交互式清除单元格,但 OP 要求以编程方式执行此操作。【参考方案2】:

您可以通过这个简单的代码更好地可视化函数clear_output(wait=True)

from IPython.display import clear_output
import time 

for i in tqdm(range(10)):
    clear_output(wait=True)
    print(i)
    time.sleep(1)

【讨论】:

【参考方案3】:

您可以使用IPython.display.clear_output 清除单元格的输出。

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print("Hello World!")

在此循环结束时,您只会看到一个Hello World!

如果没有代码示例,就很难为您提供工作代码。可能缓冲最近的 n 个事件是一个很好的策略。每当缓冲区发生变化时,您都可以清除单元格的输出并再次打印缓冲区。

【讨论】:

有史以来最简单的 ajax 界面! 如果循环中有clear_output,使用clear_output(wait=True) 通常会使结果更好。 打印结果抖动后的一半屏幕,但由于wait=True而抖动较少 但这会清除所有输出。有没有办法只清除最近的数字?编辑:这就是我要找的东西:github.com/jupyter-widgets/ipywidgets/issues/… @jorijnsmit,只是为了说明“Hello World!”不是打印 10 次,而是仅打印 1 次。 i 并不重要。【参考方案4】:

您可以使用IPython.display.clear_output 清除输出,如 cel 的回答中所述。我要补充一点,对我来说,最好的解决方案是使用这种参数组合进行打印,而不会让笔记本有任何“抖动”:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)

【讨论】:

【参考方案5】:

如果你像我一样来到这里,希望在 Jupyter 的 Julia 笔记本中对绘图做同样的事情,使用 Plots,你可以使用:

    IJulia.clear_output(true)

所以对于一种多次运行的动画情节

    if nrun==1  
      display(plot(x,y))         # first plot
    else 
      IJulia.clear_output(true)  # clear the window (as above)
      display(plot!(x,y))        # plot! overlays the plot
    end

如果没有 clear_output 调用,所有绘图都会单独显示。

【讨论】:

以上是关于单片机编程中 如何清除串口接收寄存器中的值,即清除SBUF中的值的主要内容,如果未能解决你的问题,请参考以下文章

STM32串口2寄存器USART_DR赋值问题

外部中断标志位清除不了

stm32啥触发串口接收中断

关于STM32串口接收中断,网上有如下中断方式接收数据的程序:

stm32简单编程,向USART1发送字符串。

单片机多字节串口接收(转)