《嵌入式系统实验报告(共19页).docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验报告(共19页).docx(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验一系统认识实验一、实验目的学习Dais软件的操作,熟悉程序编写的操作步骤及调试方法。二、实验设备PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。三、实验内容编写程序,将80h8Fh共16 个数写入单片机内部RAM 的30h3Fh空间。四、实验步骤1. 运行Dais软件,进入集成开发环境,软件弹出设置通信端口对话框(如图2-1-1),请确保实验装置与PC正确连接,并已打开实验装置电源,使其进入在待命状态。这里选择与实验装置实际相连的通信端口,并单击“确定”。如通信正确则进入Dais软件主界面,否则弹出“通信出错”的信息框(如图2-1-2
2、),请检查后重试。图2-1-1设置通信端口对话框图2-1-2通信错误信息框2. 通信成功后,单击菜单栏“设置”“仿真模式”项打开对话框,选择需要设置型号、程序数据空间。这里我们将型号设置为“MCS-51实验系统”,外部数据区设置为“系统RAM”,用户程序区设置为“片外(EA=0)”,如图2-1-3所示,最后单击“确定”按钮保存设置。图2-1-3设置工作方式对话框3. 工作方式设置完毕后,单击菜单栏“文件”“新建”项或按Ctrl+N组合键(建议单击工具栏“”按钮)来新建一个文件,软件会出现一个空白的文件编辑窗口。4. 在新窗口中输入程序代码(A512_1.ASM):ORG 0000HLJMP M
3、AINORG 0100HMAIN:MOV R1,#30H;片内RAM首地址MOV A,#80H ;写入数据初值MOV R7,#16 ;循环变量LOOP1:MOV R1,A ;写数据到片内RAMINC R1 ;地址增量INC A ;数据+1DJNZ R7,LOOP1;循环变量-1,不为0继续SJMP $;结束END5. 单击菜单栏“文件”“保存”项(建议单击工具栏“”按钮)保存文件。若是新建的文件尚未命名,系统会弹出文件保存对话框(如图2-1-4),提示用户选择文件保存的路径和文件名,再单击“保存”按钮。文件存放的路径注意:由于编译器对路径和文件名的要求,请确保路径和文件名均不含中文和空格,不要
4、将文件存放在“桌面”、“我的文档”等路径,并遵循“8.3”命令规则,即前缀长度不超过8字符、后缀长度不超过3字符。输入新文件名图2-1-4文件保存对话框6. 单击菜单栏“编译”“文件编译、链接、装载”项或按Ctrl+F9组合键(建议单击工具栏“”按钮),对当前文件进行编译和链接,若程序无语法错误,则开始自动装载,装载完毕提示如图2-1-5所示的信息框。图2-1-5编译信息框7. 当编译无误且下载成功后,即进入调试状态,当前PC行高亮突出显示,源程序窗口左侧显示小圆点以标识可执行语句行,如图2-1-6所示。图2-1-6进入调试状态的主界面8. 单击菜单栏“视图”“存储空间”“CPU内部存储区”项
5、打开内存窗口,如图2-1-7。图2-1-7初始时的CPU内部存储区数据显示9. 单击菜单栏“调试”“单步运行”项或按F7快捷键(建议单击工具栏“”按钮),单步运行程序,观察寄存器和内存单元的数据变化;10. 也可单击菜单栏“调试”“连续运行”项或按F9快捷键(建议单击工具栏“”按钮),开始全速运行。11. 在全速运行后,须暂停运行以便在待命状态查看运行结果,暂停可单击菜单栏“调试”“暂停”项或按Esc快捷键(建议单击工具栏“”按钮)。12. 再观察CPU内部存储区单元,验证程序运行结果(如图2-1-8所示)。图2-1-8程序运行后的CPU内部存储区数据显示13. 除了用程序修改内存单元,可以在
6、Dais软件直接修改。用鼠标单击某个内存单元后,按键盘的09或AF,直接写入数据以覆盖该内存单元原有数据。如图2-1-9所示。图2-1-9修改后的内存单元数据显示14. 除了单步或全速运行,还可以使用断点手段来调试程序。单击菜单栏“调试”“复位”项或按Ctrl+F2组合键(建议单击工具栏“”按钮)进行复位,以便重新运行程序。15. 单击源程序编辑窗口左侧的行号即可快速设置断点,断点行为红色高亮显示(如图2-1-10),若要删除该断点只需再次单击断点行的行号即可清除断点。图2-1-10设置断点后的源程序窗口16. 设置断点后,单击菜单栏“调试”“连续运行”项或按F9快捷键(建议单击工具栏“”按钮
7、),使用全速运行方式,待程序运行到断点行时自动停下(如图2-1-11)。图2-1-11全速运行后遇断点暂停的源程序窗口五、操作练习修改程序,将CPU内部存储区30h3Fh单元的16个数据复制到40h4F单元,通过单步、断点等调试手段验证程序功能,查看40h4Fh单元的数据是否传送正确。 ORG 0000HLJMP MAINORG 0100HMAIN: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;循
8、环变量-1,不为0继续SJMP $;结束END六、实验心得通过第一次的上机实验,我初步接触到了Dais软件,并对其有了一定的熟悉,能顺利完成程序的单步运行,连续运行,设置断点,查看存储器等操作,并掌握了该软件程序编写的操作步骤及调试方法,这对我接下来的实验很有帮助。实验二数码转换实验一、实验目的掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解。二、实验设备PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。三、实验内容及步骤1. BCD整数转换为二进制整数将BCD 码整数0255存入片内RAM的20h、21h、22h中,然后转换为二进制整数00hFFh
9、,保存到寄存器R4中。参考程序(A512_2_1.ASM):ORG 0000HLJMP MAINORG 0100HMAIN: MOV R0,#20H ;BCD存放高位地址MOV R7,#3 ;BCD码0255,最多3位CLR AMOV R4,ALP1: MOV A,R4MOV B,#10MUL AB ;乘10ADD A,R0 ;加下一位的值INC R0 ;指向下一单元MOV R4,A ;结果存入R4DJNZ R7,LP1 ;转换未结束则继续SJMP MAIN ;设置断点,观察实验结果R4中的内容END实验步骤:1) 编写程序,经编译、链接无误后装载到实验系统;2) 修改CPU内部存储器20h、
10、21h、22h单元的内容,如:00h,05h,08h;3) 在SJMPMAIN语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看寄存器R4的内容,应为3Ah;5) 重新修改20h、21h、22h单元的内容,再次运行程序,验证程序的正确性。2. 二进制整数转换为十进制整数将16位二进制整数存入R3、R4寄存器中,转换为十进制整数,以组合BCD形式存储在CPU内部RAM的20h、21h、22h单元中。参考程序(A512_2_2.ASM):ORG 0000HLJMP MAINORG 0100HMAIN: MOV R0,#22H ;转换结果低位地址MOV A,R0PUSH ACC ;A累
11、加器压栈MOV R7,#3CLR ALP1: MOV R0,A ;结果存储地址清零DEC R0DJNZ R7,LP1POP ACCMOV R0,AMOV R7,#16LP2: PUSH ACCCLR CMOV A,R4 ;R4中为二进制数的低位RLC AMOV R4,AMOV A,R3 ;R3中为二进制数的高位RLC AMOV R3,AMOV B,#3LP3: MOV A,R0ADDC A,R0 ;执行乘2操作DA A ;十进制调整MOV R0,A ;结果保存DEC R0DJNZ B,LP3POP ACC;A累加器出栈MOV R0,ADJNZ R7,LP2SJMP MAIN ;设置断点观察结果
12、, 可进行下一次转换END实验步骤:1) 编写程序,程序流程图如图2-2-1所示,经编译、链接无误后装载到实验系统;2) 修改R3、R4寄存器,例如分别为A2h、FCh;3) 在SJMPMAIN语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看CPU内部存储器20h的内容,应为:04h、17h、24h;5) 反复修改R3、R4寄存器的值,验证程序的正确性。四、实验心得在这次实验中,我通过运行既定程序后对程序经行了分析,掌握了将BCD整数转换为二进制整数和二进制整数转换为十进制整数的程序设计方法,对数制的转换有了一个更深刻的认识,并自己编程实现了二进制数和BCD整数的转换,受益匪浅
13、。专心-专注-专业实验三运算程序设计实验一、实验目的了解运算类指令以及运算类程序的设计方法。二、实验设备PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。三、实验内容及步骤1. 多字节加法程序多字节十进制加法程序,被加数存放于20h起始的RAM空间,加数存放于28h起始的RAM空间,将两数相加,结果存放于20h起始的RAM空间。参考程序(A512_3_1.ASM):ORG 0000HLJMP MAINORG 0100H ;执行程序前先修改R7的值MAIN: MOV R0,#20H ;被加数起始地址MOV R1,#28H ;加数起始地址CLR CLP1: MOV A,
14、R0ADDC A,R1 ;带进位加法运算DA A ;十进制调整MOV R0,A ;保存运算结果INC R0 ;指向下一单元INC R1DJNZ R7,LP1CLR AMOV ACC.0,CMOV R0,A ;最高位有进位时此地址中为1NOP;设置断点查看运算结果SJMP MAIN ;若需继续运算, 改变加数, 被加数及R7END实验步骤:1) 编写程序,程序流程图如图2-3-1所示,经编译、链接无误后装载到实验系统;2) 为被加数及加数赋值:修改内存单元20h为1234h、28h为1111h,寄存器R7为02h;3) 在SJMPMAIN语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此
15、时查看内存单元20h起始的内容,应为:2345h;5) 反复修改被加数、加数及字节数R7的值,验证程序的正确性。2. 双字节无符号数乘法利用单字节乘法指令来扩展成多字节乘法运算,扩展时以字节为单位进行乘法运算。被乘数在R2、R3中,乘数在R4、R5中,乘积保存R0指向的20h23h内存单元。运算法则见图2-3-2。图2-3-2乘法运算法则参考程序(A512_3_2.ASM):ORG 0000HLJMP MAINORG 0100HMAIN: MOV R0,#23H ;运算结果低位地址MOV A,R0PUSH ACCCLR AMOV R7,#4LP1: MOV R0,A ;运算结果存储单元清零DE
16、C R0DJNZ R7,LP1POP ACCMOV R0,AMOV A,R3MOV B,R5MUL AB ;计算R3*R5MOV R0,A ;计算的低8位保存MOV A,BDEC R0MOV R0,A ;保存运算的高8位MOV A,R2MOV B,R5MUL AB ;计算R2*R5ADD A,R0 ;此次运算低8位+R3*R5运算的高8位MOV R0,ADEC R0MOV A,BADDC A,#00H ;R2*R5的高8位加进位位MOV R0,AINC R0MOV A,R3MOV B,R4MUL AB ;计算R3*R4ADD A,R0MOV R0,AMOV A,BDEC R0ADDC A,R0
17、MOV R0,ADEC R0CLR AADDC A,#00HMOV A,R0MOV A,R2MOV B,R4MUL AB ;计算R2*R4INC R0ADD A,R0MOV R0,AMOV A,BDEC R0ADDC A,R0MOV R0,ANOP ;设置断点查看运算结果SJMP MAIN ;如需进行下一次运算, 可修改R2 R3,R4 R5的值END实验步骤:1) 编写程序,经编译、链接无误后装载到实验系统;2) 设置被乘数R2, R3为03h, 50h、乘数R4, R5为04h, 60h;3) 在SJMPMAIN语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看内存单元20h
18、起始的内容,应为:00h、0Eh、7Eh、00h;5) 反复修改被乘数、乘数的值,验证程序的正确性。3. 双字节除法MCS-51指令系统中仅有单字节除法指令,若要扩展为双字节除法,可以采用“移位相减”的算法来实现。本例程的被除数在R7、R6中,除数在R5、R4中,将商存入R7、R6中,余数存入R3、R2中。程序流程图如图3-3-3所示。参考程序(A512_3_3.ASM):ORG 0000HLJMP MAINORG 0100HMAIN: MOV A,R4;执行程序前为R7R6(被除数),;R5R4(除数)赋值JNZ DDIV0;除数不为0,转DDIV0MOV A,R5JZ ERROR;除数为0
19、,转ERRORDDIV0: MOV R2,#00H;余数寄存器清零MOV R3,#00HMOV R1,#16;循环次数为16DDIV1: CLR C;R3 R2 R7 R6左移1位MOV A,R6RLC AMOV R6,AMOV A,R7RLC AMOV R7,AMOV A,R2RLC AMOV R2,AMOV A,R3RLC AMOV R3,AMOV A,R2 ;部分余数减除数SUBB A,R4 ;低8位相减JC DDIV2 ;不够减, 转DDIV2MOV R0,A ;暂存相减结果MOV A,R3SUBB A,R5 ;高8位相减JC DDIV2 ;不够减, 转DDIV2INC R6 ;够减,
20、 则商为1MOV R3,A ;相减结果送R3 R2中MOV A,R0MOV R2,ADDIV2: DJNZ R1,DDIV1 ;16位未除完则继续CLR F0 ;除数合法标志SJMP MAIN ;设置断点观察结果, 可继续下一轮运算ERROR: SETB F0 ;除数非法标志SJMP MAIN ;设置断点观察结果, 可继续下一轮运算END实验步骤:1) 编写程序,程序流程图如图2-3-3所示,经编译、链接无误后装载到实验系统;2) 设置被除数R7, R6为46h,EEh、除数R5, R4为23h, 67h;3) 在SJMPMAIN语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看
21、寄存器R7, R6(商)与R3, R2(余数),应分别为00h,02h与00h、20h;5) 反复修改被除数、除数的值,验证程序的正确性。四、实验心得在这次实验中,我顺利运行了多字节的加法、双字节无符号乘法和双字节除法程序并得到了预期的结果,通过对程序进行分析,我对多字节数的运算在单片机内实现有了一个更深刻的认识,提高了对程序的分析理解能力。实验四查表程序设计实验一、实验目的学习查表程序的设计方法,熟悉MCS-51指令系统。二、实验设备PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。三、实验内容及步骤1. 采用查表的方法将16进制数转换为ASCII码根据ASCII
22、码表可知,09的ASCII码为30h39h,AF的ASCII码为41h46h,算法为(假定待转换的数存放在R7中):当 R79时,相应的ASCII码为:R730h;当 R79时,相应的ASCII码为:R730h07h。参考程序(A512_4_1.ASM):ORG 0000HLJMP MAINORG 0100HMAIN: MOV DPTR,#ASCII;表格首地址送DPTRMOV A,R7 ;R7中为待转换的数ANL A,#0FH ;取低4位MOVC A,A+DPTR;查表MOV R5,A ;低4位转换结果送R1MOV A,R7ANL A,#0F0H ;取待转换数的高4位SWAP A ;高4位与
23、低4位交换MOVC A,A+DPTR;查表MOV R6,A ;高4位转换结果送R2SJMP MAIN ;设置断点观察结果ASCII: DB ABCDEFEND实验步骤:1) 编写程序,经编译、链接无误后装载到实验系统;2) 设置待转换数据R7为8Ah;3) 在SJMPMAIN语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看寄存器R6, R5的值,R6中为高4位转换结果38h,R5中为低4位转换结果41h;5) 反复修改R7的值,验证程序的正确性。2. 通过查表实现y=x2x为09的十进制数,存放于寄存器R7,以BCD 码的形式保存,结果y以BCD码的形式存放于寄存器R6。参考程
24、序(A512_4_2.ASM):ORG 0000HLJMP MAINORG 0100HMAIN: MOV DPTR,#SQR ;取表格首地址MOV A,R7 ;要计算的值MOVC A,A+DPTR;查表MOV R6,A ;结果保存SJMP MAINSQR: DB 00H,01H,04H,09H,16H ;平方表DB 25H,36H,49H,64H,81HEND实验步骤:1) 编写程序,经编译、链接无误后装载到实验系统;2) 设置R7的值,如R7=09h;3) 在SJMPMAIN语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看寄存器R6的值,应为81h;5) 反复修改R7的值,验
25、证程序的正确性。四、实验心得通过这次实验,我对查表程序的设计方法有了一个更加深刻的理解:查表程序常用于数据的补偿、修正、计算、转换等场合,具有程序简单、执行速度快等特点。同时,通过对查表指令“Movc A,A+DPTR”和“Movc A,A+PC”的运用,我对它们区别也有了体会:指令“MOVC A,A+DPTR”完成把A中的内容作为一个无符号数与DPTR中的内容相加,所得结果为某一程序存储单元的地址,然后把该地址单元中的内容送到累加器A中。指令“MOVC A,A+PC”以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加后所得的数作为某一程序存储单元的地址,然后把该地址单元中的内容送到
26、累加器A中。实验五数据排序实验一、实验目的熟悉MCS-51指令系统,掌握数据排序程序的设计方法。二、实验设备PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。三、实验内容及步骤在单片机片内RAM的30h3Fh写入16个数,编写实验程序,将这16个数按照由小到大的顺序排列。参考程序(A512_5.ASM):ORG 0000HLJMP MAINORG 0100HMAIN: MOV R0,#30H ;数据起始地址MOV R7,#16 ;排序数据个数LP1: MOV A,R7MOV R6,AMOV A,R0MOV R1,AINC R1LP2: MOV A,R0 ;取出一个数
27、据CLR CSUBB A,R1 ;与第二个数进行比较JC LP3 ;R0中的数小于R1中的数则跳转MOV A,R0 ;R0中的数大于R1中的数, 交换数据XCH A,R1MOV R0,ALP3: INC R1DJNZ R6,LP2INC R0DJNZ R7,LP1SJMP $END实验步骤:1) 编写程序,经编译、链接无误后装载到实验系统;2) 待排序的数据存放于片内RAM的30h3Fh单元,可在存储器窗口直接输入;3) 在SJMP $语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看片内RAM的30h3Fh单元数据,应从小到大排列;5) 继续向片内RAM的30h3Fh单元填入数
28、据,重新运行程序,验证程序的正确性。四、实验感想在这次实验中,我顺利完成了实验的验证,实验的程序是通过冒泡法进行数据的排序,实验原理简单,程序也不复杂,程序使用条件转移指令实现了程序的循环,加深了我对条件转移指令的理解。实验六位操作实验一、实验目的掌握位指令的使用,学习位程序的设计方法。二、实验设备PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。三、实验内容及步骤编写实验程序,计算Y = AB,也可表示为Y = AB+AB。MCS-51单片机内部有一个一位微处理器,借用进位标志Cy作为位累加器。位操作指令的操作对象是内部RAM的位寻址区,即字节地址为20h2Fh单
29、元中连续的128位(位地址为00h7Fh),以及特殊功能寄存器中的可位寻址的位。表2-6异或真值表ABY20H00000011121011111003参考程序(A512_6.ASM):QA EQU 00HQB EQU 01HQY EQU 04HORG 0000HLJMP MAINORG 0100HMAIN: MOV C,QAANL C,/QB ;C=QA(QB非)MOV QY,CMOV C,QACPL CANL C,QB ;C=(QA非)QBORL C,QY ;C=QA(QB非)+(QA非)QBMOV QY,CSJMP MAIN ;设置断点, 观察20H的值END实验步骤:1) 编写程序,经编译、链接无误后装载到实验系统;2) 修改片内RAM的20h单元的数据,如01h;3) 在SJMP $语句行设置断点,然后运行程序;4) 程序遇到断点后暂停,此时查看片内RAM的20h单元,应为11h;继续修改片内RAM的20h单元的数据,重新运行程序,验证程序的正确性。四、实验感想这次实验程序比较简单,就是通过位运算实现两个数的异或,但是通过这次实验,我不但对51单片机的位寻址和位操作指令有了一个更深刻的认识,而且对51单片机内的位寻址区域也有了一个更深刻的印象,是一次受益匪浅的实验。
限制150内