运用到多线程就可以实现\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用一个脚本同时运行两个程序、按键精灵问题求大神解答,第一句可以执行,子程序则直接跳过不执行内容、这段汇编语言 求解释~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)