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

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

  
楼 主:《农民运动讲习所》所长 2001年12月11日09:19
 <b>C51编程:所长今天出道题,农民们看过来,如何编程:</b>
有一台机电设备,有两个按键,控制设备的两个不同部分。
现要求:
  每个按键按下,相应控制程序运行。但两个按键可以同时按下,就是说两个控制程
序可能
需要同时运行。使用一个89C52,如何编写程序?

注:此程序不使用RTOS等操作系统。

  
2楼:傲气雄鹰 2001年12月11日13:52
 两个控制程序放时间中断中。键一按下则打开T0。键二按下则打开T1。注意:任务在一次中断中是运行不完的,等待下次中断产生后继续运行。
  
3楼:《农民运动讲习所》所长 2001年12月11日13:55
 有点意思,创意虽好,但缺点太多。还不能及格。(如果升级到三个四个又如何)
  
4楼:傲气雄鹰 2001年12月13日17:41
 我所说的模拟时钟也不行吗?可以模拟很多个的。
  
5楼:寄存器 2001年12月12日14:50
 回复所长
开一个定时器做系统时钟。应用程序在定时器中断中执行,但应用程序要分段,每执行
100MS(根据指令周期计算)设置程序标志和轮流标志后退出中断,下一次进入中断后根据
标志跳转到相应位置继续执行。退出中断后检查键值,并设定相应的键标志。再一次进入中
断后根据程序标志、轮流标志、键标志确定要执行的程序段。基本上在模拟分时复用。小兄
弟(小美眉)听明白了没有?不明白可以给大哥哥发个EMAIL,在给你单独辅导。
  
6楼:《农民运动讲习所》所长 2001年12月12日15:37
 理论成立,实际行不通。还不行。
  
7楼:寄存器 2001年12月12日15:42
 请你指点为什么行不通?许多程序都是这么做的。
  
8楼:wp_zl 2001年12月13日08:43
 不使用RTOS等操作系统,可以考虑复合键的使用,两个键共有4态,编写3个服务程序得了。
  
9楼:wood 2001年12月16日20:46
 初学者:这样可以吗?
如果精度要求不高,可以做一个大一点的时间片t,每2t扫描一次键,如果一个键按下,做
这件事2t时间,如果2个键,每个做t(一先一后)。每个任务用自己的栈,可能有点很大。
  
10楼:zyj1963 2001年12月17日20:29
 请所长指点
不知这样是否能通过:
    开辟一个缓冲区,保存每个程序被中断的现场参数(PC,寄存器)。
    一个时钟中断,每次进入时,将被中断程序(有标志)的现场参数(PC,寄存器)保存
到相应的缓冲区。
    根据按键,将相应程序的保存参数恢复,置相应程序运行标志,中断返回。
    系统开始运行,将每个程序运行起使参数置缓冲区,等待时钟中断。

    以上处理不知行否,请所长指正

    一个普通农民

  
11楼:lquan 2001年12月19日13:42
 回复!
设置计数器方式,将初值=255,按键一下,计数加1,计数器溢出,产生中断
  
12楼:天涯倦客 2002年8月21日23:56
 不用那么费劲,设健一进入一个I/O,健二进入一个I/O口,当两个健都按下时,进入的是第三个I/O口,单片机判断哪个I/O有信号,执行相应程序即可。在硬件方面加个门即可。
  
13楼:fsadgh 2004年11月26日11:28
 这种好像真的还不错!!!同意!
这种好像真的还不错!!!同意!
  
14楼:x_s_f 2002年1月11日16:51
 采用多任务编程机制,建立一个消息队列。。。
  
15楼:幽游梦蝶 2002年1月11日17:50
 天下的农民都一样,俺真的也是农民,所长看俺农民们的想法是不是也一样?
   俺农民没文化,表达方式相信是俺们农民就看得懂:
   比如按键接在P1口(加上拉电阻,按键接地,可以是8个键),由于机电设备的时间要求
不是很严格,可以分时复用:
void main(void)
{
  unsigned char t;
  while(1)
 {
    t=P1;
    ACC=t;if(!a0){fuction0();}
    ACC=t;if(!a1){fuction1();}
    ACC=t;if(!a2){fuction2();}
    ACC=t;if(!a3){fuction3();}
    ACC=t;if(!a4){fuction4();}
    ACC=t;if(!a5){fuction5();}
    ACC=t;if(!a6){fuction6();}
    ACC=t;if(!a7){fuction07();}
 }
 while(1);
}
请各位大虾多多指教!
  
16楼:阿发 2002年9月15日20:03
 为何不能编译
我照你的程序编了一个,可是在编译时出现`ACC`:undefined identfier.提示,
是不是应该在什么地方先定义一下。请指教:
  
17楼:tripper 2002年8月21日14:47
 加点东西
一个组合逻辑加一个中断程序轻松搞定呀所长,不要这么不舍得破费嘛
  
18楼:xdkjason 2002年8月22日11:43
 报告所长!!!我...
实际上这种情况在键盘的锁定等操作中用的很广,如果你是第一次按键的话,必须按预先设定
的按键顺序进行!比如当三个按键同时按下时,允许你继续操作!!
有问题找我,所长可能是在....
  
19楼:天涯倦客 2002年8月26日14:20
 另一个问题,当按某个键时间不同时的响应不同,如何解决?
  
20楼:wangqinglin 2002年8月26日15:08
 没劲
没劲!太简单!来个难点的

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

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


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

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