单片机串口接收字符串接收到的数据 下次开机怎么吧数据清零

单片机执行完读数据语句完成后,为什么不能立刻读到数据_百度知道
单片机执行完读数据语句完成后,为什么不能立刻读到数据
单片机执行完读数据语句完成后,为什么不能立刻读到数据
0;temp =(int)(Temp_Value[1] &lt.0625;sprintf(Temp_Disp_Buff,不读完也不可能执行里面的显示了,Temp_Disp_Buff);Write_LCD_Str(1,& 8 | Temp_Value[0])*0;, temp);TEMP: %5.1f \xDF\x43&quotwhile(1){if(Read_Temperature()){/&}Read_Temperature()这条语句都读完了;*计算温度浮点值*&#47
我有更好的答案
不能立刻读到数据,这是不可能的。一定是你的程序有问题,不是读数据的语句,或者读到数据了,你却不知道吧。
我也知道不能立刻读取到,说下原因
补充了程序才知道是什么问题,可最先的提问就让人摸不到头脑。你这是DS18B20吧,用C语言写程序,确实是在开机上电后的第一次读出的数值是85,但以后再读就是正确的温度。只有上电的第一次是这样的。DS18B20在读出温度时要求的时序是很严格的,但是,用C语言写程序在时序上并不是很严格。很多人都有遇到这个问题,并未查到原因。所以,可以,在上电后读第二次吧,以后就正常了。曾经用汇编语言写过程序,第一次就可以读出正确的温度,因为在时序是非常准确的。
采纳率:91%
你把问题描述的详细点
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机接收到的数据 下次开机怎么吧数据清零_百度知道
单片机接收到的数据 下次开机怎么吧数据清零
向板子发送61 0d,板子会回复一组数据,数据是角度值,实验完成后,下次开机,要将上次的角度值清零,重新开始记角度值 ,怎么整
我有更好的答案
如果你的系统里面没有静态存储器或者其他可以掉电保存的存储器,那么不用担心数据清零的问题,一掉电自动清零了,下次开机以前的一切数据都不复存在。如果有记忆的,那么上电时直接先调一个清零程序就好。
高级工程师
所以数据全部丢失,你又何苦担心开机后还有上次的数据这也不必做什么哪,只要开机,内存RAM会全部清零的。只要关机断电,你的问题根本不可能发生,你就是想保留都不可能。而且,你的担心真是多余了,开机就会自动清内存的,所以,只要用C语言写程序
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。怎么做能让单片机掉电了还能保存数据_百度知道
怎么做能让单片机掉电了还能保存数据
自己做的小东西,每次掉电重新开启时,前一次通过按键输入的数据就没了,还要重新再输入一遍,很麻烦·怎么做可以实现每次重新开启时,都能保存前一次的数据,使系统按照前一次的动作来工作,而不用在次输入一模一样的数据。PIC单片机
我有更好的答案
1、要在单片机供电电路前面加个纽扣电池或者加个法拉电容。2、纽扣电池的方式是不丢失数据,不需要保存到EEPROM。3、法拉电容可以用来不丢失数据(一般可以保存一个月),当然也可以用来存储的EEPROM,
注意不要美每时每刻都保存的EEPROM,这样错率,寿命都会降低。
这与你的功能设计流程来决定的,包括硬件支持和软件编写。具体表现为,输入数据后,软件进行保存不管什么型号的单片机,这样就不要每次输入了。当然,然后在程序开始或其它需要的地方每次让程序自己读,如果输入的数据少,可以直接存储在MCU的内部EEPROM等地方,否则,外加存储芯片进行操作
本回答被提问者采纳
用大的电容器做个电源缓冲,检测输入电源电压,若电源电压突然已降低到低限。利用大电容还能维持的时间。将数据存储到非挥发存储器中去,下次开机时再调出。
电源脚用大一点的电容,用低电压测试,发展电压低于某个值时马上把数据写入存储器
用IIC(24C02)芯片,当你输入一次后,同样将数据写入24C02中,在开机初始化是先读一次24C02!
建议 去 我的领地 5d6d 的 proteus 论坛看看那里有很多 单片机仿真实例,包括仿真图 和 源码 搜 5d6d 和 proteus 2个关键词
其他3条回答
为您推荐:
其他类似问题
单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机串口通信,实现接收到数据后,灯亮。_百度知道
单片机串口通信,实现接收到数据后,灯亮。
#include&reg52.h&
void main()
TMOD=0x20;
我有更好的答案
//接收数据并输出至LED上显示&&nbsp!RI);&&nbsp.com/zhidao/wh%3D600%2C800/sign=68ef703e6e79dda38ca7d05/d833c895d143ad4b33e775dc86025aafa50f06e4.jpg" esrc="http://c.&&&&&&nbsp,所以需要查询的状态是 0,不是1当接收完数据后;&&&&&
while(,RI才会由1变为0;&& & //启动定时器T1& //串口工作方式1,允许接收&&&& TMOD=0x20; &nbsp,上程序;&nbsp.baidu,若满意请记得采纳一下,谢谢;&
{&& & && TL1=0&&
if(RI==0)//如果有数据&&
}&&//通用89C52头文件/***************************************************************************/void main(void)//主函数{&& & //定时器1和2工作方式2(8位定时/计数)&&&& TH1=0 &&&&& PCON=0x00; &nbsp.hiphotos.baidu.com/zhidao/pic/item/d833c895d143ad4b33e775dc86025aafa50f06e4;&&&&&&&& TR1=1;& IE=0x00;
//关闭所有中断&&&& while(1)&&&& {& &
//定时器1设置初值;&&&&&&&&nbsp.com/zhidao/wh%3D450%2C600/sign=4d60cb9ecd/d833c895d143ad4b33e775dc86025aafa50f06e4.jpg" />看你这程序编的;&&&
//清空标识&&& & //SMOD=0,不加倍&&&& SCON=0x50;&&&nbsp.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http://c.&nbsp,而是0只有当数据传送过来的时候;&&nbsp!这是一个由串口助手发送十六进制码来控制单片机的8个LED亮灭的简单小程序/***************************************************************************/#include &REG52.h&
RI=0;&&&& //等待接收完成&&&nbsp.baidu,波特率9600bit/s,&&&nbsp<a href="http,再进行对RI的清零还是不多说了,ha查询RI 不是等于 1;&& & &&&&nbsp://c
只有当数据传送过来的时候,RI才会由1变为0?这跟书上说的好像不一样呀。当接收到停止位时,RI由硬件置位,RI=1表示帧接收完成,可由软件查询RI位标志,也可以请求中断。RI必须由软件清0。我的想法是RI有软件清零后,如果有数据传过去,串行接收到停止位,硬件会自动将RI置1,检测RI是否为1,就能知道上位机是否给单片机传数据。本人初学者,很多刚接触,有些东西不是很清楚,请见谅。
具体的细节我倒是没有像你那样研究太深我记得看到的资料以及众多实例中,都是这么写的代码RI 既是串口中断的接收标志位,只有当接收完数据后,才会变成1所以就有了这一句等待接收完成的语句
while(!RI); 然后在用代码置0,完成一个字符的接收过程至于怎么个工作过程没必要研究那么详细,知道如何运用即可就是能够发送和接收数据就够了
恩恩,能收发数据就行。只是好奇。我让它自己再往电脑传收到的数据。可能是复位时的初始数据吧,会自动传一个FF(或其他)过去。要避免这个初始数据的影响,可以在前头加一个delay延时1秒。另外,您说的那个,我还是觉得应该检测RI==1,本来就被软件置0,0不代表有数据传过去,只代表没有检测到数据的停止位。检测到1才以为这前头有数据传过来。不知道我这么理解对不对?
至于理解的对与错,要自己证明一下才可以只是编写代码的事情,很简单的一个小程序,改变一下代码验证才知晓哈哈,学单片机,就是不断的亲自验证,才能熟练掌握
采纳率:91%
来自团队:
不知你io是怎么连的,高亮还是低亮?
亮度就是正常的P1给低电平的亮度。
为您推荐:
其他类似问题
串口通信的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机接收PC 串口调试助手发过来的数据时,总是第一次数据接收不到,重新发一次就才正常_百度知道
单片机接收PC 串口调试助手发过来的数据时,总是第一次数据接收不到,重新发一次就才正常
STC90C516RD+单片机串口在上电后或是复位后,接收PC 串口调试助手发过来的数据时,总是第一次数据接收不到,重新发一次就可以正常,如发AA,LED0亮,第一次发AA,LED0不亮,再发一次才亮。后面发所有数据,MCU都可以正常响应,或是在上电后用PC 串口调试助手先...
&#47; 这是字符串结束符
len=counter-1;
&#47;把收到的数据赋值给变量(注意接收的写法)}
if(cmd_buf[counter]==0x0d)
&#47;&#47;串口中断处理函数;命令字符串长度if(RI)
&#47,那么命令结束{
cmd_buf[counter]=&#39;&#92,收到数据后产生中断;&#47;如果数据已经接收完,即RI=1{
RI=0,在这里处理{unsigned char data len=0;
&#47;&#47;&#47;如果串口输入回车;
&#47;0&#39;&#47;对RI进行清零
cmd_buf[counter] = SBUF;
&#47;&#47;&#47; &#39;&#92;0&#39;&#47;
counter = 0;
flag=1void com_ser() interrupt 4
我有更好的答案
要看程序全貌才知道具体原因,你可以将串口中断的优先级设为最高试试。
高级工程师
应该是程序上的错误,或者在接收口接一个上拉电阻
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机清零程序 的文章

 

随机推荐