5控制转移指令实验
- 格式:doc
- 大小:58.50 KB
- 文档页数:3
《单片机应用系统设计》课程教学大纲一、本课程的地位、作用和任务本课程是在学生学完电子技术类基础课程和微机应用类基础课程之后,为加强对学生技术应用能力的培养而开设的体现电子技术、计算机技术综合应用的综合性课程。
本课程的任务是使学生获得单片机应用系统设计的基本理论、基本知识与基本技能,掌握单片机应用系统各主要环节的设计、调试方法,并了解单片机在测量、控制等电子技术应用领域的应用。
初步具备应用单片机进行设备技术改造、产品开发的能力。
二、理论教学内容绪论单片机概述0.1 引言0.2 单片机的特点0.3 单片机的发展0.4 MCS-51单片机系列简介第一章MCS–51单片机的结构和原理1. 1 单片机的内部结构1. 2 MCS–51的外部引脚及功能1. 3 MCS–51的存储器配置1. 4 并行输入/输出接口电路1. 5 时钟电路与时序1. 6 MCS –51最小系统设计第二章MCS-51的指令系统2.1 MCS-51指令系统概述2.2 数据传送类指令2.3 算术运算类指令2.4逻辑运算及移位类指令2.5 控制转移类指令2.6 布尔变量操作类指令第三章汇编语言程序设计3.1 汇编语言源程序的格式3.2 伪指令3.3 汇编语言程序举例第四章MCS—51的中断与定时4.1 MCS—51单片机的中断系统4.2 MCS–51的定时/计数器第五章存储器扩展技术5.1 概述5.2 程序存储器的扩展5.3 数据存储器的扩展5.4 PROME2及其扩展第六章I/O扩展技术6.1 I/O接口概述6.2 MCS-51并行I/O口的直接使用6.3 简单I/O扩展6.4 8255并行I/O口6.5 8155简介第七章键盘/显示器扩展技术7.1 单片机应用系统中的人机通道7.2 键盘及其接口7. 3 显示器及接口7.4 专用的8279键盘/显示器接口第八章模拟量输入/输出通道8.1 模拟量输入通道8.2 模拟量输出通道第九章MCS-51的串行通信9.1 串行通信基础9.2 串行接口的构成与工作方式9.3 串行口的典型应用9.4 单片机的多机通信9.5 RS-232C串行总线第十章应用程序设计技术10.1 智能仪表的一般结构10.2 单片机应用系统设计举例第十一章高性能单片机PIC16F8XX介绍11.1 PIC16F87X的特点11.2 PIC16F87X的结构与配置11.3 PIC16F87X的功能部件11.4 PIC16F87X的应用举例三、实践教学的内容和要求实验一联机仿真操作练习实验目的:进一步掌握开发工具的应用实验内容:学习PC机与开发机联机仿真的操作方法实验二指令系统和编程练习实验目的:掌握8051单片机常用指令的使用和编程实验内容:用8051单片机的常见指令编写简单的多字节加减法程序。
实验三微程序控制器实验一. 实验目的与要求:实验目的:1.理解时序产生器的原理,了解时钟和时序信号的波形;2.掌握微程序控制器的功能,组成知识;3.掌握微指令格式和各字段功能;4.掌握微程序的编制,写入,观察微程序的运行,学习基本指令的执行流程。
实验要求:1.实验前,要求做好实验预习,并复习已经学过的控制信号的作用;2.按练习一要求完成测量波形的操作,画出TS1,TS2,TS3,TS4的波形,并测出所用的脉冲Ф周期。
按练习二的要求输入微指令的二进制代码表,并单步运行五条机器指令。
二. 实验方案:按实验图在实验仪上接好线后,仔细检查无误后可接通电源。
1.练习一:用联机软件的逻辑示波器观测时序信号,测量Ф,TS1,TS2,TS3,TS4信号的方法如下:(1) TATE UNIT 中STOP开关置为“RUN”状态(向上拨),STEP开关置为“EXEC”状态(向上拨)。
(2) 将SWITCH UNIT 中右下角CLR开关置为“1”(向上拨)。
(3) 按动“START”按钮,即可产生连续脉冲。
(4)调试”菜单下的“显示逻辑示波器窗口,即可出现测量波形的画面。
(5)探头一端接实验仪左上角的CH1,另一端接STATE UNIT中的Ф插座,即可测出时钟Ф的波形。
(6)探头一端接实验仪左上角的CH2,另一端接STATE UNIT中的TS1插座,即可测出TS1的波形;(7)探头一端接实验仪左上角的CH1,另一端接STATE UNIT中的TS2插座,即可测出TS2的波形。
(8)将红色探头一端接实验仪左上角的CH1,另一端接STATE UNIT中的TS3插座,即可测出TS3的波形。
(9)将红色探头一端接实验仪左上角的CH1,另一端接STATE UNIT中的TS4插座,即可测出TS4的波形。
2.观察微程序控制器的工作原理:①关掉实验仪电源,拔掉前面测时序信号的接线;②编程写入E2PROM 2816A.将编程开关(MJ20)置为PROM(编程)状态;B.将实验板上STATE UNIT 中的STEP置为STEP状态,STOP置为RUN状态,SWITCH UNIT中CLR开关置为1状态;C.在右上角的SWITCH UNIT中UA5-UA0开关上置表3.2中某个要写的微地址;D.在MK24-MK1开关上置表3.2中要写的微地址后面的24位微代码,24位开关对应24位显示灯,开关置为1时灯亮,为0时灯灭;E.启动时序电路,即将微代码写入到E2PROM 2816的相应地址对应的单元中;F.重复C-E步骤,将表3.2的每一行写入E2PROM 2816。
实验一数据传送指令的使用及编程方法1.片内RAM的数据传送【实验程序】源程序单元内容ORG 0000HLJMP MAINORG 0030HMAIN:MOV R0,#40H R0MOV R1,#41H R1MOV A,R0 AMOV 30H,A 30HMOV 20H,30H 20HMOV A,#30H AMOV @R0,A 40HMOV A,30H AMOV R7, A R7MOV A,@R0 AMOV R7,A R7MOV DPTR,#0A702H DPTRMOV 30H,R7 30HMOV 20H,@R0 20HMOV 21H,#10H 21HMOV @R0,21H 10HMOV @R1,#01H 41HSJMP $END【实验要求】(1)理解源程序中每条数据传送指令的操作含义,将结果填入每个单元的相应“内容”中。
(2)单步运行源程序,逐条检查“内容”是否正确。
2.外部RAM的数据传送。
【实验程序】源程序单元内容ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#1A33H DPTRMOV A,#80H AMOVX @DPTR,A 1A33HMOV A,#00H AMOV P2,#1AH P2MOV R0,#34H R0MOV R1,#35H R1MOVX @R0,A 1A34HMOVX A,@DPTR AMOVX @R1,A 1A35HMOVX A,@R0 AMOVX A,@R1 ASJMP $END【实验要求】(1)理解源程序指令含义,指出各存储单元的内容,写在右边的“内容”中。
(2)单步运行源程序,逐条验证分析结果。
3.片内特殊功能寄存器(SFR)的数据传送【实验程序】源程序ORG 0000HLJMP MAINORG 0030HMAIN:MOV SP,#60H ;设栈指针MOV R0,#30H ;#30H送R0(0区)MOV P1,#0EFH ;#EFH送P1口(直接地址为90H)MOV @R0,P1 ;将P1内容送R0所指单元MOV C,P1. 1 ;将P1口的D1位内容送CMOV P1. 7,C ;将CY的内容送P1. 7PUSH PSW ;保护0区寄存器MOV PSW,#08H ;选择1区寄存器MOV R0,#40H ;#40H送1区寄存器R0(08H)MOV @R0,P1 ;P1口内容送1区R0所指单元POP PSW ;恢复0区寄存器SJMP $END【实验要求】(1)理解源程序指令含义,并参照注释写出结果。
实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。
2. 掌握汇编语言程序设计的基本方法。
3. 通过实验,加深对微机原理的理解。
二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。
2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。
四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。
2.5 控制转移指令实验
一、实验目的
·掌握无条件转移指令和条件转移指令的使用。
·掌握调用指令和返回指令的使用。
·掌握用Keil调试汇编源程序的方法。
·掌握用Proteus调试汇编源程序的方法。
二、实验预备知识
无条件转移指令是指当程序执行到该指令时,程序无条件转移到指令所提供的地址处执行。
有长转移指令( LJMP)、绝对转移指令(AJMP)和相对转移指令(SJMP)三种。
条件转移指令是指根据给出的条件进行判断,若条件满足,则程序转向由偏移量确定的目的地址处去执行;若条件不满足,程序将不会转移,而是按原顺序执行。
相对偏移量为一个带符号的8位数,偏移范围为-128~十127,共256个字节。
共有三种:
◇累加器A判零转移指令(JZ、JNZ)。
该指令对累加器A的内容为零和不为零进行检测并转移,不改变累加器A的内容,也不影响任何标志位。
◇减l非零转移指令又称循环转移指令( DJNZ)。
该指令是把源操作数减1,结果送回到源操作数中去;并判断结果是否为O,若不为O则转移到目标地址,继续执行循环程序;若为0则终止循环程序的执行。
◇比较转移指令(CJNE)。
该指令对指定的目的字节和源字节进行比较,若它们的值不相等,则转移。
把具有一定功能的公用程序段作为子程序,在主程序中采用调用指令( LCALL、 ACALL)调用子程序,子程序的最后一条指令为返回主程序指令(RET)。
长调用指令( LCALL)的执行过程是先将(PC)+3→PC,指向下一指令地址;再将把下一指令的16位地址(断点)压入堆栈,先压人PC0~7低位地址,后压入PC8~15高位地址,(SP)十2→SP;最后将指令中给出的16位目标地址addr16送入程序计数器PC。
从而使程序转向目标地址addr16去执行被调用的子程序。
子程序返回指令(RET)的作用是将栈顶的断点地址送PC,于是,子程序返回主程序继续执行。
三、实验内容
根据控制转移类指令的不同用途,分别编写二个小程序,以完成程序在不同条件下的转移、调用。
1.参考程序1——累加器A判零转移指令和无条件转移指令
(1)将立即数#01H传送至A中。
(2)判断A中的内容,若(A)=OOH,则顺序执行MOV A,#02H指令;若(A)≠ OOH,则转移执行DEC A指令;循环往复执行相关指令。
2.参考程序2——减1非零转移指令、调用指令和返回指令
(1)将片内RAM20H~22H单元全部送入立即数#11H。
(2)调用子程序将立即数#55H传送至片内RAM22H单元中。
(3)返回主程序将立即数#55H分别传送至片内RAM20H、21H单元中。
四、买验参考程序
参考程序l:累加器A判零转移指令和无条件转移指令
参考程序2:减1非零转移指令、调用指令和返回指令
五、实验步骤
1.用实验系统完成实验的步骤
(1)输入源程序。
按第1.2.2节单片机实验系统的使用方法进行操作。
(2)单步运行程序。
即每按一次单步运行键,只执行一条指令。
(3)每执行一条指令后,根据参考程序检查数据栏要求检查每条指令的执行结果,以加深对控制转移指令的理解。
2.用Keil软件完成实验的步骤
(1)建立工程文件,选择单片机。
工程文件名为“jump”,选择单片机型号为Atmel的89C51。
(2)建立源文件,加载源文件。
源文件名为“jump. ASM”。
(3)设置工程的配置参数。
“目标”标签页的晶振频率栏设为12MHz,“输出”标签页的生成HEX文件选择框选中。
(4)进行编译和连接。
(5)进入调试模式,打开存储器窗口。
存储器#1窗口显示以地址OOH开始的片内j
RAM各个存储单元。
(6)单步运行程序。
单击“调试”一“单步”或调试工具栏的单步按按钮,通过存储器窗口和工程窗口的寄存器标签页观察每条指令执行后数据处理的结果,以加深对控制转移指令的理解。
程序调试窗口如图2-6所示。
3.用Proteus软件完成实验的步骤
(1)新建设计文件、设置图纸尺寸、设置网格、保存设计文件。
文件名为“jump”。
(2)选取元器件。
从Proteus元器件库中选取元器件AT89C51(单片机)。
(3)放置元器件、编辑元器件、放置终端、连线。
按图2-8所示放置元器件并连线。
(4)添加源程序、编辑源程序、编译源程序。
源文件名为“jump. ASM”。
(5)加载目标代码文件。
“Clock Frequency”栏中的频率要设为12MHz。
(6)仿真。
单击仿真工具栏“单步运行”按钮》,进入单步运行状态。
分别打开工作寄存器窗口、特殊功能寄存器窗口、片内数据存储器窗口和源代码调试窗口。
单击源代码调试窗口“单步执行”按按钮一次,执行一条指令,通过各调试窗口观察每条指令执行后数据处理的结果,以加深对控制转移指令的理解。
程序调试窗口如图2-8所示。
六、实验分析
1.分析参考程序1中实现无限循环的原因。
2.分析两个参考程序中的累加器A判零转移指令和减1非零转移指令的偏移量的区别。
七、实验思考
1、若将参考程序1中的指令JNZ L2改为CJNE A,#OOH,L2,参考程序1的执行结果如何?
2、若将参考程序2中的指令LCALL L1改为ACCALL L1,该指令的机器码如何翻译?。