嵌入式系统实验报告

发布时间:2018-06-30 21:17:26

实验 系统认识实验

一、实验目的

学习Dais软件的操作,熟悉程序编写的操作步骤调试方法

二、实验设备

PC计算机一台,Dais-52PRO+Dais-PRO163C实验系统一套。

三、实验内容

编写程序,将80h~8Fh16 个数写入单片机内部RAM 30h~3Fh空间。

四、实验步骤

1. 运行Dais软件,进入集成开发环境,软件弹出设置通信端口对话框(如图2-1-1),请确保实验装置与PC正确连接,并已打开实验装置电源,使其进入在待命状态。这里选择与实验装置实际相连的通信端口,并单击“确定”。如通信正确则进入Dais软件主界面,否则弹出“通信出错”的信息框(如2-1-2,请检查后重试。

 

2-1-1 设置通信端口对话框            图2-1-2 通信错误信息框

2. 通信成功后,击菜单栏“设置”→“仿真模式”项打开对话框,选择需要设置型号程序/数据空间这里我们设置为“MCS-51实验系统,外部数据区设置系统RAM”,用户程序区设置“片外EA=0”,如图2-1-3所示,最后单击“确定”按保存设置

2-1-3 设置工作方式对话框

3. 工作方式设置完毕后,击菜单栏“文件”→“新建”项或按Ctrl+N组合键(建议单击工具栏来新建一个文件,软件会出现一个空白的文件编辑窗口

4. 新窗口中输入程序代码(A51\2_1.ASM):

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV R1,#30H ;片内RAM首地址

MOV A,#80H ;写入数据初值

MOV R7,#16 ;循环变量

LOOP1: MOV @R1,A ;写数据到片内RAM

INC R1 ;地址增量

INC A ;数据+1

DJNZ R7,LOOP1 ;循环变量-1,0继续

SJMP $ ;结束

END

5. 击菜单栏“文件”→“保存”项(建议单击工具栏按钮)保存文件。若是新建文件尚未命名系统会弹出文件保存对话框(如2-1-4),提示用户选择文件保存的路径文件名,单击保存”按

word/media/image6.gif

2-1-4 文件保存对话框

6. 击菜单栏“编译”→“文件编译、链接、装载”项或按Ctrl+F9组合键(建议单击具栏按钮)对当前文件进行编译和链接,若程序无语法错误,则开始自动装载,装载完毕提示如图2-1-5所示的信息

2-1-5 编译信息框

7. 当编译无误且下载成功后,即进入调试状态,当前PC行高亮突出显示,源程序窗口左侧显示小以标识可执行语句行如图2-1-6所示。

2-1-6 进入调试状态的主界面

8. 击菜单栏“视图”→“存储空间→“CPU内部存储区”项打开内存窗口如图2-1-7

2-1-7 初始时的CPU内部存储数据显示

9. 击菜单栏“调试”→“单运行项或按F7快捷键(建议单击工具栏按钮),单步运行程序,观察寄存器和内存单元的数据变化

10. 击菜单栏“调试”→“连续运行项或按F9快捷键(建议单击工具栏按钮),开始全速运行

11. 全速运行后,须暂停运行便在待命状态查看运行结果,暂停可单击菜单栏“调试”→“暂停项或按Esc快捷键(建议单击工具栏按钮)

12. 再观察CPU内部存储区单元,验证程序运行结果如图2-1-8所示

2-1-8 程序运行后的CPU内部存储数据显示

13. 程序修改内存单元,可以Dais软件直接修改。用鼠标击某个内存单元键盘的0~9A~F,直接写入数据覆盖内存单元有数据。如图2-1-9所示。

2-1-9 修改后的内存单元数据显示

14. 了单步全速运行,可以使用断点手段来调试程序。击菜单栏“调”→“复位项或按Ctrl+F2组合键(建议单击工具栏按钮)进行复位以便重新运行程序

15. 击源程序编辑窗口左侧的行号即可快速设置断点断点行红色高亮显示如图2-1-10要删除该断点只需再次单击点行的行号除断点

2-1-10 设置断点后的源程序窗口

16. 设置断点后,击菜单栏“调试”→“连续运行项或按F9快捷键(建议单击工具栏按钮),使用全速运行方式,待程序运行行时自动停下(如2-1-11

2-1-11 全速运行后遇断点暂停的源程序窗口

操作练习

修改程序,将CPU内部存储30h~3Fh单元的16个数据复制到40h~4F单元通过步、断点等调试手段验证程序功能,查看40h~4Fh单元的数据否传送正确

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV R1,#30H

MOV R0,#40H ;片内RAM首地址

MOV A,#80H ;写入数据初值

MOV R7,#16 ;循环变量

LOOP1: MOV A,@R1

MOV @R0,A

INC R1

INC R0 ;地址增量

DJNZ R7,LOOP1 ;循环变量-1,不为0继续

SJMP $ ;结束

END

六、实验心得

通过第一次的上机实验,我初步接触到了Dais软件,并对其有了一定的熟悉,能顺利完成程序的单步运行,连续运行,设置断点,查看存储器等操作,并掌握了该软件程序编写的操作步骤调试方法,这对我接下来的实验很有帮助。

实验二 数码转换实验

实验目的

掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解。

二、实验设备

PC计算机一台,Dais-52PRO+Dais-PRO163C实验系统一套。

实验内容步骤

1. BCD整数转换为二进制整数

BCD 码整数0~255存入片内RAM20h21h22h中,然后转换为二进制整数00h~FFh,保存到寄存器R4中。

参考程序(A51\2_2_1.ASM):

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV R0,#20H ;BCD存放高位地址

MOV R7,#3 ;BCD0~255,最多3

CLR A

MOV R4,A

LP1: MOV A,R4

MOV B,#10

MUL AB ;10

ADD A,@R0 ;加下一位的值

INC R0 ;指向下一单元

MOV R4,A ;结果存入R4

DJNZ R7,LP1 ;转换未结束则继续

SJMP MAIN ;设置断点,观察实验结果R4中的内容

END

实验步骤:

1) 编写程序,经编译、链接无误后装载到实验系统;

2) 修改CPU内部存储器20h21h22h单元的内容,如:00h05h08h

3) SJMPMAIN语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看寄存器R4的内容,应为3Ah

