打印

51单片机处理多个标记时用什么方法

[复制链接]
1664|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerkoh|  楼主 | 2008-5-28 13:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在有8组继电器,每组8个。 一个64个
上位机发8字节数据 ,对应0打开 1关闭
接收到后继电器动作,并延时5S后把打开的继电器闭合
另外,如果在这5秒内又有新数据来,如果原来打开的又收到打开命令
就重新开始延时5秒 。
这样的话需要64个标记在定时器里做判断
有什么其他思路吗?大家提提建议

相关帖子

沙发
jerkoh|  楼主 | 2008-5-28 14:08 | 只看该作者

re

如果用64个标记的话,还要64个内存单元来存时间常数
比如定时一秒进中断减1,64个单元存05H,减5次,而且还有0-1S的误差
这样一大片的位标记和宝贵的RAM被占
觉的很不合理,但我一时还没想到合理的实现方法

使用特权

评论回复
板凳
jerkoh|  楼主 | 2008-5-28 14:16 | 只看该作者

re

在继电器前加一个5S延时电路,以硬代软,这虽然是个很好的办法。
但其实不符合我的要求
应为这里的5S时随时变的,可能1S,可能200S,可能111S。随上位机的时间命令常数变化的。我在附RAM值延时。

使用特权

评论回复
地板
jerkoh|  楼主 | 2008-5-28 19:26 | 只看该作者

自己顶

自己顶

使用特权

评论回复
5
5880527| | 2008-5-28 19:33 | 只看该作者

把80H以上的RAM利用起来吧

  

使用特权

评论回复
6
grady1125| | 2008-5-28 20:10 | 只看该作者

.

可以用三bit来做一个标记啊3*64/8=24B
实在不够用加一个E2PROM将标记存放里面,能放很多的

使用特权

评论回复
7
xwj| | 2008-5-28 20:40 | 只看该作者

51用掉64个ram也没什么,应该以20ms间隔计数

使用特权

评论回复
8
5880527| | 2008-5-28 21:05 | 只看该作者

xwj的后面个建议对楼主有用的,要不楼主的定时器太粗糙

至少64字节的RAM是省不掉的

使用特权

评论回复
9
xwj| | 2008-5-28 21:08 | 只看该作者

可以省,但是没必要省,用掉64还剩下很多啊

使用特权

评论回复
10
cqxyy| | 2008-5-28 22:29 | 只看该作者

好像可以省

计数不要求精确的话 一个字节8个位可拆成 高四位和低四位 

使用特权

评论回复
11
jerkoh|  楼主 | 2008-5-28 22:38 | 只看该作者

谢谢楼上的各位朋友。

谢谢楼上的各位朋友。

其实RAM等我都够用的,我主要怕浪费资源,明明可以用几个RAM或者标记解决的事情我非要有一个算一个的用64个,那太傻了

现在明白了这功能基本只好开辟64个RAM,没捷径。
我打算用XWJ的方法计数延时。这样相对精确很多

另外:grady1125 你的3*64/8=24B 我没看明白歪 呵~~




使用特权

评论回复
12
后学| | 2008-5-29 08:15 | 只看该作者

ROM和RAM,看你侧重优化哪一个了,

ROM是程序代码的长度,或者说复杂程度,和执行时间相关,
RAM就是占用内存了,

看要求的时间精准程度了

使用特权

评论回复
13
AIRWILL| | 2008-5-29 09:16 | 只看该作者

标记没有必要

64 RAM 就可以啦, 非0, 就输出, 定时服务里对不为0 的 RAM 就减1.

使用特权

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

本版积分规则

116

主题

1401

帖子

2

粉丝