打印
[51单片机]

读数据需要时间,所以按键间断不灵,怎么办?

[复制链接]
3054|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吗

使用特权

评论回复
5
笑着去斗斗|  楼主 | 2013-12-10 10:35 | 只看该作者
ayb_ice 发表于 2013-12-10 10:27
ds18b20吗

不是,是TN901,红外测温的。SPI时序。

使用特权

评论回复
6
ayb_ice| | 2013-12-10 11:20 | 只看该作者
笑着去斗斗 发表于 2013-12-10 10:35
不是,是TN901,红外测温的。SPI时序。

不行,纯粹是软件问题
不管是SPI,还是1-WIRE总线

使用特权

评论回复
7
笑着去斗斗|  楼主 | 2013-12-10 11:39 | 只看该作者
ayb_ice 发表于 2013-12-10 11:20
不行,纯粹是软件问题
不管是SPI,还是1-WIRE总线

那扫键和读取数据这对矛盾,是可避免的,还是不可避免的呢?

使用特权

评论回复
8
ayb_ice| | 2013-12-10 11:51 | 只看该作者
笑着去斗斗 发表于 2013-12-10 11:39
那扫键和读取数据这对矛盾,是可避免的,还是不可避免的呢?


当然是可以避免的
这是基本概念
这是完全没有必须联系的两个事情,
你说呢

使用特权

评论回复
9
笑着去斗斗|  楼主 | 2013-12-10 12:02 | 只看该作者
ayb_ice 发表于 2013-12-10 11:51
当然是可以避免的
这是基本概念
这是完全没有必须联系的两个事情,

恩,的确没有联系。但单片机不能同时处理两个程序,而这两个程序都需要时间。感觉解决这个问题的关键就是处理时间分配的问题。这个得想想怎么办。

使用特权

评论回复
10
ballack_linux| | 2013-12-10 12:13 | 只看该作者
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看

使用特权

评论回复
11
nevermore008| | 2013-12-10 12:19 | 只看该作者
把按键置于中断中

使用特权

评论回复
12
笑着去斗斗|  楼主 | 2013-12-10 13:00 | 只看该作者
ballack_linux 发表于 2013-12-10 12:13
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看 ...

测温用的TN901,按键用中断也就是在每0.05秒进行一次键盘扫描。有什么建议吗?

使用特权

评论回复
13
笑着去斗斗|  楼主 | 2013-12-10 13:00 | 只看该作者
ballack_linux 发表于 2013-12-10 12:13
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看 ...

测温用的TN901,按键用中断也就是在每0.05秒进行一次键盘扫描。有什么建议吗?

使用特权

评论回复
14
笑着去斗斗|  楼主 | 2013-12-10 13:00 | 只看该作者
ballack_linux 发表于 2013-12-10 12:13
你用的测温度的是DS18B20吗  按键用中断的方式处理肯定可以的 你把你中断处理部分贴出来看看 ...

测温用的TN901,按键用中断也就是在每0.05秒进行一次键盘扫描。有什么建议吗?

使用特权

评论回复
15
ballack_linux| | 2013-12-10 13:03 | 只看该作者
测温中最短延时多少时间 ?

使用特权

评论回复
16
m564522634| | 2013-12-10 17:40 | 只看该作者
有前后台系统中,如果要让 任务及时响应最好用中断处理这个事情,你的按键去抖最后用定时器去计数。不过在你这个程序中你的DS18B20的驱动就写的有问题了应该。

使用特权

评论回复
17
y651503148| | 2013-12-10 18:01 | 只看该作者
你看你需要延时的时候做个判断,不要一直等待延时,这样你的实时性就有了

使用特权

评论回复
18
000_yanf| | 2013-12-10 19:31 | 只看该作者
设定任务优先级,按键按中断方式执行

使用特权

评论回复
19
sysdriver| | 2013-12-10 23:07 | 只看该作者
按键50ms?太长了,快速按不一定能检测到,10ms好了。

问题出在,测温的流程上,测温不能用死循环的方法,一定要改成定时器方式,可以用状态机的方式来写这个流程。

使用特权

评论回复
20
ocon| | 2013-12-11 10:04 | 只看该作者
SPI通讯没有时间上的限制,不会影响键盘扫描,建议用定时中断来做键盘扫描,程序比较简单。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

144

帖子

0

粉丝