5) 重新修改20h21h22h单元的内容,再次运行程序,验证程序的正确性。

2. 二进制整数转换为十进制整数

16位二进制整数存入R3R4寄存器中,转换为十进制整数,以组合BCD形式存储在CPU内部RAM20h21h22h单元中。

参考程序(A51\2_2_2.ASM):

word/media/image19.gif ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV R0,#22H ;转换结果低位地址

MOV A,R0

PUSH ACC ;A累加器压栈

MOV R7,#3

CLR A

LP1: MOV @R0,A ;结果存储地址清零

DEC R0

DJNZ R7,LP1

POP ACC

MOV R0,A

MOV R7,#16

LP2: PUSH ACC

CLR C

MOV A,R4 ;R4中为二进制数的低位

RLC A

MOV R4,A

MOV A,R3 ;R3中为二进制数的高位

RLC A

MOV R3,A

MOV B,#3

LP3: MOV A,@R0

ADDC A,@R0 ;执行乘2操作

DA A ;十进制调整

MOV @R0,A ;结果保存

DEC R0

DJNZ B,LP3

POP ACC ;A累加器出栈

MOV R0,A

DJNZ R7,LP2

SJMP MAIN ;设置断点观察结果, 可进行下一次转换

END

实验步骤:

1) 编写程序,程序流程图如图2-2-1所示,经编译、链接无误后装载到实验系统;

2) 修改R3R4寄存器,例如分别A2hFCh

3) SJMPMAIN语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看CPU内部存储器20h内容,应为:04h17h24h

5) 反复修改R3R4寄存器的值,验证程序的正确性。

四、实验心得

在这次实验中,我通过运行既定程序后对程序经行了分析,掌握了将BCD整数转换为二进制整数和二进制整数转换为十进制整数的程序设计方法,对数制的转换有了一个更深刻的认识,并自己编程实现了二进制数和BCD整数的转换,受益匪浅。

实验三 运算程序设计实验

一、实验目的

了解运算类指令以及运算类程序的设计方法。

二、实验设备

PC计算机一台,Dais-52PRO+Dais-PRO163C实验系统一套。

实验内容及步骤

1. 多字节加法程序

多字节十进制加法程序,被加数存放于20h起始的RAM空间,加数存放于28h起始的RAM空间,将两数相加,结果存放于20h起始的RAM空间。

word/media/image20.gif参考程序(A51\2_3_1.ASM):

ORG 0000H

LJMP MAIN

ORG 0100H ;执行程序前先修改R7的值

MAIN: MOV R0,#20H ;被加数起始地址

MOV R1,#28H ;加数起始地址

CLR C

LP1: MOV A,@R0

ADDC A,@R1 ;带进位加法运算

DA A ;十进制调整

MOV @R0,A ;保存运算结果

INC R0 ;指向下一单元

INC R1

DJNZ R7,LP1

CLR A

MOV ACC.0,C

MOV @R0,A ;最高位有进位时此地址中为1

NOP ;设置断点查看运算结果

SJMP MAIN ;若需继续运算, 改变加数, 被加数及R7

END

实验步骤:

1) 编写程序,程序流程图如图2-3-1所示,经编译、链接无误后装载到实验系统;

2) 为被加数及加数赋值:修改内存单元20h1234h28h1111h,寄存器R702h

