楼上有人说的是对的 我今天也写了类似代码,你串口检测接受。当你采集温度的时候,把串口中断关闭。 还有就是你的显示,你可以先判断下数据改变了,在去刷屏显示。没有必要接受到数据就是显示,做个判断也是对资源合理利用 |
软件结构问题。 你可以定义标志位,有发送标志,发送数据;有接收数据完成标志,处理接收数据;有屏刷新标志,刷新屏幕。。。。。。 |
看到了用这个 RTX51 Tiny 可以让51单片机实现多任务,得研究一下。这样就可以实现收数据时,同时执行查询DS18B20温度。 |
wulin 发表于 2018-4-9 15:33 用两个51单片机实现多任务,每个51单片机执行不同的任务。 两个单片机通信,不能用串口,因为被占用了。也不能用中断,不然会引响时序。 用轮询,有好的稳定的实例吗? |
本帖最后由 wulin 于 2018-4-9 16:50 编辑 duwen009 发表于 2018-4-9 12:46 你如果无法协调使用时间片轮询处理多任务管理,这通讯协议就要修改。上位机每发送一个字节需要等待下位机应答后才能发送下一个字节。你的程序写得很啰嗦,会占用MCU很多时间,DS18B20是单总线器件,不必开多个I/O口。串口中断里也不要处理非必须的事务,信息保存后由主程序处理。 |
wulin 发表于 2018-4-8 21:23 如果使用查询法,单片机不能一直只查询串口有没有数据来到。同时还要l轮询DS18B20的温度数据,查询一个DS18B20 时间就早己超过1毫秒,如果查询几个,还执行其他的操作,如1602显示的话,就会更长。 9600波特率下,串口收取数据,下一个字节数据接收完成前,约有1毫秒的时间,要把数据取走,不然串口就会丢弃接收的数据。这样,在查询其他器件时,串口还是会丢数据。 感觉查询法似乎不行 |
沧浪 发表于 2018-4-8 22:40 中断关了,如果这时串口有数据来到,串口数据就会丢失。 |
在进行DS18B20查询之前把中断给关掉不就好了吗 |
串口接收使用查询法,放弃使用中断法,这样可以避免与其他应用程序发生冲突。 |