版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务5运料小车控制5.1任务内容与分析
5.2任务实施5.3任务相关知识
5.1任务内容与分析
1.任务内容
在生产现场中会经常使用电机拖动小车运送物料,本任务以运料小车控制为例,介绍子程序的应用。
2.任务分析图5-1运料小车控制电路示意图
图5-1为运料小车控制电路示意图,按钮S0启动小车开始运行,小车在限位开关S1处装料,25s后装料结束开始右行,碰到限位开关S2后小车停下来卸料,2s后左行,碰到限位开关S1后又停下来装料。这样不停地循环工作,直到小车运料达到20车时停止工作。选P1.0、P1.1和P1.2三位口线作按钮和限位开关状态信号的输入端,选P2.0和P2.1作为控制小车右行和左行拖动电动机的输出信号。图5-1运料小车控制电路示意图任务中,小车装料需要25s,卸料需要2s,可采用软件延时实现时间控制,分别编写一个25s的延时子程序和一个2s的延时子程序,则装料的时候调用25s的延时子程序,卸料的时候调用2s的延时子程序。
5.2任务实施
下面一起实现运料小车控制吧!在这部分重点应学习子程序的调用,进一步熟悉转移类、循环类指令及分支结构程序的应用。
步骤1:设计硬件电路,如图5-2所示。图5-2运料小车控制电路原理图步骤2:分析任务内容,绘制程序流程图。用位操作指令检测限位开关的状态,用累加器A统计运料小车车数。累加器A初值为00H,每当限位开关S2动作一次,则对累加器A加1操作一次。这样当累加器A的内容为20时,表示已运料20车。程序流程如图5-3所示。图5-3运料小车控制程序流程图步骤3:根据流程图编写源程序。具体如下:
;************运料小车控制程序**************
;程序名:运料小车控制程序SHIPCART.A
;程序功能:电机拖动小车运送物料
S0BITP1.0
S1BITP1.1
S2BITP1.2
LEFTBITP2.0
RIGHTBITP2.1
ORG0000H
AJMPMAIN ;跳转到主程序
ORG0030H
MAIN:CLRA ;卸料车数赋初值0
CLRLEFT ;关闭小车左右行
CLRRIGHT
SKEY0: JBS0,L1 ;判断S0是否按下
LCALLD10MS ;延时10ms去抖动
JBS0,SKEY0 ;再确认S0是否按下
SKEY1: JBS1,$ ; S1动作否?
LCALLD25S
SETBRIGHT ;小车右行
JBS2,$ ; S2动作否?
LCALLD2S
INCA ;卸料车数加1
CJNEA,#20,LOOP ;是否卸料20车?
AJMPSKEY0;是,停下来,等待启动按钮S0
LOOP: CLRRIGHT ;不是,小车左行
SETBLEFT
AJMPSKEY1
;***************10ms延时子程序*****************
D10MS: MOVR7,#40
D10MS1:MOVR6,#123
NOP
DJNZR6,$
DJNZR7,D10MS1
RET
;*********2s延时子程序*****************
D2S: MOVR5,#40
D2S0: MOVR4,#200
D2S1: MOVR3,#123
NOP
DJNZR3,$
DJNZR4,D2S1
DJNZR5,D2S0
RET
;**********25s延时子程序*******************
D25S: MOVR5,#250
D25S0: MOVR4,#200
D25S1: MOVR3,#248
NOP
DJNZR3,$
DJNZR4,D25S1
DJNZR5,D25S0
RET
END
5.3任务相关知识
5.3.1空操作指令
NOP ;PC→(PC)+1
这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。一般用作短时间的延时。5.3.2基本程序结构4——子程序及其调用
1.子程序
在任务1闪烁灯中,我们已用到过子程序(ACALLDELAY_50MS),只是并没有明确地介绍。子程序是干什么用的?为什么要用子程序技术呢?举个例子,数学老师布置了10道算术题,经过观察每一道题中都包含一(3×5+2)×3
的运算,我们能有两种选择。第一种选择是每做一道题,都把这个算式算一遍;第二种选择是,我们先把这个结果算出来(结果为51)放在一边,然后要用到这个算式时就将51代进去。这两种办法哪种更好呢?不必多言。其实,设计程序时也是这样,有时一个功能会在程序的不同地方反复使用,我们就把这个功能做成一段程序,每次需要用到这个功能时就“调用”一下。
2.调用与返回
主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不能“一去不回头”,那么应回到什么地方呢?答案是:回到调用子程序的下面一条指令继续执行。以闪烁灯中子程序ACALLDELAY_50MS为例,子程序调用与返回过程如图5-4所示。子程序只需书写一次,主程序可以反复调用它。图5-4子程序调用与返回以下是4条与子程序调用有关的指令。
ACALLaddr11 ;短调用指令
LCALLaddr11 ;长调用指令
RET ;返回指令
RETI ;中断返回指令
3.现场保护与恢复
主程序常要使用寄存器,而子程序运行时也常要使用寄存器。这就产生了问题——主程序和子程序都使用相同组的寄存器。假如主程序调用子程序时,不对其所使用的寄存器内容加以保护,那么从子程序返回主程序时,就无法将它们恢复到主程序调用子程序前的状态,故也就无法保证主程序能在原有的基础上继续执行下去。通常,把主程序调用子程序时各个寄存器的状态称为主程序的现场。很明显,在主程序调用子程序时,必须对主程序的现场进行保护。在子程序执行完毕返回主程序之前,必须对主程序的现场加以恢复。这就是采用子程序结构时的“现场保护”和“现场恢复”问题。现场保护的原则是:除了用来存放输出参数的寄存器外,凡是子程序需要使用的寄存器,在进入时都应该加以保护。
(1)在主程序中实现,其特点是结构灵活。示例如下:
PUSHPSW ;保护现场
PUSHACC
PUSHB
ACALLaddr11 ;子程序调用
POPB ;恢复现场
POPACC
POPPSW
(2)在子程序中实现,其特点是程序规范、清晰。示例如下:
SUB1: PUSHPSW ;保护现场
PUSHACC
PUSHB
POPB
;恢复现场
POPACC
POPPSW
RET
;子程序返回
4.堆栈指令PUSH和POP
PUSHdirect ;SP←(SP)+1,(SP)←(direct)
POPdirect ;direct←((SP)),SP←(SP)-1
堆栈是内部RAM中按“先进后出”的规则组织的一片存储区。此区的一端固定,称为栈底;另一端是活动的,称为栈顶。栈顶的位置(地址)由栈指针SP指示(即SP的内容是栈顶的地址)。在8051中,堆栈的生长方向是向上的(地址增大)。入栈操作(PUSHdirect)时,先将SP的内容加1,然后将direct单元的内容存入SP指向的单元;出栈操作(POPdirect)时,先将SP指向的单元内容传送到direct单元,然后将SP的内容减1。系统复位时,SP的内容为07H,这样单片机初始化的堆栈区域同第1组工作寄存器区重合。也就是说,当把堆栈栈底设在07H处时,就不能使用第1组工作寄存器。如果堆栈存入数据量比较大的话,甚至第2组和第3组工作寄存器也不能使用了。因此,通常总是把堆栈区的位置设在用户RAM区。例如:
MOVSP,#60H
;将堆栈栈底设在内部RAM的60H处
PUSHPSW ;保护现场
PUSHACC
PUSHB
ACALLaddr11 ;子程序调用
POPB ;恢复现场
POPACC
POPPSW
【例5-1】若(SP)=40H,(A)=88H,(PSW)=99H,请说明顺序执行以下指令时,相关寄存器及SP指针的变化情况。
PUSHA
PUSHPSW
POPPSW
POPA解
5.参数传递
主程序与子程序间一个主要问题是参数传递。入口参数是指主程序调用子程序时提供给子程序的参数。出口参数是指子程序执行结束返回给主程序的参数。
参数的具体内容包括:①传数值,即传送数据本身;②传地址,即传送数据的主存地址。常用的参数传递方法包括:利用累加器或寄存器、利用存储器和利用堆栈。当然,有些子程序无需参数传递,这类子程序中所需要的参数是子程序赋予的,不需要主程序给出,如前面所用的DELAY_50MS子程序。
(1)利用累加器或寄存器。该方法最简单,比较常用,但由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址。
【例5-2】将片内RAM从30H开始的10个存储单元的内容清0。
实现程序:
MAIN:… ;主程序
MOVR0,#30H
MOVR7,#0AH
ACALLSUBRT
…
SUBRT: MOVA,#00H;子程序
LOOP: MOV@R0,A
INCR0
DJNZR7,LOOP
RET
(2)利用存储器。传送的数据量比较大时,可以利用存储器实现参数的传递。先建立一个参数表,用指针指示参数表所在位置。
①参数表建立在内部RAM时,用R0或R1作指针。
②参数表建立在外部RAM时,用DPTR作指针。
【例5-3】将R0和R1指向的内部RAM中两个3B无符号整数相加,结果送到由R0指向的内部RAM中。入口参数:R0和R1分别指向加数和被加数的低位字节。出口参数:R0指向结果的高位字节。低字节在高地址,高字节在低地址。
实现程序(子程序名NADD):
NADD:MOVR7,#3;三字节加法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 雷诺现象及雷诺氏病课件
- 2026年宁夏考评员考模拟题及答案详解
- 2026年计算机技术模拟试题(含答案)
- 2026年素描人物模拟题及答案详解
- 2026年司法考试民法综合模拟题及答案详解
- 河北恒锦橡塑制品有限公司介绍企业发展分析报告模板
- 2026年出入院病人护理模拟试卷(含答案)
- 院085600材料与化工考研报录数据分析报告初试+复试+调剂
- 2026年畜牧类职称模拟试卷(含答案)
- 2026年初中零诊语文模拟试题(含答案)
- 2026年焊工技术比赛模拟试题(含答案)
- 第19课《想和做 》课件 2026-2027学年统编版语文九年级上册
- Unit 3 Smart Learning Section A Grammar Focus 课件(内嵌视频)2026-2027学年人教版英语九年级上册
- 安全生产治本攻坚三年行动工作任务清单
- 人教版五年级上册第三单元习作:故事新编 写作指导课件
- 2026年安全员C证(专职安全生产管理人员)考试题库及答案
- 林芝市巴宜区社区工作人员《网格员》考试全真模拟易错、难点汇编题库(附答案)
- 换热站系统调试作业方案
- 小学一年级同音字大全(带拼音+组词+字义区分课本高频)
- 校园食品安全知识竞赛题库(附答案)
- 降级技术精神科
评论
0/150
提交评论