导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→<b>C51编程:所长今天出道题,农民们看过来,如何编程:<[《农民运动讲习所》所长]

 *第1445篇: C51编程:所长今天出道题,农民们看过来,如何编程:

  
21楼:yt_c51 2002年9月14日15:58
 不是很复杂吧!相当于两个控制任务!
  
22楼:红心J 2002年9月14日17:45
 知道测两个键同时按下的方法,就不该有问题了。
  
23楼:livaroc 2003年2月11日08:44
 俺说说
问题一:这是一个多任务运行的例子,对于51,处理多线程任务,只能采用分时复用控制;
问题二:由于程序运行中要频繁的被中断,因此断点的保护就尤其重要;
解决:
程序分为主程序,线程分配程序,控制服务程序.
在线程分配程序中,设置线程序号寄存器,对每个控制子程序,设置不同的堆栈段.通过检测线
程序号寄存器决定下一个要执行的线程,将相应堆栈段内的内容出栈,从该程序上次反回断点
处继续执行.
将每个控制服务程序人为的划分成一些小段(时间不能过长100MS左右),中间插入执行状态入
栈指令,并将线程序号寄存器内容加一,然后反回线程分配程序.
使用一个通用定时器中断T0或T1,设置一个定时器状态字,设置定时常数,每次中断定时器状
态字加一.控制服务程序中所有的延时,由检测定时器状态字的差值来实现.
  
24楼:huzimax 2003年2月11日22:40
 报告所长
两种方法:
硬件:用两片,当然可以达到完全的同时运行
软件:将程序写成三部分,KEY1对应 功能1;KEY2对应 功能2;KEY1+2对 应功能3
功能3=功能1+功能2,简单的方法是从将程序语句混到一起,只要时间上达到所谓的同时要
求就行了
  
25楼:huzong 2003年4月30日13:27
 有点疑问
两个程序一共需要几个输出?
  
26楼:guest 2003年5月2日13:07
 使用最简单的分时,实现不难。对农民提出的
使用最简单的分时,实现不难。对农民提出的问题解决不了,不洗就可以睡!
  
27楼:堕天使 2003年5月2日14:02
 很简单,是不是我的知识太少,看我的!(不要见笑)
如果使用中断的话,出发一个键的中断,检查第二个键的中断是否触发,
若没有触发,则响应一个键,若两个键都触发了中断标志位,则响应执行同时按下时程序的!
如果不是中断而是扫描键盘的话,就扫到其中一个键按下后,置一个标志位比如说20h单元,若t1按下[20]+1,扫t2键,若按下[20]+2,这样按照20单元的内容在扫描键盘后执行起步是很好,并且耗时也很短啊!

是不是我知道的太少?
请大家指教!!!

  
28楼:guest 2003年5月13日08:36
 实现方法:
1。按下第一个键时执行第一

实现方法:
1。按下第一个键时执行第一个任务。
2。按下第二个键时执行第二个任务。
3。同时按下两个键时,先执行时执行第一个任务。在时执行第一个任务中,开放定时器(10mS)。定时器发生中断时,执行第二个任务。
4。在时执行第二个任务中,开放定时器(10mS)。定时器发生中断时,执行第一个任务。
5。重复执行,直至结束。
6。不洗就睡,无须再讨论!


  
29楼:边缘地带 2003年8月19日00:51
 用硬件来实现。
在硬件上可以使用与门将两个按键同时来触发中断,每个按键接到一个i/o上去(这样可以可以扩展到很多个按键),然后执行循环检测输入口,从第一个口开始检测到最后一个,检测一个执行一个,每个任务轮流执行,这样的话每个任务不能太长。
要是每个任务是在太长了的话(可能需要1到几秒),这是就要使用中断加定时,利用定时器作时分操作,这跟时分的OS原理因该差不多吧。
这是我的初步构思,请大家多多指教。
  
30楼:guest 2004年3月1日18:33
 无论是两个按键还是由同一个MCU控制的两
无论是两个按键还是由同一个MCU控制的两台设备,绝对的同时是不可能做到的,所谓的两键同时按也是之在一定的时间范围内检测到了不同的按键,就当作两键同时按。如果超出了这个时间范围,就只能算最后的那次按键。

两台设备也是不可能对的绝对同时开始运行,单片机分时执行多任务,在没有操作系统的情况下,也太夸张了。

版主你说对不对?

  
31楼:lxshan 2004年3月2日20:32
 在单片机里没有绝对的同时,无论用什么方法
在单片机里没有绝对的同时,无论用什么方法都不可能,理由如下:
CPU运行时是以单线程运行的,同一个时钟周期只能处理一个命令而不管其命令是中断还是多任务或其它,即使能同时按下两个键也会因单片机的时序而变成有先后的两个键.
所以处理可以分先后,只可能是尽量减少时差而已
  
32楼:lxshan 2004年3月3日18:44
 有个好办法:按键采用同一个I/O口如P1
有个好办法:按键采用同一个I/O口如P1,输出采用另一个I/O口如P3,检查时采用读端口方法则可实现同时!!!

>>>>>>对该主题发表你的看法

本主题贴数32,分页: [第1页] [第2页]


[上一篇主题]:请问什么是达林顿晶体管?  谢谢!~

[下一篇主题]:我想用一个外部程序存储器做字库,怎么对它编程!怎么访问它?