如何用按键精灵9用一个脚本同时运行两个程序

如何用按键精灵9用一个脚本同时运行两个程序,第1张

运用到多线程就可以实现\x0d\BeginThread线程1//启动线程1\x0d\Delay10\x0d\BeginThread线程2//启动线程2\x0d\Delay10\x0d\\x0d\Sub线程1\x0d\//自己编写脚本内容\x0d\EndSub\x0d\\x0d\Sub线程2\x0d\//自己编写脚本内容\x0d\EndSub\x0d\\x0d\//呵呵,和call有点像,一个是调用至程序。一个是同时调用子程序\x0d\\x0d\//自己手写,给分吧

你这么写不太对,不要用如此多的for循环!!!你直接用do loop无限循环,另外你的子程序不应该跳到主程序,应该写跳出子程序。你这个不就是个简单的打怪拾取,然后再找下一个怪,如此往复么。。。。

是一段路口信号灯控制程序。

给你解释这么多,才20分,太不值了。

////////////////////////////////////////////////////////////////////

开始预定义了两个变量名,秒和毫秒

SEC EQU 36H ;秒

DEDA EQU 37H ;毫秒

这里是51程序入口地址,这里只能放跳转语句,因为后面是中断向量表,跳转到主程序,start标号

ORG 0000H

SJMP START

这里是T0中断入口,跳转到TIM0中断服务程序。

ORG 0BH ;T0中断入口

JMP TIM0

/////////////////////////////////////////////////////////////////////////////

////这一段是主程序,开始做一些初始化工作,就进入主循环,是个死循环,一直循环干活。////

ORG 30H

START:

设置堆栈地址。

MOV SP,#46H

设置P1口为输出高电平,后面程序看出,P1口对应的是信号灯开关,设成高电平表示所有灯全部关

MOV A,#0FFH

MOV P1,A

这里设置P0、P2、P3口全部为低电平输出

MOV A,#0

MOV P0,A

MOV P2,A

MOV P3,A

初始化秒跟毫秒两个内存变量为0从0开始计时

MOV DEDA,#0

MOV SEC,#0

配置定时器工作方式,中断时间,后面看来这个定时器时间常数应该是50ms中断的,这个常数要根

据晶振频率来计算的。

MOV TMOD,#11H

MOV TL0,#0B0H

MOV TH0,#3CH

开启中断、开启T0中断,

SETB EA

SETB ET0

SETB TR0

这里是主循环入口,就是后面的程序都运行完了要跳回这里,不是跳到主程序开头,否则就又关灯清

零了

START1:

NOP

NOP

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

双向黄灯亮三秒,这两句就是点亮黄灯,看出来P14是一个方向的黄灯,P11是另一个方向黄灯。

MOV A,#11101101B

MOV P1,A ;双方向黄灯亮3秒

这一段原地循环,检查秒是不是到3,到三就继续,不到三就原地等待。

BK1:

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

MOV A,SEC ;S

NOP

NOP

CJNE A,#3,BK1 ;

这几行再检查毫秒计数是不是到19,毫秒计数的单位应该是50毫秒记一个,这样就是又等了一秒。

MOV A,DEDA ;MS

NOP

NOP

CJNE A,#19,BK1

这里点亮主干道绿灯,次干道红灯,看来P12是主干道绿灯,P13是主干道红灯。

MOV A,#10110011B

MOV P1,A ;主干道绿灯亮、次干道红亮

清零秒和毫秒的计数

MOV DEDA,#0

MOV SEC,#0

这一段就是要等41秒,不到就原地等待,维持主干道绿灯,次干道红灯亮

BK2:

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

MOV A,SEC

NOPNOP

CJNE A,#41,BK2 ;

到了40秒,关闭主干道绿灯,是结合这个关闭动作看出来这里是主干绿灯的。

CPL P12

这一段就是绿灯反复闪烁4次点亮,4次熄灭,共八次翻转P12的 *** 作。每次10×50ms=05秒

MOV R0,#8 ;

BK3:

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

MOV A,DEDA

NOPNOP

CJNE A,#10,BK3

CPL P12

MOV DEDA,#0

DJNZ R0,BK3

然后双向黄灯亮起,秒计数毫秒计数清零,再等三秒,同前面三秒双向黄灯亮一样的程序

MOV A,#11101101B

MOV P1,A ;双方向黄灯亮3秒

MOV DEDA,#0

MOV SEC,#0

BK4:

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

MOV A,SEC

NOP

NOP

CJNE A,#3,BK4 ;

MOV A,DEDA

NOPNOP

CJNE A,#19,BK4

以下主干道红灯亮,次干道绿灯亮,这个时间是27秒,次干道放行时间短些,程序跟主干道绿灯一

样的

MOV A,#01011110B

MOV P1,A ;主干道红灯亮、次干绿道亮

MOV DEDA,#0

MOV SEC,#0

BK5:

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

MOV A,SEC

NOP

NOP

CJNE A,#27,BK5

CPL P15

次干道绿灯结束后,次干道绿灯闪烁4次,每次亮半秒、灭半秒,同主干道一样

MOV R0,#8 ;

BK6:

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

MOV A,DEDA

NOPNOP

CJNE A,#10,BK6

CPL P15

MOV DEDA,#0

DJNZ R0,BK6

秒计数清零,毫秒计数清零,跳回主循环,又重新点亮黄灯三秒,开启下一个循环

MOV DEDA,#0

MOV SEC,#0

JMP START1

///////////////////////////////////////////////////////////

这一段是定时器T0中断服务程序

TIM0:

保存现场,ACC和程序状态字保存

PUSH ACC ;T0中断子程序

PUSH PSW

重置时间常数,下次定时中断仍然是50ms以后到来

MOV TL0,#0B0H

MOV TH0,#3CH

MOV 0A6H,#01EH ;看门狗

MOV 0A6H,#0E1H ;看门狗

毫秒计数加1

INC DEDA ;MS

MOV A,DEDA

NOP

NOP

如果毫秒计数不到14H,就是不到20,跳到服务程序结束。

CJNE A,#14H,TT1

如果毫秒计数到了20,清零毫秒计数,秒计数加1。

MOV DEDA,#0

INC SEC ;

TT1: 服务程序结束处理

恢复现场,返回

POP PSW

POP ACC

RETI

后面的程序是没有意义的,正常跑的话不会到这里,意外到了这里就会跳回主循环。

NOP

NOP

NOP

AJMP START1

SJMP $

END

举个栗子说明,代码如下,你复制到按键中调试运行,看调试信息窗口,即可明白

Call 子程序1()

Do //主程序

    TracePrint "运行主程序中"

    Delay 3000

    Exit Do

Loop

Sub 子程序1()

    TracePrint "运行子程序1中"

    Call 子程序2()

End sub

sub 子程序2()

    TracePrint "运行子程序2中"

End sub

以上就是关于如何用按键精灵9用一个脚本同时运行两个程序全部的内容,包括:如何用按键精灵9用一个脚本同时运行两个程序、按键精灵问题求大神解答,第一句可以执行,子程序则直接跳过不执行内容、这段汇编语言 求解释~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10070681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存