单片机软件实验报告_第1页
单片机软件实验报告_第2页
单片机软件实验报告_第3页
单片机软件实验报告_第4页
单片机软件实验报告_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一内存操作1. 实验目的掌握数据传送指令;掌握各种数据传送指令的寻址方式;熟练运用 keil环境对汇编程序进行调试;掌握数据传送、复制等程序的设计与调试方法。2. 预习要求理解数据传送指令和循环指令的使用;理解如何对内部寄存器、内部RAM 、外部 XRAM (外部数据存储器)的读写;理解各种寻址方式,尤其是较为抽象的变址寻址及相对寻址的方式;认真预习本实验内容,自行编写程序,填写实验报告。3. 实验设备计算机1 台;4.基础型实验内容:1. 下列程序的功能是给外部 XRAM 8000H 80FFH 的 256 个单元的内容赋值,赋值的内容取决于程序中 A 的赋值。 在 Keil 环境运行该

2、程序, 并观察寄存器及内存单元的变化。ORG0000HSTARTEQU8000H;MAIN:MOVDPTR,#START;;起始地址MOVR0,#0H;;设置 256 字节计数值MOVA,#1H;Loop:MOVXDPTR,A;INCDPTR;;指向下一个地址DJNZR0,Loop;;计数值减 1NOP;SJMP$;END寄存器 A 为 1H, DPTR 递增到 8100H ,奇偶校验位由于A 的内容是1H,所以 p 也是 1.2. 下列程序将外部XRAM 3000H起始的256 个字节存储块移动到外部XRAM 4000H起始的256 个字节存储块,在 Keil 环境运行如下程序,观察寄存器及

3、存储单元的变化。ORG0000HMOVDPTR,#3000HMOVA,#01HMOVR5,#0HLOOP:MOVXDPTR,AINCDPTRDJNZR5,LOOPMOVR0,#30HMOVR1,#00HMOVR2,#40HMOVR3,#00HMOVR7,#0HLOOP1:MOVDPH,R0MOVDPL,R1MOVXA,DPTRMOVDPH,R2MOVDPL,R3MOVXDPTR,AINCR1INCR3DJNZR7,LOOP1SJMP$END实现了将 3000H 开始的 256 个单元的内容复制到以4000H 开头的外部 RAM 存储单元中。R0 的值为最大值亦为30H;R2 的值变为40H;寄

4、存器 A 中赋值为1H,对栈指针07H ,DPTR 中最后递增到40ffH , psw 中只有奇偶校验位sp 初始化为 07H ,其p 是 1H3 在 Keil 环境运行如下程序,观察寄存器及内存单元的变化,将变化结果注释于右侧,并说明程序完成什么功能?将程序中MOV A,R0改成 MOVX改成 MOVX R1,A,运行如下程序,观察寄存器及相应地址内容的变化。A,R0 ,将 MOVR1,ARAM 、XRAM地址单元存储1.ORG0000H; 程序从 000H 开始MOVR0,#30H;MOVR1,#50HMOVR2,#20HL1:MOVA,R0MOVR1,AINCR0INCR1DJNZR2,

5、L1SJMP$ENDR0 的值递增到 50H, R1 的值递增到 70H ,A 中的值是 4FH 中的值,即 FFH( 程序运行前自己设定的 )该程序将内部 RAM 30H 开始的连续 20H 个存储单元中的内容复制到内部 RAM 50H 开始的连续 20H 个存储单元中。其中 30H 到 4FH 中的值在程序运行前自定义。2.将程序中 MOV A,R0改成 MOVXA,R0 ,将 MOV R1,A改成 MOVX R1,AORG0000HMOVR0,#30HMOVR1,#50HMOVR2,#20HL1:MOVXA,R0MOVXR1,AINCR0INCR1DJNZR2,L1SJMP $END寄存

6、器 A 中的数值没有发生过任何变化,R0 和 R1 同未改变前一样, 一直递增到50H 和 70H虽然设定了外部RAM 30H到 4FH中的值,但是并没有复制到50H到6FH存储单元中。原因是初始化后口都为,而使用MOVX A,Ri要 求 口 为 , 所 以 只 要 在 程 序 前 加MOVP2,#00H就能实现和原来一样的功能了5.设计型实验在keil环境下,修改内部RAM30H 3FH 的内容分别为#00H #0FH,设计程序实现将内部 RAM 30H-3FH单元的内容复制到40H-4FH 中。ORG 000H;MOV R2,#10H;MOV A,#0H;MOV R1,#30H;MOV R

