永发信息网

什么单片机可以时一时序执行多路分支程序吗

答案:4  悬赏:80  手机版
解决时间 2021-02-17 17:54
什么单片机可以时一时序执行多路分支程序吗
最佳答案
;可以用进程切换来完成
;进程切换演示程序
;我的第二个操作系统
;作者:杨江杰
;华南农业大学2010届机化2班
;qq 1192322386
;芯片:AT89S52
;文件名:switchprocess.asm
;R0未使用
;R1作为进程栈指针切换时的地址指针
i DATA 0002H
j DATA 0003H
t DATA 0004H
;R5作为当前进程指示,表示当前正在运行的进程
;R6未用
;R7未用
;0008H未用
;0009H未用
;#005AH是栈指针数组的基址

ORG 0000H;复位操作后的程序入口
JMP main
ORG 0003H;外部中断0入口地址
JMP outint0
ORG 000BH;T0中断入口地址
JMP timer0
ORG 0013H;外部中断1入口地址
JMP outint1
ORG 001BH;T1中断入口地址
JMP timer1
ORG 0023H;串行I/O中断入口地址
JMP scom
ORG 002BH;T2中断入口地址
JMP timer2
ORG 0030H
main:
;经过实践,栈深至少要达到10

;开始制造7个进程的运行环境,第8个进程就是main本身,到时跳转到led0
MOV SP,#13H;13是栈基址减1
MOV A,#LOW led1
PUSH ACC
MOV A,#HIGH led1
PUSH ACC

PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B

MOV 005BH,SP

MOV SP,#1DH
MOV A,#LOW led2
PUSH ACC
MOV A,#HIGH led2
PUSH ACC

PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B

MOV 005CH,SP

MOV SP,#27H
MOV A,#LOW led3
PUSH ACC
MOV A,#HIGH led3
PUSH ACC

PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B

MOV 005DH,SP

MOV SP,#31H
MOV A,#LOW led4
PUSH ACC
MOV A,#HIGH led4
PUSH ACC

PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B

MOV 005EH,SP

MOV SP,#3BH
MOV A,#LOW led5
PUSH ACC
MOV A,#HIGH led5
PUSH ACC

PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B

MOV 005FH,SP

MOV SP,#45H
MOV A,#LOW led6
PUSH ACC
MOV A,#HIGH led6
PUSH ACC

PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B

MOV 0060H,SP

MOV SP,#4FH
MOV A,#LOW led7
PUSH ACC
MOV A,#HIGH led7
PUSH ACC

PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B

MOV 0061H,SP
;成功制造7个进程的运行环境

;恢复0号进程的栈指针
MOV SP,#09H

;设定当前的进程号
MOV R5,#00H

;开始启动timer0中断
MOV TH0,#00H
MOV TL0,#00H
MOV IP,#02H
MOV TMOD,#01H
MOV IE,#82H
MOV TCON,#10H
;成功启动timer0中断,定时器正在运转

;直接进入led0进程
led0:
CPL P0.0
MOV t,#1H
CALL delay
JMP led0
led1:
CPL P0.1
MOV t,#2H
CALL delay
JMP led1
led2:
CPL P0.2
MOV t,#3H
CALL delay
JMP led2
led3:
CPL P0.3
MOV t,#4H
CALL delay
JMP led3
led4:
CPL P0.4
MOV t,#5H
CALL delay
JMP led4
led5:
CPL P0.5
MOV t,#6H
CALL delay
JMP led5
led6:
CPL P0.6
MOV t,#7H
CALL delay
JMP led6
led7:
CPL P0.7
MOV t,#8H
CALL delay
JMP led7

;延时程序,从最外层开始编写,然后嵌入内层语句
delay:
MOV i,#0FFH
outcycle:
MOV j,#0FFH
in_cycle:
DJNZ j,in_cycle
DJNZ i,outcycle
DJNZ t,delay
RET
;结束延时

outint0:
RETI
timer0:

;关闭中断
CLR EA

;开始保护运行环境
PUSH i
PUSH j
PUSH t
PUSH PSW
PUSH ACC
PUSH B
;成功保护运行环境

