发新帖我要提问
123
返回列表
打印

一个程序没有执行完,可以执行另一个程序吗?

[复制链接]
楼主: zhuyl456
手机看帖
扫描二维码
随时随地手机跟帖
41
hopewise| | 2011-9-17 12:34 | 只看该作者 回帖奖励 |倒序浏览
主要采用程序主周期固定就解决,如下面的是2ms为主周期的(每条指令执行时间是0.5us,则2ms就可以完成4000条指令,足以对付一般产品),扫描10次(即2ms*10=20ms)都是低电平,则判为按键按下.我的所有子程序是没有delay的,否则实时性不强.

main:



mov
a,t_125us


sub
a,8


snz
c

;
到了2mS                 


jmp

main
;
没到,则跳到main

main1:

clr
t_125us

;
到了,则清t_125us变量



snz
halt_b
;halt_b
等于1则进入睡眠状态



jmp
$+2

;
0则正常执行指令


jmp

sleep_man

;
睡眠管理



clr
wdt
;
喂狗      


call
key_scan_man
;
按键扫描管理


call
display
;
直接显示数码管内容


call
test_sleep_man
;
测试是否符合进入睡眠条件


call
open_inspection_man
;
开门行程开关检测管理  


call
voltage_chk
;
电池电压检测管理


call
time_man
;
时间管理



call
motor_man
;
电磁铁驱动管理(开门)


call
buz_work
;
蜂鸣器管理


call
baojing_man
;
报警输出管理


call
HM_inspect_man
;
换码开关管理


call
key_deal_man
;
按键处理管理  


call
disp_man
;
显示管理


call
led_zhaoming_man
led
灯照明灯管理


jmp
main



使用特权

评论回复
42
hopewise| | 2011-9-17 12:39 | 只看该作者
乱码,重新附上

main.rar

30.73 KB

使用特权

评论回复
43
liangxd3| | 2011-9-18 00:01 | 只看该作者
把小程序放到按键检测的延时里面岂不更好,或者直接把小程序当延时程序用

使用特权

评论回复
44
ty5004| | 2011-9-18 17:48 | 只看该作者
用调用就可以了。

使用特权

评论回复
45
zcf816| | 2011-9-18 18:54 | 只看该作者
如果只是随意的想加个程序进去,最好就是用中断,如果设计的时候就考虑到这个的话,最好是把中断做的好一些,把堆栈写的好些,用临时调用也可以。

使用特权

评论回复
46
wen86sv| | 2011-9-19 14:39 | 只看该作者
中断,首选中断

使用特权

评论回复
47
zxcscm| | 2011-9-19 17:28 | 只看该作者
看了楼主是用汇编写的
现在只有c语言写的程序,还是把这个实例传上来吧,希望对楼主将来有用
走马灯.rar (90.36 KB)

使用特权

评论回复
48
khrusun| | 2011-9-20 20:52 | 只看该作者
可以搞个定时器中断啊,难道你想实时监测,没必要,浪费

使用特权

评论回复
49
hopewise| | 2011-9-21 07:58 | 只看该作者
那个跑马灯例子实时性不强,做为哄一下初学者还是可以的,但做商业产品的话,这种编程结构要打上问号.
     按键扫描delay 10ms,这在商业产品绝对不允许的.要是我的编程结构,已执行1万条指令了(1us执行1条指令),

使用特权

评论回复
50
aihe| | 2011-9-21 10:04 | 只看该作者
楼上都是单指令周期的?

使用特权

评论回复
51
740878642| | 2011-9-21 22:06 | 只看该作者
没积分下不了啊?

使用特权

评论回复
52
hjs1618| | 2011-9-24 17:20 | 只看该作者
可以用定时中断,中断里设置标志位,主循环检查标志位(记得清0),就可以

使用特权

评论回复
53
sunshitao| | 2011-9-24 19:35 | 只看该作者
实在不行就把 PC 动了吧,参考RTOS的原理

使用特权

评论回复
54
jxk304| | 2011-10-28 17:41 | 只看该作者
参考操作系统任务调度的思想吧。

使用特权

评论回复
55
刘前辈| | 2011-10-29 11:11 | 只看该作者
本帖最后由 刘前辈 于 2011-10-29 11:15 编辑

挺简单的。
LZ只要保证跳来跳去程序不乱就行。

框架:
1:按键实时响应当然是用中断ISR,硬件按键接中断管脚不用说了吧。中颖,华邦都是带十几个外部中断管脚的单片机。
2:中断键盘处理ISR决定跳到哪一个动画显示程序;假定N个动画程序分别为
        void D0(void);  ……    void  Dn-1(void);
  则创建一个函数指针数组  void  ( *founc[ ] ) ( void ) ={ D0,D1,……Dn-i };
           下面的工作很简单了:根据扫描码N 决定(确定)中断ISR返回时转向 founc[N];
3:数组元素 founc[N] 是一个动画程序的地址,中断 RETI  返回地址默认是主函数正在运行的被中断的后台程序地址,假设为 &mf;呵呵……,在RETI 之前,把返回程序地址 &mf  修改为 founc[N],没问题吧?——有问题,我帮你写。

     妥啦!这个方法应该让讲习所长讲得更好。所长以前讲过,就是没有实例,这次LZ的问题是很好的函数指针数组的应用实例。


、、

使用特权

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

本版积分规则