单片机软件实验报告.doc
《单片机软件实验报告.doc》由会员分享,可在线阅读,更多相关《单片机软件实验报告.doc(47页珍藏版)》请在三一文库上搜索。
1、实验一 内存操作1. 实验目的 掌握数据传送指令; 掌握各种数据传送指令的寻址方式; 熟练运用keil 环境对汇编程序进行调试; 掌握数据传送、复制等程序的设计与调试方法。2. 预习要求 理解数据传送指令和循环指令的使用; 理解如何对内部寄存器、内部RAM、外部XRAM(外部数据存储器)的读写; 理解各种寻址方式,尤其是较为抽象的变址寻址及相对寻址的方式; 认真预习本实验内容,自行编写程序,填写实验报告。3. 实验设备计算机 1台; 4.基础型实验内容:1. 下列程序的功能是给外部XRAM 8000H80FFH的256个单元的内容赋值,赋值的内容取决于程序中A的赋值。在Keil环境运行该程序,
2、并观察寄存器及内存单元的变化。ORG 0000HSTART EQU 8000H;MAIN: MOV DPTR,#START; ;起始地址 MOV R0,#0H; ;设置256字节计数值 MOV A,#1H;Loop: MOVX DPTR,A; INC DPTR; ;指向下一个地址 DJNZ R0,Loop; ;计数值减1 NOP; SJMP $; END 寄存器A为1H,DPTR递增到8100H,奇偶校验位由于A的内容是1H,所以p也是1.2. 下列程序将外部XRAM 3000H起始的256个字节存储块移动到外部XRAM 4000H起始的256个字节存储块,在Keil环境运行如下程序,观察寄存
3、器及存储单元的变化。ORG 0000H MOV DPTR,#3000HMOV A,#01HMOV R5,#0HLOOP: MOVX DPTR,AINC DPTRDJNZ R5,LOOP MOV R0,#30H MOV R1,#00H MOV R2,#40H MOV R3,#00H MOV R7,#0HLOOP1: MOV DPH,R0 MOV DPL,R1 MOVX A,DPTR MOV DPH,R2 MOV DPL,R3 MOVX DPTR,AINC R1INC R3 DJNZ R7,LOOP1 SJMP $ END实现了将3000H开始的256个单元的内容复制到以4000H开头的外部RAM
4、存储单元中。R0的值为30H;R2的值变为40H;寄存器A中赋值为1H,对栈指针sp初始化为07H,其最大值亦为07H,DPTR中最后递增到40ffH,psw中只有奇偶校验位p是1H3在Keil环境运行如下程序,观察寄存器及内存单元的变化,将变化结果注释于右侧,并说明程序完成什么功能?将程序中MOV A,R0改成MOVXA,R0,将MOV R1,A改成MOVX R1,A,运行如下程序,观察寄存器及相应地址RAM、XRAM地址单元存储内容的变化。1.ORG 0000H;程序从000H开始MOV R0,#30H;MOV R1,#50HMOV R2,#20HL1: MOV A,R0 MOV R1,A
5、 INC R0 INC R1 DJNZ R2,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,AORG 0000HMOV R0,#30HMOV R1,#50HMOV R2,#20HL1: MOVXA,R0 MOVXR1,A INCR0 INC R1 DJNZ R2,L1SJMP
6、 $END寄存器A中的数值没有发生过任何变化,R0和R1同未改变前一样,一直递增到50H和70H虽然设定了外部RAM 30H到4FH中的值,但是并没有复制到50H到6FH存储单元中。原因是初始化后口都为,而使用MOVX A,Ri要求口为,所以只要在程序前加MOV P2,#00H就能实现和原来一样的功能了5.设计型实验 在keil环境下,修改内部RAM 30H 3FH的内容分别为#00H #0FH,设计程序实现将内部RAM 30H-3FH单元的内容复制到40H-4FH中。ORG 000H;MOV R2,#10H;MOV A,#0H;MOV R1,#30H;MOV R0,#40H;LOOP: MO
7、V 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环境下,修改内部RAM 30H 3FH的内容分别为#00H #0FH,设计程序实现将内部RAM 30H3FH单元的内容复制到片外1030H103FH中。ORG 000H;MOV R2,#10H;MOV A,#0H;MOV R1,#30H;MOV DPTR,#1030H;LOOP: MOV R1,A; INC R1; INC A;
8、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 ;保存当前DPTR的内容MOV R0,DP
9、H ;保存当然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,#0FFH,LOOP;SJMP $;END运行前: 运行后
10、 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 $;END X:0H至X:0FFH的值是自定义的;运行程序后复制到X:2000H至X:20FFH;b) 若源块地址和目标块地址有重叠,程序该如何设计(用地址减1方法移动块)?假设源
11、块地址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开始的80个单元中去MOV DPTR,#30
12、00H;MOV R3,#80H;MOV R4,#50H;LOOP2: MOVX A,DPTR; MOV R2,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 EQU 30H ORG 0000H MOV A,#41H;“A”的ASCII码 CLR C SUBB A,#37H ; 转换为十六进制值AMOV RESULT,
14、A LJMP $END 以下程序完成单字节的BCD码到十六进制数转换,,在Keil环境运行程序,观察寄存器及相应地址内存单元内容的变化。RESULT EQU 30H ORG 0000H MOV A,#23H MOV R0,A ANL A,#0F0H SWAP A MOV B,#0AH MUL AB MOV RESULT,A ;转换高位 MOV A,R0 MOV B,#0FHANL A,B;ADD A,RESULT MOV RESULT,A ;转换低位 SJMP $END 以下程序将单字节十六进制数A的值转换为十进制数,存放在30H32H中,完成空白处程序填写,并在Keil环境运行程序,观察寄存
15、器及相应地址内存单元内容的变化。RESULT EQU 30H ORG 0000H MOV A,#7BH MOV B,#100 DIV AB MOV RESULT,A ;除以100得百位数 MOV A,B MOV B,#10 DIV AB MOV RESULT+1,A ;除以10得十位数 MOV RESULT+2,B ;余数为个位数 SJMP $END 5. 设计型实验内容 将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中。ORG 0000H;MOV R2,30H;MOV R3,31H;MOV R0,#40H;MAIN: MOV A,R2; ANL A,#0F
16、0H; SWAP A; ADD A,#90H; DA A; ADDC 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,
17、0FH; ADD A,#90H; DA A; ADDC A,#40H; DA A; MOV R0,A ;将31H中的低位转化成ASCII码 INC R0;SJMP $;END 单字节十六进制数转换为十进制数的程序设计。设单字节十六进制数存放在内部RAM 30H 中,结果要求存放到内部RAM 40H-41H中。本题应该是40H-42H,因为该十六进制数完全有可能超过100RESULT EQU 40H;ORG 0000H;MOV R0,#30H;MOV A,R0;MOV B,#100DIV AB MOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 软件 实验 报告
