单片机软件实验报告.doc
《单片机软件实验报告.doc》由会员分享,可在线阅读,更多相关《单片机软件实验报告.doc(47页珍藏版)》请在冰豆网上搜索。
\
实验一内存操作
1.实验目的
①掌握数据传送指令;
②掌握各种数据传送指令的寻址方式;
③熟练运用keil环境对汇编程序进行调试;
④掌握数据传送、复制等程序的设计与调试方法。
2.预习要求
①理解数据传送指令和循环指令的使用;
②理解如何对内部寄存器、内部RAM、外部XRAM(外部数据存储器)的读写;
③理解各种寻址方式,尤其是较为抽象的变址寻址及相对寻址的方式;
④认真预习本实验内容,自行编写程序,填写实验报告。
3.实验设备
计算机 1台;
4.基础型实验内容:
1.下列程序的功能是给外部XRAM8000H~80FFH的256个单元的内容赋值,赋值的内容取决于程序中A的赋值。
在Keil环境运行该程序,并观察寄存器及内存单元的变化。
ORG0000H
STARTEQU8000H;
MAIN:
MOVDPTR,#START;;起始地址
MOVR0,#0H;;设置256字节计数值
MOVA,#1H;
Loop:
MOVX@DPTR,A;
INCDPTR;;指向下一个地址
DJNZR0,Loop;;计数值减1
NOP;
SJMP$;
END
寄存器A为1H,DPTR递增到8100H,奇偶校验位由于A的内容是1H,所以p也是1.
2.下列程序将外部XRAM3000H起始的256个字节存储块移动到外部XRAM4000H起始的256个字节存储块,在Keil环境运行如下程序,观察寄存器及存储单元的变化。
ORG0000H
MOVDPTR,#3000H
MOVA,#01H
MOVR5,#0H
LOOP:
MOVX@DPTR,A
INCDPTR
DJNZR5,LOOP
MOVR0,#30H
MOVR1,#00H
MOVR2,#40H
MOVR3,#00H
MOVR7,#0H
LOOP1:
MOVDPH,R0
MOVDPL,R1
MOVXA,@DPTR
MOVDPH,R2
MOVDPL,R3
MOVX@DPTR,A
INCR1
INCR3
DJNZR7,LOOP1
SJMP$
END
实现了将3000H开始的256个单元的内容复制到以4000H开头的外部RAM存储单元中。
R0的值为30H;R2的值变为40H;寄存器A中赋值为1H,对栈指针sp初始化为07H,其最大值亦为07H,DPTR中最后递增到40ffH,psw中只有奇偶校验位p是1H
3在Keil环境运行如下程序,观察寄存器及内存单元的变化,将变化结果注释于右侧,并说明程序完成什么功能?
将程序中MOVA,@R0改成MOVX A,@R0,将MOV@R1,A改成MOVX@R1,A,运行如下程序,观察寄存器及相应地址RAM、XRAM地址单元存储内容的变化。
1.
ORG 0000H;程序从000H开始
MOV R0,#30H;
MOV R1,#50H
MOV R2,#20H
L1:
MOVA,@R0
MOV@R1,A
INC R0
INC R1
DJNZ R2,L1
SJMP$
END
R0的值递增到50H,R1的值递增到70H,A中的值是4FH中的值,即FFH(程序运行前自己设定的)
该程序将内部RAM30H开始的连续20H个存储单元中的内容复制到内部RAM50H开始的连续20H个存储单元中。
其中30H到4FH中的值在程序运行前自定义。
2.将程序中MOVA,@R0改成MOVX A,@R0,将MOV@R1,A改成MOVX@R1,A
ORG 0000H
MOV R0,#30H
MOV R1,#50H
MOV R2,#20H
L1:
MOVX A,@R0
MOVX @R1,A
INC R0
INC R1
DJNZ R2,L1
SJMP$
END
寄存器A中的数值没有发生过任何变化,R0和R1同未改变前一样,一直递增到50H和70H
虽然设定了外部RAM30H到4FH中的值,但是并没有复制到50H到6FH存储单元中。
原因是初始化后P口都为#FFH,而使用MOVXA,@Ri要求P2口为#00H,所以只要在程序前加MOVP2,#00H就能实现和原来一样的功能了
5.设计型实验
①在keil环境下,修改内部RAM30H~3FH的内容分别为#00H~#0FH,设计程序实现将内部RAM30H-3FH单元的内容复制到40H-4FH中。
ORG000H;
MOVR2,#10H;
MOVA,#0H;
MOVR1,#30H;
MOVR0,#40H;
LOOP:
MOV@R1,A;
INCR1;
INCA;
DJNZR2,LOOP;
MOVR1,#30H;
MOVR2,#10H;
LOOP2:
MOVA,@R1;
MOV@R0,A;
INCR1;
INCR0;
DJNZR2,LOOP2;
SJMP$;
END
②在keil环境下,修改内部RAM30H~3FH的内容分别为#00H~#0FH,设计程序实现将内部RAM30H~3FH单元的内容复制到片外1030H~103FH中。
ORG000H;
MOVR2,#10H;
MOVA,#0H;
MOVR1,#30H;
MOVDPTR,#1030H;
LOOP:
MOV@R1,A;
INCR1;
INCA;
DJNZR2,LOOP;
MOVR1,#30H;
MOVR2,#10H;
LOOP2:
MOVA,@R1;
MOVX@DPTR,A;
INCR1;
INCDPTR;
DJNZR2,LOOP2;
SJMP$;
END
③设计程序将外部64KB的XRAM高低地址存储内容互换;如0000H与0FFFFH,0001H与0FFFEH,0002H与0FFFDH,…….互换;互换数据个数为256。
ORG000H;
MOVDPTR,#0FFFFH;
MOVR1,DPL;保存当然DPTR低位
loop:
MOVDPL,R1;
MOVXA,@DPTR;
MOVR3,A;保存当前DPTR的内容
MOVR0,DPH;保存当然DPTR高位
MOVA,DPH;
CPLA;求得当前DPTR高位的反码
MOVDPH,A;
MOVA,R1;
CPLA;求得当前DPTR低位的反码
MOVDPL,A;求得当前DPTR反码
MOVXA,@DPTR;
MOVR4,A;保存当前DPTR对称码(反码)的内容
MOVA,R3;
MOVX@DPTR,A;将当前DPTR(原码)的内容存入对称码中
MOVDPH,R0;
MOVDPL,R1;还原DPTR
MOVA,R4;
MOVX@DPTR,A;将对称码的内容存入当前DPTR(原码)
DECR1;
CJNER1,#0FFH,LOOP;
SJMP$;
END
运行前:
运行后:
6.综合型实验
a)设计程序实现将外部XRAM0000H起始的512个字节数据传送到外部XRAM2000H起始的512个存储单元中。
ORG0000H;
MOVR3,#0H;
MOVDPTR,#0000H;
LOOP:
MOVXA,@DPTR;
MOVR0,DPL;
MOVDPH,#20H;
MOVX@DPTR,A;
INCR0;
MOVDPL,R0;
MOVDPH,#0H;
DJNZR3,LOOP;
SJMP$;
END
X:
0H至X:
0FFH的值是自定义的;运行程序后复制到X:
2000H至X:
20FFH;
b)若源块地址和目标块地址有重叠,程序该如何设计(用地址减1方法移动块)?
假设源块地址2000H,目标块地址2050H,移动块长度80H;试设计程序实现该功能。
思路:
先将由源块地址起始的数据块保存到非目标块地址中(防止覆盖目标地址),然后再复制到目标块地址;
ORG0000H;
MOVDPTR,#2000H;
MOVR3,#80H;
LOOP:
MOVXA,@DPTR;
MOVR0,DPH;
MOVR1,DPL;
MOVDPH,#30H;
MOVX@DPTR,A;
MOVDPH,R0;
INCR1;
MOVDPL,R1;
DJNZR3,LOOP;本循环实现将x:
2000H开始的80个单元中的内容复制到x:
3000H开始的80个单元中去
MOVDPTR,#3000H;
MOVR3,#80H;
MOVR4,#50H;
LOOP2:
MOVXA,@DPTR;
MOVR2,A;
MOVR0,DPH;
MOVR1,DPL;
MOVA,R4;
MOVDPH,#20H;
MOVDPL,A;
MOVA,R2;
MOVX@DPTR,A;
INCR4;
MOVDPH,R0;
INCR1;
MOVDPL,R1;
DJNZR3,LOOP2;本循环实现将x:
3000H开始的80个单元中的内容复制到x:
2050H开始的80个单元中去
SJMP$;
END
实验二数制及代码转换
1.实验目的
①了解微机系统中的数制与代码表示方法;
②掌握计算机中使用的各种代码转换方法;
③掌握实现分支、循环的指令及其程序的编写方法;
2.预习要求
①理