单片机软件实验报告.docx

上传人:rrsccc 文档编号:10412373 上传时间:2021-05-15 格式:DOCX 页数:55 大小:1.68MB
返回 下载 相关 举报
单片机软件实验报告.docx_第1页
第1页 / 共55页
单片机软件实验报告.docx_第2页
第2页 / 共55页
单片机软件实验报告.docx_第3页
第3页 / 共55页
单片机软件实验报告.docx_第4页
第4页 / 共55页
单片机软件实验报告.docx_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《单片机软件实验报告.docx》由会员分享,可在线阅读,更多相关《单片机软件实验报告.docx(55页珍藏版)》请在三一文库上搜索。

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;保存参加运算的字节数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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1