7、0,#40H;LOOP: MOV R1,A;INC R1;INC A;DJNZ R2,LOOP;MOV R1,#30H;MOV R2,#10H;LOOP2:MOV A,R1;MOV R0,A;INC R1;INC R0;DJNZ R2,LOOP2;SJMP $;END在keil环境下,修改内部RAM30H 3FH 的内容分别为#00H #0FH,设计程序实现将内部RAM 30H 3FH单元的内容复制到片外1030H 103FH中。ORG 000H;MOV R2,#10H;MOV A,#0H;MOV R1,#30H;MOV DPTR,#1030H;LOOP: MOV R1,A;INC R1;IN

8、C A;DJNZ R2,LOOP;MOV R1,#30H;MOV R2,#10H;LOOP2:MOV A,R1;MOVX DPTR,A;INC R1;INC DPTR;DJNZ R2,LOOP2;SJMP $;END 设计程序将外部 64KB 的 XRAM 高低地址存储内容互换; 如 0000H 与 0FFFFH ,0001H与 0FFFEH , 0002H 与 0FFFDH, .互换;互换数据个数为256。ORG 000H;MOV DPTR,#0FFFFH;MOV R1,DPL ;保存当然 DPTR 低位 loop:MOV DPL,R1;MOVX A,DPTR;MOV R3,A;保存当前 D

9、PTR 的内容MOV R0,DPH;保存当然 DPTR 高位MOV A,DPH;CPL A;求得当前 DPTR 高位的反码MOV DPH,A;MOV A,R1;CPL A;求得当前 DPTR 低位的反码MOV DPL,A;求得当前 DPTR 反码MOVX A,DPTR;MOV R4,A;保存当前 DPTR 对称码 (反码 )的内容MOV A,R3;MOVX DPTR,A;将当前 DPTR( 原码 )的内容存入对称码中MOV DPH,R0;MOV DPL,R1;还原 DPTRMOV A,R4;MOVX DPTR,A;将对称码的内容存入当前DPTR( 原码 )DEC R1;CJNE R1,#0FF

10、H,LOOP;SJMP $;END运行前:运行后:6. 综合型实验a)设计程序实现将外部XRAM 0000H起始的512 个字节数据传送到外部XRAM 2000H起始的 512 个存储单元中。ORG 0000H;MOV R3,#0H;MOV DPTR,#0000H;LOOP:MOVX A,DPTR;MOV R0,DPL;MOV DPH,#20H;MOVX DPTR,A;INC R0;MOV DPL,R0;MOV DPH,#0H;DJNZ R3,LOOP;SJMP $;ENDX:0H 至 X:0FFH的值是自定义的;运行程序后复制到X:2000H 至 X:20FFH;b)若源块地址和目标块地址有

11、重叠,程序该如何设计(用地址减1 方法移动块)?假设源块地址2000H ,目标块地址2050H ,移动块长度80H ;试设计程序实现该功能。思路:先将由源块地址起始的数据块保存到非目标块地址中(防止覆盖目标地址),然后再复制到目标块地址;ORG 0000H;MOV DPTR,#2000H;MOV R3,#80H;LOOP:MOVX A,DPTR;MOV R0,DPH;MOV R1,DPL;MOV DPH,#30H;MOVX DPTR,A;MOV DPH,R0;INC R1;MOV DPL,R1;DJNZ R3,LOOP; 本循环实现将x:2000H开始的80 个单元中的内容复制到x:3000H

12、开始的 80 个单元中去MOV DPTR,#3000H;MOV R3,#80H;MOV R4,#50H;LOOP2:MOVX A,DPTR;MOVR2,A;MOV R0,DPH;MOV R1,DPL;MOV A,R4;MOV DPH,#20H;MOV DPL,A;MOV A,R2;MOVX DPTR,A;INC R4;MOV DPH,R0;INC R1;MOV DPL,R1;DJNZ R3,LOOP2;本循环实现将x:3000H开始的80 个单元中的内容复制到x:2050H开始的80 个单元中去SJMP $;END实验二数制及代码转换1. 实验目的了解微机系统中的数制与代码表示方法;掌握计算机