3) SJMPMAIN语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看内存单元20h内容,应为:2345h

5) 反复修改被加数、加数及字节数R7的值,验证程序的正确性。

2. 双字节无符号数乘法

利用单字节乘法指令来扩展成多字节乘法运算,扩展时以字节为单位进行乘法运算。被乘数在R2R3中,乘数在R4R5中,乘积保存R0指向20h~23h内存单元。运算法则见图2-3-2

word/media/image21.gif

2-3-2 乘法运算法则

参考程序(A51\2_3_2.ASM):

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV R0,#23H ;运算结果低位地址

MOV A,R0

PUSH ACC

CLR A

MOV R7,#4

LP1: MOV @R0,A ;运算结果存储单元清零

DEC R0

DJNZ R7,LP1

POP ACC

MOV R0,A

MOV A,R3

MOV B,R5

MUL AB ;计算R3*R5

MOV @R0,A ;计算的低8位保存

MOV A,B

DEC R0

MOV @R0,A ;保存运算的高8

MOV A,R2

MOV B,R5

MUL AB ;计算R2*R5

ADD A,@R0 ;此次运算低8+R3*R5运算的高8

MOV @R0,A

DEC R0

MOV A,B

ADDC A,#00H ;R2*R5的高8位加进位位

MOV @R0,A

INC R0

MOV A,R3

MOV B,R4

MUL AB ;计算R3*R4

ADD A,@R0

MOV @R0,A

MOV A,B

DEC R0

ADDC A,@R0

MOV @R0,A

DEC R0

CLR A

ADDC A,#00H

MOV A,@R0

MOV A,R2

MOV B,R4

MUL AB ;计算R2*R4

INC R0

ADD A,@R0

MOV @R0,A

MOV A,B

DEC R0

ADDC A,@R0

MOV @R0,A

NOP ;设置断点查看运算结果

SJMP MAIN ;如需进行下一次运算, 可修改R2 R3,R4 R5的值

END

实验步骤:

1) 编写程序,经编译、链接无误后装载到实验系统;

2) 设置R2, R303h, 50h、乘数R4, R504h, 60h

3) SJMPMAIN语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看内存单元20h内容,应为:00h0Eh7Eh00h

5) 反复修改被数、数的值,验证程序的正确性。

3. 双字节除法

MCS-51指令系统中仅有单字节除法指令,若要扩展为双字节除法,可以采用“移位相减”的算法来实现。本例程的被除数在R7R6中,除数在R5R4中,将商存入R7R6中,余数存入R3R2中。程序流程图如图3-3-3所示。

参考程序(A51\2_3_3.ASM):

ORG 0000H

word/media/image22.gif LJMP MAIN

ORG 0100H

MAIN: MOV A,R4 ;执行程序前为R7R6(被除数),

;R5R4(除数)赋值

JNZ DDIV0 ;除数不为0,DDIV0

MOV A,R5

JZ ERROR ;除数为0,ERROR

DDIV0: MOV R2,#00H ;余数寄存器清零

MOV R3,#00H

MOV R1,#16 ;循环次数为16

DDIV1: CLR C;R3 R2 R7 R6左移1

MOV A,R6

RLC A

MOV R6,A

MOV A,R7

RLC A

MOV R7,A

MOV A,R2

RLC A

MOV R2,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2 ;部分余数减除数

SUBB A,R4 ;8位相减

JC DDIV2 ;不够减, DDIV2

MOV R0,A ;暂存相减结果

MOV A,R3

SUBB A,R5 ;8位相减

JC DDIV2 ;不够减, DDIV2

INC R6 ;够减, 则商为1

MOV R3,A ;相减结果送R3 R2

MOV A,R0

MOV R2,A

DDIV2: DJNZ R1,DDIV1 ;16位未除完则继续

CLR F0 ;除数合法标志

SJMP MAIN ;设置断点观察结果, 可继续下一轮运算

ERROR: SETB F0 ;除数非法标志

SJMP MAIN ;设置断点观察结果, 可继续下一轮运算

END

实验步骤:

1) 编写程序,程序流程图如图2-3-3所示,经编译、链接无误后装载到实验系统;

2) 设置R7, R646h,EEh、除数R5, R423h, 67h

3) SJMPMAIN语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看寄存器R7, R6)与R3, R2(余数分别00h,02h00h20h

5) 反复修改被数、数的值,验证程序的正确性。

四、实验心得

在这次实验中,我顺利运行了多字节的加法、双字节无符号乘法和双字节除法程序并得到了预期的结果通过对程序进行分析,我对多字节数的运算在单片机内实现有了一个更深刻的认识,提高了对程序的分析理解能力。

实验四 查表程序设计实验

一、实验目的

学习查表程序的设计方法熟悉MCS-51指令系统

