[51单片机] 读数据需要时间,所以按键间断不灵,怎么办?

[复制链接]
3462|19
 楼主| 笑着去斗斗 发表于 2013-12-10 10:11 来自手机 | 显示全部楼层 |阅读模式
用51做了一个测温度的东西,需要从测温模块读取数据(其中有延时程序),同时需要通过按键来设置某些参数。单独测试按键部分没问题,但在程序中加入了读取数据的程序后,按键就不很灵敏了,有时会失效(应该是因为51正在运行读取数据的程序)。我尝试着把读取数据的程序放到中断中,让它半秒读一次数据,但是还是不行。前辈们有什么好的方法来解决这个问题吗?望赐教。
ayb_ice 发表于 2013-12-10 10:14 | 显示全部楼层
时间长的任务分片执行
或将扫键置于定时中断中
 楼主| 笑着去斗斗 发表于 2013-12-10 10:18 来自手机 | 显示全部楼层
ayb_ice 发表于 2013-12-10 10:14
时间长的任务分片执行
或将扫键置于定时中断中

分片执行是什么阿?。。我不太懂。。。
把扫键置于定时中断的方法试过了,会导致读数据读不出来(应该是破坏了读数据的时序)。
ayb_ice 发表于 2013-12-10 10:27 | 显示全部楼层
笑着去斗斗 发表于 2013-12-10 10:18
分片执行是什么阿?。。我不太懂。。。
把扫键置于定时中断的方法试过了,会导致读数据读不出来(应该是破 ...

ds18b20吗
 楼主| 笑着去斗斗 发表于 2013-12-10 10:35 来自手机 | 显示全部楼层
ayb_ice 发表于 2013-12-10 10:27
ds18b20吗

不是,是TN901,红外测温的。SPI时序。
ayb_ice 发表于 2013-12-10 11:20 | 显示全部楼层
笑着去斗斗 发表于 2013-12-10 10:35
不是,是TN901,红外测温的。SPI时序。

不行,纯粹是软件问题
不管是SPI,还是1-WIRE总线
 楼主| 笑着去斗斗 发表于 2013-12-10 11:39 来自手机 | 显示全部楼层
ayb_ice 发表于 2013-12-10 11:20
不行,纯粹是软件问题
不管是SPI,还是1-WIRE总线

那扫键和读取数据这对矛盾,是可避免的,还是不可避免的呢?
ayb_ice 发表于 2013-12-10 11:51 | 显示全部楼层
笑着去斗斗 发表于 2013-12-10 11:39
那扫键和读取数据这对矛盾,是可避免的,还是不可避免的呢?


当然是可以避免的
这是基本概念
这是完全没有必须联系的两个事情,
你说呢
 楼主| 笑着去斗斗 发表于 2013-12-10 12:02 来自手机 | 显示全部楼层
ayb_ice 发表于 2013-12-10 11:51
当然是可以避免的
这是基本概念
这是完全没有必须联系的两个事情,

恩,的确没有联系。但单片机不能同时处理两个程序,而这两个程序都需要时间。感觉解决这个问题的关键就是处理时间分配的问题。这个得想想怎么办。
ballack_linux 发表于 2013-12-10 12:13 | 显示全部楼层
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看
nevermore008 发表于 2013-12-10 12:19 | 显示全部楼层
把按键置于中断中
 楼主| 笑着去斗斗 发表于 2013-12-10 13:00 | 显示全部楼层
ballack_linux 发表于 2013-12-10 12:13
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看 ...

测温用的TN901,按键用中断也就是在每0.05秒进行一次键盘扫描。有什么建议吗?
 楼主| 笑着去斗斗 发表于 2013-12-10 13:00 | 显示全部楼层
ballack_linux 发表于 2013-12-10 12:13
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看 ...

测温用的TN901,按键用中断也就是在每0.05秒进行一次键盘扫描。有什么建议吗?
 楼主| 笑着去斗斗 发表于 2013-12-10 13:00 | 显示全部楼层
ballack_linux 发表于 2013-12-10 12:13
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看 ...

测温用的TN901,按键用中断也就是在每0.05秒进行一次键盘扫描。有什么建议吗?
ballack_linux 发表于 2013-12-10 13:03 | 显示全部楼层
测温中最短延时多少时间 ?
m564522634 发表于 2013-12-10 17:40 | 显示全部楼层
有前后台系统中,如果要让 任务及时响应最好用中断处理这个事情,你的按键去抖最后用定时器去计数。不过在你这个程序中你的DS18B20的驱动就写的有问题了应该。
y651503148 发表于 2013-12-10 18:01 | 显示全部楼层
你看你需要延时的时候做个判断,不要一直等待延时,这样你的实时性就有了
000_yanf 发表于 2013-12-10 19:31 来自手机 | 显示全部楼层
设定任务优先级,按键按中断方式执行
sysdriver 发表于 2013-12-10 23:07 | 显示全部楼层
按键50ms?太长了,快速按不一定能检测到,10ms好了。

问题出在,测温的流程上,测温不能用死循环的方法,一定要改成定时器方式,可以用状态机的方式来写这个流程。
ocon 发表于 2013-12-11 10:04 | 显示全部楼层
SPI通讯没有时间上的限制,不会影响键盘扫描,建议用定时中断来做键盘扫描,程序比较简单。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

144

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部