;开始切换栈指针
MOV A,#005AH
ADD A,R5
MOV R1,A
MOV @R1,SP

INC R5
INC R1

CJNE R5,#0008H,endsetR5
MOV R5,#0000H
MOV R1,#005AH
endsetR5:
MOV SP,@R1
;栈指针切换成功

;开始恢复运行环境
POP B
POP ACC
POP PSW
POP t
POP j
POP i
;成功恢复运行环境

;再次启动定时器
SETB TCON.4

;开启中断
SETB EA

RETI

outint1:
RETI
timer1:
RETI
scom:
RETI
timer2:
RETI
END
全部回答
你这个不算完全的并发,可以的。
将P1.0,P1.1,P1.2分别过非门后再过三输入与门,与门输出端连接到单片机的INT0或者INT1,一旦该中断输入发生中断,在中断程序中马上判断P1.0、P1.1、P1.2状态,根据这3个口状态来调用相应的处理程序。
这个倒是用不着多任务操作系统,虽然51上可以用这个东西。
只是要小心P1口那几位的状态改变的相关原因,不然一不小心就载中断里了。
真正的并发执行是不可能的,除非你用多核处理器
程序并发执行其实是操作系统的功劳,包括你的电脑能够同时执行多个任务,靠的就是XP
并发执行只是宏观上看起来是的,实际上CPU内部还是每一个周期执行一条指令。操作系统都有一个系统时钟,对于51来说,这个周期可以选择20ms左右,当然也可以是别的值,视你的任务而定。首先,系统建立多个任务,每个系统周期到来的时刻,都触发一次任务间切换,CPU保存当前任务信息而转去执行另一个任务;也可以在系统周期还没到的时候,由当前执行的任务主动触发一次任务切换;任务之间能够进行通信,比如某个任务要等到另外一个任务发个信息之后才执行,那么这个任务在执行之前,CPU可以执行别的任务(如果没有操作系统的话,一般做法就是CPU不停检测某个标志,这时CPU实际上是在空转!!!)
操作系统的核心功能就是调度任务,使CPU利用率达到最高,比如我们的很多程序里面都有延时,这种延时基本上是软件延时,CPU就在那里干耗着,操作系统里面也有延时程序,只不过这个延时是用定时器实现的,在A任务延时的时候CPU能够去执行B任务,系统在每次系统周期来到的时候检测任务A延时时间是否达到,如果到了就转去执行任务A,可以看出如果系统周期是20ms,那么任务延时设置成20msk肯定不能只能真正延时20ms
建议你看看RTX51-tiny 实时操作系统,一个为51量身定做的操作系统,非常适合51单片机,百度文库里面有中文使用说明
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
Nike sock dart 求大神鉴真假
三年两见是什么意思?
中国十大管业是什么
WOW我用的是LUI的插件 怎么设置伤害统计的字
给一个水池放水,若单独打开a排水口,40分钟可
偶像剧本男女主演人物名字
请问棕树在河北南部一带能种活吗
去香港购物,分别哪些地方好的呢?
乐韩网吧地址有知道的么?有点事想过去!
5分之2等于多少除以20等于多少分之14等于多少
月入8000的工作有哪些
跪求下载魔宫帝国BD中英双字1280高清种子的网
一般175身高男生腰围要多少才是最标准身材
blood x blood高大胖的第一次到底肿么回事?
脾:长约11.0cm,厚约3.1cm,脾上极探及大小约1
推荐资讯
请教:关于XPS中的一个问题
长春烤全羊哪里比较合适?
大连最正宗的韩国料理?
福建达利集团待遇怎么样?
财运批发部怎么去啊,有知道地址的么
梵·戴克地板这个地址在什么地方,我要处理点
【西厢记共有几本几折】西厢记共有多少折
四岁的儿子说梦见自己被水冲走了,,,今天早
手足抽搐时肌力几级
小米note为什么别人给我打电话打不通
滴滴怎么盈利
下列各种现象,属于动物间“通讯”的是BA. 老
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?