二、实验设备

PC计算机一台,Dais-52PRO+Dais-PRO163C实验系统一套。

实验内容及步骤

1. 采用查表的方法将16进制数转换为ASCII

根据ASCII码表可知,0~9ASCII码为30h~39hA~FASCII码为41h~46h,算法为(假定待转换的数存放在R7中):

R79时,相应的ASCII码为:R730h

R79时,相应的ASCII码为:R730h07h

参考程序(A51\2_4_1.ASM):

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV DPTR,#ASCII ;表格首地址送DPTR

MOV A,R7 ;R7中为待转换的数

ANL A,#0FH ;取低4

MOVC A,@A+DPTR ;查表

MOV R5,A ;4位转换结果送R1

MOV A,R7

ANL A,#0F0H ;取待转换数的高4

SWAP A ;4位与低4位交换

MOVC A,@A+DPTR ;查表

MOV R6,A ;4位转换结果送R2

SJMP MAIN ;设置断点观察结果

ASCII: DB "0123456789ABCDEF"

END

实验步骤:

1) 编写程序,经编译、链接无误后装载到实验系统;

2) 设置待转换数据R78Ah

3) SJMPMAIN语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看寄存器R6, R5值,R6为高4转换结果38hR5为低4转换结果41h

5) 反复修改R7的值,验证程序的正确性。

2. 通过查表实现y=x2

x0~9的十进制数,存放于寄存器R7,以BCD 码的形式保存,结果yBCD码的形式存放于寄存器R6

参考程序(A51\2_4_2.ASM

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV DPTR,#SQR ;取表格首地址

MOV A,R7 ;要计算的值

MOVC A,@A+DPTR ;查表

MOV R6,A ;结果保存

SJMP MAIN

SQR: DB 00H,01H,04H,09H,16H ;平方表

DB 25H,36H,49H,64H,81H

END

实验步骤:

1) 编写程序,经编译、链接无误后装载到实验系统;

2) 设置R7值,如R7=09h

3) SJMPMAIN语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看寄存器R6值,81h

5) 反复修改R7的值,验证程序的正确性。

四、实验心得

通过这次实验,我对查表程序的设计方法有了一个更加深刻的理解:查表程序常用于数据的补偿、修正、计算、转换等场合,具有程序简单、执行速度快等特点。同时,通过对查表指令“Movc A@A+DPTR”和“Movc A,@A+PC”的运用,我对它们区别也有了体会:指令“MOVC A@A+DPTR”完成把A中的内容作为一个无符号数与DPTR中的内容相加,所得结果为某一程序存储单元的地址,然后把该地址单元中的内容送到累加器A中。指令“MOVC A@A+PC”以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加后所得的数作为某一程序存储单元的地址,然后把该地址单元中的内容送到累加器A中。

实验五 数据排序实验

一、实验目的

熟悉MCS-51指令系统,掌握数据排序程序的设计方法。

二、实验设备

PC计算机一台,Dais-52PRO+Dais-PRO163C实验系统一套。

实验内容及步骤

在单片机片内RAM30h~3Fh写入16个数,编写实验程序,将这16个数按照由小到大的顺序排列。

参考程序(A51\2_5.ASM

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV R0,#30H ;数据起始地址

MOV R7,#16 ;排序数据个数

LP1: MOV A,R7

MOV R6,A

MOV A,R0

MOV R1,A

INC R1

LP2: MOV A,@R0 ;取出一个数据

CLR C

SUBB A,@R1 ;与第二个数进行比较

JC LP3 ;R0中的数小于R1中的数则跳转

MOV A,@R0 ;R0中的数大于R1中的数, 交换数据

XCH A,@R1

MOV @R0,A

LP3: INC R1

DJNZ R6,LP2

INC R0

DJNZ R7,LP1

SJMP $

END

word/media/image23.gif

实验步骤:

1) 编写程序,经编译、链接无误后装载到实验系统;

2) 序的数据存放于RAM30h~3Fh单元,可在存储器窗口直接输入;

3) SJMP $语句行设置断点,然后运行程序;

4) 程序遇到断点后暂停,此时查看片内RAM30h~3Fh单元数据应从小到大排列

5) 继续向片RAM30h~3Fh单元填入数据,重新运行程序,验证程序的正确性。

四、实验感想

在这次实验中,我顺利完成了实验的验证,实验的程序是通过冒泡法进行数据的排序,实验原理简单,程序也不复杂,程序使用条件转移指令实现了程序的循环,加深了我对条件转移指令的理解。

实验六 位操作实验

一、实验目的

掌握位指令的使用,学习位程序的设计方法。

二、实验设备

PC计算机一台,Dais-52PRO+Dais-PRO163C实验系统一套。

嵌入式系统实验报告

相关推荐