13、中使用的各种代码转换方法;掌握实现分支、循环的指令及其程序的编写方法;2. 预习要求理解十进制数、十六进制数的数制表示方法;理解 BCD 码、 ASCII 码编码方式;如何实现十六进制数与BCD 码之间的转换;如何实现 ASCII 码与 BCD 码之间的转换。3. 实验设备计算机1 台。4. 基础型实验内容以下程序完成单字节的ASCII码到十六进制数转换,完成空白处程序填写,并在Keil环境运行程序,观察寄存器及相应地址内存单元内容的变化。RESULT EQU30HORG0000HMOVA,#41H; “ A”的ASCII码CLRCSUBB A,#37H;转换为十六进制值AMOVRESULT,

14、ALJMP $END以下程序完成单字节的 BCD 码到十六进制数转换, ,在 Keil 环境运行程序,观察寄存器及相应地址内存单元内容的变化。RESULT EQU 30HORG0000HMOVA,#23HMOVR0,AANL A,#0F0HSWAP AMOVB, #0AHMULABMOVRESULT,A;转换高位MOVA, R0MOVB, #0FHANLA,B;ADDA,RESULTMOVRESULT,A; 转换低位SJMP $END以下程序将单字节十六进制数A 的值转换为十进制数,存放在30H 32H中,完成空白处程序填写,并在Keil 环境运行程序,观察寄存器及相应地址内存单元内容的变化。

15、RESULT EQU 30HORG0000HMOVA, #7BHMOVB, #100DIVABMOVRESULT,A;除以 100 得百位数MOVA, BMOVB, #10DIVABMOVRESULT+1, A;除以 10 得十位数MOVRESULT+2, B;余数为个位数SJMP $END5. 设计型实验内容将 30H、31H 单元中的十六进制数,转换成ASCII码,存放到40H 开始的 4 个单元中。ORG 0000H;MOV R2,30H;MOV R3,31H;MOV R0,#40H;MAIN:MOV A,R2;ANL A,#0F0H;SWAP A;ADD A,#90H;DA A;ADD

16、C A,#40H;DA A;MOV R0,A;将 31H 中的高位转化成ASCII码INC R0;MOV A,R2;ANL A,#0FH;ADD A,#90H;DA A;ADDC A,#40H;DA A;MOV R0,A;将 30H中的低位转化成ASCII码INC R0;MOV A,R3;ANL A,#0F0H;SWAP A;ADD A,#90H;DA A;ADDC A,#40H;DA A;MOV R0,A;将 30H中的高位转化成ASCII码INC R0;MOV A,R3;ANL A,#0FH;ADD A,#90H;DA A;ADDC A,#40H;DA A;将 31H中的低位转化成码INC

17、 R0;SJMP $;END单字节十六进制数转换为十进制数的程序设计。设单字节十六进制数存放在内部RAM 30H中,结果要求存放到内部RAM 40H-41H中。本题应该是40H-42H, 因为该十六进制数完全有可能超过100RESULT EQU 40H;ORG0000H;MOVR0,#30H;MOVA,R0;MOVB,#100DIVABMOVRESULT ,A; 除以 100得百位数MOVA,BMOVB,#10DIVABMOVRESULT+1H,A; 除以 10得十位数MOVRESULT+2H,B; 余数为个位数SJMP$END单字节压缩BCD 码数转换成十六进制数的程序设计。设压缩BCD 码

18、数存放在内部 RAM30H 中,结果要求存放在内部RAM40H 中。RESULT EQU40H;设置存放地址ORG0000H;MOVR1,#30H;MOVA,R1;ANL A,#0F0H; 取高 4 位SWAP A;MOVB,#0AH;MULAB; 高位乘以 10MOVRESULT,A;转换高位MOVA,R1;MOVB,#0FH; 取低 4 位ANLA,B;ADDA,RESULT;MOVRESULT,A; 转换低位SJMP$;END6. 综合实验多字节十六进制数转换为十进制数的程序设计。设多字节十六进制数存放在内部RAM 30H开始的单元中,要求结果存放在内部RAM 40H开始的单元中。ORG

