将外部RAM 1000H单元的内容传送到内部RAM 30H单元。 将外部RAM 1000H单元的内容传送到R1
(2)比较AJMP、LJMP、 JZ、DJNZ 指令编译后机器码中操作数(跳转地址)的不同
八、实验报告要求
(一)实验报告要用学校统一的纸。
(二)实验内容应包括,实验题目、实验原理、实验目的、步骤简述、试验调试过程中出现的问题、结果和分析以及程序清单并给程序做注释。
(三)每个实验后的思考题必须完成。
(四)对实验中发现的问题应加以讨论,并提出自己的改进意见和要求、希望等。
实验二 汇编语言程序设计(一)
一、实验目的
1. 熟悉Keil C51软件使用。
2. 掌握51汇编程序设计,巩固掌握程序的调试方法。 3. 掌握RAM中的数据操作。
二、实验设备及器件
微型计算机1台 ,KEIL C51 集成开发软件。
三、实验内容
1、读下面的程序,说出程序功能(参考图3.1的算法) 参考程序
ORG 0000H
开始源地址内容送A LJMP MAIN ORG 0100H
MAIN: MOV R2, #10H MOV R3,#00H MOV R4,#20H MOV R5,#00H MOV R7,#20H MOV R6,#00H MAIN1: MOV DPL,R3
MOV DPH,R2 MOVX A,@DPTR MOV DPL,R5 MOV DPH,R4 MOVX @DPTR,A CJNE R3,#0FFH,LO42
A 送目的地址源地址加1目的地址加1字节数到了吗 Y结束N 图3.1 数据区传送流程图
INC R2
CJNE R5,#0FFH,LO43 INC R4
CJNE R7,#00H,LO44 NOP SJMP MAIN1 END
LO42: INC R3
LO43: INC R5 LOOP: SJMP LOOP LO44: DEC R7
2、按下面要求编写程序
①将已知(20H)=12H,(21H)=34H,编程计算(20H)+(21H) →(40h)中。
②设有50个工作单元, 其首址为外部存储器8000H单元, 编程使其工作单元清零。 ③编程将片内RAM的一个字节二进制数转换成 3 位非压缩型BCD码。
④试编写程序,查找在内部RAM的20H~50H单元中出现00H的次数,并将查找的结果存入51H单元。
四、预习要求
(一)熟悉实验软件环境和程序调试方法。
(二)进一步熟悉外部数据存储器的访问方法和堆栈指针的应用。 (三)对照试验内容,编写程序。
五、思考题
(1)试写一条把片内RAM 50H~59H单元清零的程序。
(2) 试写一个把片外RAM从2000H单元开始的16个字节写入片内RAM 50H开始的单元的程序。(3)如果使1000~1010H中内容与2000~2010H内容完全一致,如何编写程序?
六、实验报告要求
(一)实验报告要用学校统一的纸。
(二)实验内容应包括,实验题目、实验原理、实验目的、步骤简述、试验调试过程中出现的问题、结果和分析以及程序清单并给程序做注释。
(三)编写程序完成实验后的思考题。
(四)对实验中发现的问题应加以讨论,并提出自己的改进意见和要求、希望等。
实验三 汇编语言程序设计(二)
一、实验目的
熟悉MCS-51指令系统,掌握汇编语言程序设计方法。
二、预习要求
(一)熟悉实验软件环境和程序调试方法,掌握KEIL用法。 (二)进一步巩固51汇编指令的用法。 (三)掌握分支结构、循环结构程序设计方法。
三、实验内容
编写程序完成下面要求:
1、3 个无符号单字节整数分别存于R1、 R2、 R3 中, 找出其中最大数放于R0 中。 2、从BLOCK单元(片内RAM)开始有一个无符号数数据块, 其长度存于LEN单元,试求出数据块中最大的数并存入MAX单元(BLOCK、LEN、MAX均为自定义的片内RAM单元)。
3、编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单字节无符号数,按从小到大的次序重新排列。
四、参考算法
见图3.2
五、实验参考程序
ORG 0000H ;冒泡排序法参考程序 LJMP MAIN ORG 0100H
MAIN:
MOV R3,#50H
清标志位开始QUE1: MOV A,R3
MOV R0,A MOV R7,#0AH CLR 00H MOV A,@R0 INC R0 MOV R2,A CLR C MOV 22H,@R0 CJNE A,22H,QL3 SETB C MOV A,R2 JC QL1 SETB 00H XCH A,@R0 DEC R0 XCH A,@R0 INC R0 MOV A,@R0 DJNZ R7,QL2
从 R0 取数—>A(R0)+1送R0QL2:
A)<((R0))?标志置位 交换内容长度减1=0 标志位=0 Y结束NNQL3:
图3.2 数据冒泡排序流程图 QL1:
JB 00H,QUE1
END
LOOP: SJMP LOOP
六、思考题
1、编一程序,把50H—5AH中内容按从大到小排列。
七、实验报告要求
(一)报告中记录试验内容1、2的源程序及调试结果;记录试验内容3的调试结果。 (二)编写思考题要求的程序,并要求在课后自己上机调试。
(三)对实验中发现的问题应加以讨论,并提出自己的改进意见和要求、希望等。
实验四 基于Keil C51集成开发环境的仿真与调试 一. 实验目的
熟悉Keil C51 集成开发环境调试功能的使用和DP-51PRO单片机综合仿真实验仪的使用。
二. 实验设备及器件
IBM PC 机 一台
DP-51PRO单片机综合仿真实验仪 一台
三. 实验内容
1、按照本书的第2章的2.5节内容进行Keil C51 集成开发环境的仿真调试练习:首先基于本试验箱的51芯片:PHILIPS的P80/87C52X2建立工程文件,然后按照以下内容建立汇编文件并将源程序文件加入工程文件的Source Group 1,再进行相关设置,编译,最后进行仿真调试或运行。
ORG 8000H ;此为硬件仿真调试程序,使用软件仿真或直接运行,应改为0000H LJMP Main
ORG 8100H ;此为硬件仿真调试程序,使用软件仿真或直接运行,应改为0100H Main:
MOV R7, #0 Loop:
MOV R6, #0 DJNZ R6, $ DJNZ R6, $ DJNZ R6, $
DJNZ R7, Loop ;延时
CPL P1.0 ; P 1 .0 取反 CPL P1.1 ; P 1 .1 取反
CPL P1.2 ; P 1 .2 取反 CPL P1.3 ; P 1 .3 取反 CPL P1.4 ; P 1 .4 取反 CPL P1.5 ; P 1 .5 取反 CPL P1.6 ; P 1 .6 取反 CPL P1.7 ; P 1 .7 取反 SJMP Main END
2、修改上面的程序,将Loop 到DJNZ部分用一个子程序代替。
3、修改实验三实验内容2(从BLOCK单元(片内RAM)开始有一个无符号数数据块, 其长度存于LEN单元,试求出数据块中最大的数并存入MAX单元(BLOCK、LEN、MAX均为自定义的片内RAM单元))的程序,使之在试验箱上调试运行。
四. 实验要求
熟练掌握结合DP-51PRO单片机综合仿真实验仪和Keil C51 集成开发环境进行仿真调试。如果还有时间,可以把本书的第2章的2.6节内容也看一下。
五. 实验步骤
1. 确认40针排线已经将DP-51PRO实验仪上的A1区J76接口和A2区J79接口相连,然后使用排线把A2区的J61接口与D1区的 J52接口相连。如图3.3所示。
图3.3 实验四原理图
2. 对 DP-51PRO 实验仪上电,然后按照本实验指导第二节设置DP-51PRO 仿真器和使用软件 DPFLASH 把 MON51 监控程序下载到DP-51PRO仿真器。
3. 关闭 DPFlash 软件。把DP-51PRO仿真器的工作模式选择开关切换到 RUN处,然后按一下复位键(RST),MON51程序就开始运行了。此时,DP-51PRO仿真器进入调试状态。
4. 用户使用Keil C51 集成开发环境建立工程、编辑与编译“实验内容”所列的程序。 然后按照本实验指导第二节(软件调试环境的设置)设置好,然后再编译一次。
5. 此时用户就可以按照本实验指导第二节所讲述的方法进行仿真调试。如果用户在退出仿真调试模式后想再次进入仿真调试,可以先按一下DP-51PRO仿真器的复位键(RST)。用户可以在仿真调试环境下设置断点,单步,全速运行等。在调试过程中用户可以看见D1区的LED的亮灭是由用户程序来控制的。