19、0000H;MOVR1,#40H;存放单元MOVR0,#30H;起始存储单元MOVR2,#9H;设置要转化的单元数,即循环次数LOOP:MOVA,R0;MOVB,#100;DIVAB;MOVR1,A; 除以 100 得百位数INCR1;MOVA,BMOVB,#10;DIVABMOVR1,A; 除以 10 得十位数INCR1;MOVR1,B; 余数为个位INCR1;INCR0;DJNZR2,LOOP;SJMP$;END注:由于内部RAM 30H与内部 RAM 40H之间只有16 个单元,即循环的次数最好不要超过 16 次,否则数据块发生重叠,如果非要进行16 次以上操作,那么可以先将转化好的十进

20、制数存放到其他内存中,最后再统一复制到40H 开始的内存中,此处不再列出程序。多字节压缩BCD 码数转换成十六进制数的程序设计。设压缩BCD 码数存放在内部 RAM30H 开始的单元中,要求结果存放在内部RAM 40H开始的单元中。ORG0000H;MOVR0,#40H;设置存放地址MOVR1,#30H;MOVR2,#9H;LOOP:MOVA,R1;ANL A,#0F0H; 取高 4 位SWAP A;MOVB,#0AH;MULAB; 高位乘以 10MOVR0,A;转换高位MOVA,R1;MOVB,#0FH; 取低 4 位ANLA,B;ADDA,R0;MOVR0,A; 转换低位INCR0;INC

21、R1;DJNZR2,LOOP;SJMP$;END注:由于内部 RAM 30H 与内部 RAM 40H 过 16 次,否则数据块发生重叠,如果非要进行进制数存放到其他内存中,最后再统一复制到之间只有16 个单元,即循环的次数最好不要超16 次以上操作,那么可以先将转化好的十40H 开始的内存中,此处不再列出程序。实验三算术运算1. 实验目的掌握算术运算类、逻辑运算类指令的使用方法;掌握 BCD码、补码数制表示方法;掌握运算程序及循环程序的编写和调试方法。2. 预习要求理解 8051 单片机的算术运算指令;理解补码表示数值的方法;理解压缩、非压缩BCD 码表示数值的方法;如何实现多位数的BCD 码

22、加、乘、除运算;如何实现多位数的BCD 码减法运算;预习本实验内容,以及相关课程内容。3. 实验设备计算机1 台。4. 基础型实验内容以下程序完成单字节的 BCD 码加法功能, 完成空白处程序填写,行程序,观察寄存器及相应地址内存单元内容的变化。并在Keil环境运RESULT EQU30HORG0000HMOVA,#99HMOVB,#99HADDA , BDA A; BCD码相加并得到BCD码结果MOVRESULT,AMOVA,#00HADDC A,#00HMOVRESULT+1, A; 高位处理SJMP $END下列程序完成多字节BCD 码加法运算。内部RAM30H 开始的 4 字节长的BC

23、D码和外部XRAM 1000H开始的 4 字节长的BCD 码相加,结果放在外部XRAM 1100H开始的单元中 (从低字节到高字节) ,在 Keil 环境运行程序,观察寄存器及相应地址内存单元内容的变化。ORG 0000HCLR CMOV R5,#04HMOV R0,#30HMOV R1,#10HMOV R2,#00HMOV R3,#11HMOV R4,#00HL1:MOV DPH,R1MOV DPL,R2MOVX A,DPTRADDC A, R0DAAMOV DPH,R3MOV DPL,R4MOVX DPTR,AINC R2INC R4; 十进制调整INC R0L2:DJNZ R5, L1J

24、NCL3MOVDPTR,#1104H; 有进位则结果的第五个字节置1MOVA,#01HMOVX DPTR,AL3:NOPSJMP $END5. 设计型实验内容设计程序,实现任意字节(设字节数为n)压缩 BCD 码的相加。加数分别存放在外部 RAM 1000H 和内部 RAM 30H 开始的单元中, 结果保存到内部RAM 40H 开始的单元中。因为是任意字节,所以相加的结果不能直接放在内部40H 开始的单元中,因为字节数可能超过 10H个;所以需要设置临时存放和的地址ORG 0000H;CLRC;MOVR5,#04H; 自定义需要参加运算的字节数MOVA,R5;MOVR6,A;保存参加运算的字节

25、数MOVR0,#30H; 存放加数的片内RAM 起始地址 30HMOVR1,#10H;MOVR2,#00H; 存放加数的片外RAM 起始地址 1000HMOVR3,#21H;MOVR4,#00H; 临时保存和的片外 RAM 起始地址 2100HL1:MOVDPH,R1;MOVDPL,R2;MOVX A,DPTR;ADDC A,R0;DAA; 十进制调整MOVDPH,R3;MOVDPL,R4;MOVX DPTR,A;INCR2;INCR4;INCR0;L2:DJNZR5,L1;JNCL3;MOVDPH,R3;MOVDPL,R4; 有进位则结果的下一个字节置1MOVA,#01H;MOVXDPTR,

26、A;L3:NOP;MOV DPH,R3;MOV DPL,R4;MOVX A,DPTR;CJNE A,#01H,L4 ;判断是否做加法后有进位,有则使 R6 加 1 INC R6;MOVR0,#40H; 本语句块实现将临时存放单元中的和复制到内部RAM 中以 40H 起始的存储单元中MOV R1,#00H;MOV R2,#21H;L4:MOV DPH,R2;MOV DPL,R1;MOVX A,DPTR;MOV R0,A;INC R0;INC R1;CJNE R1,#00H,L5;INC R2;R1变成00H之后,R2加1L5:DJNZ R6,L4;SJMPEND$;设计程序,实现多字节(设字节数

27、为n)十六进制无符号数的减法。被减数和减数分别存放在外部 RAM 1000H和内部 RAM 30H 开始的单元中,结果保存到内部RAM40H 开始的单元中。ORG 0000H;MOV R4,#00H; 被减数低位地址MOV R2,#10H; 被减数高位地址MOV R1,#30H; 减数地址MOV R3,#4H; 设置字节数MOV R0,#40H; 设置存放地址LOOP: MOV DPL,R4; 本循环实现字节的逐个相减的过程MOV DPH,R2;MOVX A,DPTR;SUBB A,R1;MOV R0,A;INC R0;INC R4;INC R1;CJNE R4,#0H,L; 如果R4增加到0

28、H ,则高位加1INC R2;L:DJNZ R3,LOOP;SJMP $;END度在在内部 RAM 30H单元开始,存放着一串带符号数据(负数用补码表示),数据长10H 中(设数据长度小于等于16);编程分别求其中正数之和与负数之和,并存入内部RAM的2CH与2EH开始的2 个单元中,记录程序运行结果。例如:内部RAM的30H-35H存放 -1, 5, -2, 19, -8,对应的补码分别为0FFH ,5H , 0FEH , 13H , 0F8H ,则正、负数的和分别为24、 -11,对应的补码分别为18H ,0F5H 。ORG 0000H;MOV R2,#10H;MOV R0,#30H;MO

29、V R3,#00H;MOV R4,#00H;MAIN:MOV A,R0;JB ACC.7,SUBBB;SJMP ADDDD;L:INC R0;DJNZ R2,MAIN;SJMP EXIT;SUBBB:CLR ACC.7;负数做正数处理MOV B,A;MOV A,R3;CLR ACC.7;MOV R3,A;MOV A,B;ADD A,R3;MOV R7,A;JNB CY ,NEXT1;MOV A,#01H;ADD A,R6;MOV R6,A;R6中存放高8 位MOV A,R7;NEXT1:MOV R3,A;R3 中存放低8 位CLR CY;SJMPL;ADDDD:ADD A,R4;JNB CY ,NEXT2;INC R1;R1 中存放高8 位NEXT2:MOV R4,A;R4 中存放低8 位CLR CY;SJMPL;EXIT: MOV 2CH,R1;MOV 2DH,R4;MOV 2EH,R6;MOV 2FH,R3;SJMP $;END6. 综合实验设计程序, 实现十六进制无符号数双字节乘单字节,始的三个单元中,使用单步、断点方式调试程序,查看结果。(调试数据:35A6H*56H )结果存于内部RAM的40H开ORG 0000H;MULMST:MOV R0,#40HMOV A,R3;MOV B,R5;MUL ABMOV R0,AMOV R7,BMOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论