实验一内部RAM数据传送程序设计.docx
《实验一内部RAM数据传送程序设计.docx》由会员分享,可在线阅读,更多相关《实验一内部RAM数据传送程序设计.docx(78页珍藏版)》请在冰豆网上搜索。
实验一内部RAM数据传送程序设计
实验一内部RAM数据传送程序设计
一、实验目的
1.学习MCS-51微控制器汇编语言的编写。
2.了解51微控制器内部RAM的读写及调试方法。
二、实验设备
用wave模拟软件进行实验.
三、实验原理
51微控制器片内RAM低128字节(00H~7FH)包含工作寄存器区(00H~1FH)、位操作区(20H~2FH)和数据区(30~7FH)。
对该128字节的RAM区,均可采用直接寻址和间接寻址方式,若采用间接寻址用R0或R1作间址寄存器。
特殊功能寄存器占用片内RAM地址空间80H~FFH,对它只能采用直接寻址方式。
数据传送指令是汇编语言程序设计的基本要素,数据块传送也是程序设计的基本技巧之
四、实验内容及要求
试编写程序:
先把内部RAM的(30H~7FH)单元清零,然后将30H-7FH单元内55H的值.
五、实验步骤
1.打开计算机,打开wave软件,进入仿真环境,选择软件模拟器,选择仿真器,仿真头选择,选择CPU。
2.打开“实验程序/8051程序/RAM.asm”程序
3.按照程序注释设置断点。
4.点击工具条的运行按钮,程序运行到第一个断点处,打开窗口-data数据观察窗口,进行观察30H-7FH单元的值。
5.然后再点击运行按钮,程序会运行到第二个断点处,此时,观察30H-7FH单元的值变化。
六、实验报告要求
1.整理实验程序程序,理解程序。
2.如果把程序1中(30H~7FH)单元的内容改为66H,如何修改程序。
3.理解数据指针:
数据块传送若在内部RAM中进行,用什么作数据指针?
若在外部RAM或ROM中进行,用什么作数据指针?
4.存储器和数据存储器的地址空间可以重叠,对此如何解释?
七、实验参考程序
ORG0000H
CLEAR:
MOVR0,#30H;30H送R0寄存器
MOVR6,#50H;4FH送R6寄存器(计数)
CLR1:
MOVA,#00H;00送累加器A
MOV@R0,A;00送到30H-7FH单元
INCR0;R0加1
DJNZR6,CLR1;不到4F个字节再清
NOP;此处设断点观察30H-7FH单元的值
MOVR0,#30H
MOVR6,#50H
LOOP:
MOVA,#55H
MOV@R0,A
INCR0
DJNZR6,LOOP
AJMP$;此处设断点观察30H-7FH单元的值
END
图1
实验二算术运算程序设计
一、实验目的
1.学习单片机算术运算、逻辑运算等指令。
2.练习其指令的使用和编程方法。
二、实验设备
使用WAVE仿真器的软件模拟器进行实验。
三、实验原理
微控制器具有较强的加、减、乘、除等数学运算功能,这些运算可直接对8位无符号二进制数进行运算。
利用溢出标志,还可以把加、减法运算用于有符号数的运算;用十进制调整指令,又可使运算直接用十进制(BCD码)来进行。
应用算术运算指令要注意使用条件,要靠灵活运用指令,进行适当的编程才能得到正确结果。
四、实验内容及要求
1.试编写多字节十进制加法程序:
入口参数:
R0—加数首地址;R1—被加数首地址;R2—字节数;出口参数:
R0—和首地址。
2.试编写双字节无符号整数相乘程序:
入口参数:
(R2R3)被乘数;(R6R7)乘数;出口参数:
(R4R5R6R7)乘积。
五、实验步骤
1.打开计算机,进入wave仿真软件环境,建立项目文件,建立汇编源文件;启动编译、连接;进入调试状态。
2.据实验内容要求,在寄存器窗口分别将R0、R1、R2置成20、30、02;在片内数据区(20H~21H),(30H~31H)单元分别置入加数和被加数,用连续或单步的方式运行程序ADD.ASM,检查程序及结果是否正确。
3.实验内容要求,在寄存器窗口分别给R2R3和R6R7设置数据,运行程序“实验程序/8051程序/RAMMUL.ASM”,检查程序及结果是否正确。
六、实验报告要求
1.画出程序框图,整理实验程序。
2.若进行多字节二进制加法,程序1应如何修改?
编写程序,并运行验证。
3.每一实验程序做出3到5组实验数据,验证实验程序及结果是否正确,并记录。
七、实验参考程序
ADD.ASM:
多字节十进制加法程序
ORG0000H
CLRC
LOOP:
MOVA,@R0;取低位加数
ADDCA,@R1;低位相加
DAA;调整
MOV@R0,A;低位和送R0地址
NCR0
INCR1
DJNZR2,LOOP
NOP
END
MUL.ASM:
双字节无符号整数相乘程序
ORG0000H
QKUL:
MOVA,R3
MOVB,R7
MULAB;R3*R7
XCHA,R7;R7=(R3*R7)的低字节
MOVR5,B;R5=(R3*R7)的高字节
MOVB,R2
MULAB;R2*R7
ADDA,R5
MOVR4,A
CLRA
ADDCA,B
MOVR5,A;R5=(R2*R7)的高字节
MOVA,R6
MOVB,R3
MULAB;R3*R6
ADDA,R4
XCHA,R6
XCHA,B
ADDCA,R5
MOVR5,A
MOVPSW.5,C;存CY
MOVA,R2
MULAB;R2*R6
ADDA,R5
MOVR5,A
CLRA
MOVACC.0,C
MOVC,PSW.5;加上一次加法的进位.
ADDCA,B
MOVR4,A
SJMP$
END
实验三数据处理程序设计
一、实验目的
1.学习数据检索的方法和程序设计技巧。
2.学习数据交换及逻辑运算指令的使用。
3.学习数据比较指令的使用,熟悉冒泡法排序编程。
二、实验设备
使用wave软件模拟仿真器
三、实验原理
实际应用当中,多数情况下在进行核心算法之前,要进行数据准备,比如数据检索;按某种规律将一组数据排序;有时还要将一个字节的8位数据打乱,按某种规律重新排序。
当然数据传送也是一种准备,诸多方式的数据准备统称为数据处理。
数据检索:
指在数据区查找关键字的操作。
数据排序:
数据排序的方法很多,本实验以冒泡法为例。
所谓冒泡法是一种相邻数据互换的排序方法,其过程类似水中汽泡上浮。
此方法排序效率较高。
四、实验内容
1.试编写程序:
关键字检索,将实验数据存入50H单元开始的内存区,数据长度存入60H单元,关键字存入61H单元,检索到关键字后,62H单元存入关键字所在的地址;若未检索到,则62H单元内容置0。
2.试编写程序:
拼字程序。
把30H,31H单元的低位内容合并成一个字节,送70H单元。
本程序一般用在读显示缓冲区。
3.试编写程序:
将R5中的单字节8位数据反序排列,原顺序为D7~D0,排序后顺序为D0~D7;结果存入寄存器R6中。
五、实验步骤
1.打开WAVE仿真软件,选择模拟仿真,根据实验内容要求,在窗口/数据窗口/DATA的50H-5EH设置000102030405060708090a0b0e的数据,60H单元置08h,61H单元置05,运行实验程序/8051程序/jiansuo.asm源程序,停止后查看62H单元的值是否为55H,结果是否正确。
2.打开WAVE仿真软件,选择模拟仿真,点击文件/新建文件/在编辑窗口输入程序2的程序,保存为后缀为.asm的文件,然后编译,在窗口/数据窗口/DATA的30h单元置28H,31H单元置置49H值,运行程序后暂停,查看窗口/数据窗口/XDATA的8000H单元的值是否为89H。
3.根据实验内容要求,在窗口/CPU窗口/REG/R5中,将R5赋值,运行程序3,观察窗口/CPU窗口/REG/R6的值是否正确。
六、实验报告要求
1.画出程序框图,整理实验程序。
2.每一实验程序做出3到5组实验数据,验证实验程序及结果是否正确,并记录。
七、实验参考程序
程序1:
关键字检索程序:
ORG0000H
MOVR0,#50H
MOVR1,60H
LOOP:
MOVA,@R0
CJNEA,61H,LOOP1
MOV62H,R0
SJMPHERE
LOOP1:
INCR0
DJNZR1,LOOP
NEXT:
MOV62H,#00H
HERE:
SJMPHERE
END
程序2:
拼字程序
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
NOP
PZCX:
MOVA,30H;读30H单元内容到A
ANLA,#0FH;屏蔽了A的高位
SWAPA;高低位交换
MOVB,A;暂时存放在B中
MOVA,31H;读31H的内容到A
ANLA,#0FH;屏蔽了A的高位
ORLA,B;A和B进行或操作
MOVDPTR,#8000H
MOVX@DPTR,A;结果送入8000H
WAIT:
SJMPWAIT
END
程序3:
单字节8位数据反序排列
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVR2,#08H
MOVA,R5
MOVR7,A
LOOP:
MOVA,R7
RLCA
MOVR7,A
MOVA,R6
RRCA
MOVR6,A
DJNZR2,LOOP
AJMP$
END
实验四数制转换程序设计
一、实验目的
1.学习ASCII码与十六进制互换算法及程序设计方法。
2.学习十六进制与BCD码互换算法及程序设计方法。
二、实验设备
Wave软件模拟仿真器。
三、实验原理
人们在日常生活中习惯使用十进制,而计算机键盘和显示常采用二进制编码的十进制数(即BCD码)或ASCII码。
因此各种代码之间的转换是回避不了的。
学习程序设计就应该掌握数字之间的转换。
1.十六进制数与ASCII码的转换依据下面对应关系进行:
十六进制数012……9AB……F
ASCII码303132……394142……46
2.单字节16进制数转换成10进制数,依据的算法是:
将16进制数除以100,商作百位数,将余数除以10,商作十位数,余数即个位数。
四、实验内容
1.多位十六进制数转换成ASCII码:
入口参数:
R0十六进制数地址指针;R2字节数;出口参数:
(R1)转换后ASCII码的地址指针。
2.八位二进制数转换成压缩BCD码:
入口参数:
R2存放八位二进制数;出口参数:
寄存器R3R4中存放压缩BCD码。
五、实验步骤
1.根据实验内容,分别在片内数据区和寄存器区赋值,运行程序1,查看程序及结果是否正确。
2.根据实验内容,分别在片内数据区和寄存器区赋值,运行程序2,查看程序及结果是否正确。
六、实验报告要求
1.画出程序框图,编写程序。
2.将程序1中@A+PC变址寻址方式改为@A+DPTR变址方式,修改程序并运行验证。
3.每一实验程序做出3到5组实验数据,验证实验程序及结果是否正确,并记录。
4.比较两种变址寻址方式的编程方法有何差别?
七、实验参考程序
程序1:
多位十六进制数转换成ASCII码
ORG0000H
AJMPSTART
ORG0030H
START:
MOVA,@R0
ANLA,#0FH
MOVDPTR,#TAB
MOVCA,@A+DPTR;查表得低四位ASCII码
MOV@R1,A
INCR1
MOVA,@R0
SWAPA
ANLA,#0FH
MOVDPTR,#TAB
MOVCA,@A+DPTR;查表得高四位ASCII码
MOV@R1,A
INCR0
INCR1
DJNZR2,START;没转换完继续
AJMP$
NOP
TAB:
DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB41H,42H,43H,44H,45H,46H
END
程序2:
八位二进制数转换成BCD码的程序:
ORG0000H
AJMPSTART
ORG0100H
START:
MOVA,R2
MOVB,#100
DIVAB
ANLA,#0FH
MOVR3,A
MOVA,B
MOVB,#10
DIVAB
ANLA,#0FH
SWAPA
MOVR4,A
MOVA,B
ANLA,#0FH
ORLA,R4
MOVR4,A
AJMP$
END
实验五P1口控制实验
一、实验目的
1.学习51微控制器P1口的使用方法。
2.学习软件延时程序的设计方法。
二、实验设备
1.用到的模块有“PMC-2018051模块”、“503LED显示模块”。
2.8P的数据线一根。
三、实验原理
51微控制器的P1口是一个准双向口,作通用的I/O口使用,本实验就是将P1口分别作为输出进行练习。
实验原理参看附图。
四、实验内容
试编写程序:
设P1口做输出,接8个发光二极管,使其从左到右循环点亮,显示出流水灯效果。
五、实验步骤
1.把实验用到的模块:
“PMC-2018051模块”、“503LED显示模块”安装到对应的位置上。
2..把实验模块插放到相应的实验挂箱上,确保无误后,用1根8P排线,将“PMC-2018051模块”的JP1插座和“503LED显示模块”J1上。
3.将WAVE仿真器头插在8051模块的紧锁插座内,通讯线接在计算机上。
4.检查模块及接线无误后,打开屏上电源,控制器单元的开关,打开仿真器电源。
5.打开计算机上的wave软件,运行“实验程序/8051程序/p1test2.asm”源程序。
6.观察上的发光二极管的亮灭变化情况。
六、实验报告要求
1.画出程序框图,编写程序。
2.试回答:
延时时间怎么计算。
七、实验参考程序
ORG0000H
AJMPMAIN
ORG0100H
MAIN:
MOVA,#01h
LOOP:
MOVP1,A
ACALLDELAY
RLA
CJNEA,#00H,LOOP
AJMPMAIN
DELAY:
MOVR3,#5
A4:
MOVR4,#200
A3:
MOVR5,#250
DJNZR5,$
DJNZR4,A3
DJNZR3,A4
RET
END
实验六P1口输入输出实验
一、实验目的
1.学习51微控制器P1口的使用方法。
2.学习软件延时程序的设计方法。
二、实验设备
1.用到的模块有“PMC-2018051模块”、“PMC-2主控制单元”的“开关量输出模块”、“开关量输入模块”。
2.一号导线8根。
三、实验原理
51微控制器的P1口是一个准双向口,作通用的I/O口使用,本实验就是将P1口分别作为输入和输出进行练习。
作输入时,把开关作为输入装置,由P1口读取开关状态。
作输出时,控制LED发光二极管。
四、实验内容
试编写程序:
P1.0~P1.3作输入,读取开关S1~S4状态;P1.4~P1.7作输出,连接LED1~LED4,根据开关S1~S4的状态,分别控制LED1~LED4的亮灭。
五、实验步骤
1.实验用到的模块:
“PMC-2控制器单元”,“PMC-2018051模块”。
2.把实验模块插放到相应的实验挂箱上,确保无误后,用四根一号导线,将8051模块的P1.0、P1.1、P1.2、P1.3分别接在接在开关量输出模块的(在控制器单元上)S1、S2、S3、S4;再用四根1号导线将8051模块的P1.4、P1.5、P1.6、P1.7分别接在开关量输入模块(在控制器单元上)的L1、L2、L3、L4。
3.将WAVE仿真器头插在8051模块的紧锁插座内,通讯线接在计算机上。
4.检查模块及接线无误后,打开屏上电源,控制器单元的开关,打开仿真器电源。
5.打开计算机上的wave软件,运行“实验程序/8051程序/p1test1.asm文件。
6.拨动S1、S2、S3、S4观察L1、L2、L3、L4上的发光二极管的亮灭是否随之变化。
六、实验报告要求
1.画出程序框图,编写程序。
2.试回答:
51微控制器的P1~P3口的位结构有什么不同?
七、实验参考程序
ORG0000H
AJMPMAIN
ORG0100H
MAIN:
MOVP1,#0FFH
MOVA,P1
SWAPA
ANLA,#0F0H
MOVP1,A
ACALLDELAY
AJMPMAIN
DELAY:
MOVR3,#10
A4:
MOVR4,#200
A3:
MOVR5,#250
DJNZR5,$
DJNZR4,A3
DJNZR3,A4
RET
END
实验七8255的输出实验
一、实验目的
1.学习可编程I/O接口芯片8255的性能及硬件设计方法。
2.掌握可编程I/O接口芯片8255的程序设计方法。
3.了解8255扩展接口的三种工作方式。
二、实验说明
1.实验中用到的模块有“PMC-2018051模块”、“204译码模块”“PMC-2主控制器单元”的“8255A模块”和“开关量的输入模块”。
2.一号导线四根。
三、实验原理
8255是一个通用的可编程并行I/O接口芯片,它具有3个8位的并行I/O口,分别称为PA口、PB口和PC口,其中PC口又分为高4位和低4位。
由于8255与微控制器系统总线直接相连,又可以通过编程方便地将各个口设置成输入或输出,所以在微控制器的I/O扩展中,8255通常被人们首选。
对8255的编程也是通过对一些命令字的设定来实现。
在做实验前,应详细阅读8255器件手册,才能有较大收获。
实验原理及接线图见图7-1:
8255的端口地址:
8255控制字地址为8403H
8255A口地址为8400H
8255B口地址为8401H
8255C口地址为8402H
四、实验内容及要求
编写程序:
设定用8255的方式0,PA口输出方式,接4个指示灯,让四个灯循环点亮。
五、实验步骤
1.实验中用到的模块有“PMC-2018051模块”“204译码模块”,将其插到相应的位置上。
2.将切换模块的SW1拨到ON一端,SW2的7、8接ON,1-6接OFF端、WS3全ON、SW4全OFF,将“PMC-2控制器单元”上的“8255A模块”的PA0、PA1、PA2、PA3用一号导线分别接在“开关量的输入模块”的L1、L2、L3、L4上,将“204译码模块”的J1、J2短接2、3,J3短接1、2。
3.将WAVE仿真器头插在8051模块的紧锁插座内,通讯线接在计算机上。
4.检查模块及接线无误后,打开屏上电源,控制器单元的开关,打开仿真器电源。
5.打开计算机上的wave软件,运行“实验程序/8051程序/8255.asm文件”。
6.观察L1、L2、L3、L4上的发光二极管的亮灭是否轮流循环点亮。
六、实验报告要求
1.画出程序框图,整理实验程序。
2.编写程序,设定从PC0~PC3口读入4个开关通断状态,然后由PC4~PC7口输出,发光管指出4个开关的状态。
七、实验参考程序
;*****8255PA口输出测试程序******
COM8255EQU8403H
PA8255EQU8400H
PB8255EQU8401H
PC8255EQU8402H
ORG0000H
AJMPMAIN
ORG0100H
MAIN:
MOVDPTR,#COM8255
MOVA,#80H
MOVX@DPTR,A;送控制字,设置PA口为工作模式00,输出方式
MOVA,#01H
AA:
MOVDPTR,#PA8255
MOVX@DPTR,A;送01到A口,点亮PA.1一个灯
ACALLDELAY
RLA
CJNEA,#00H,AA;依次点亮PA.1、PA.2、PA.3、PA.4上的灯
MOVA,#01H
AJMPAA
;******延时0.5秒子程序******
DELAY:
MOVR3,#5
A4:
MOVR4,#200
A3:
MOVR5,#250
DJNZR5,$
DJNZR4,A3
DJNZR3,A4
RET流程图:
END
实验八8255的输入输出实验
一、实验目的
1.学习可编程I/O接口芯片8255的性能及硬件设计方法。
2.掌握可编程I/O接口芯片8255的程序设计方法。
3.了解8255扩展接口的三种工作方式。
二、实验说明
1.实验中用到的模块有“PMC-2018051模块”、“204译码模块”、“503LED显示模块”、“504开关量模块”。
2.两根8p的数据线。
三、实验原理
8255是一个通用的可编程并行I/O接口芯片,它具有3个8位的并行I/O口,分别称为PA口、PB口和PC口,其中PC口又分为高4位和低4位。
由于8255与微控制器系统总线直接相连,又可以通过编程方便地将各个口设置成输入或输出,所以在微控制器的I/O扩展中,8255通常被人们首选。
对8255的编程也是通过对一些命令字的设定来实现。
在做本实验前,应详细阅读8255器件手册,才能有较大收获。
实验原理图可参看附图。
在实验系统中8255的端口地址:
8255控制字地址为8403H
8255PA口地址为8400H
8255PB口地址为8401H
8255PC口地址为8402H
四、实验内容及要求
编写程序:
设定用8255的方式0,PB口输入方式接8个开关量,PC口输出方式接8个指示灯,让开关控制灯的亮灭。
五、实验步骤
1.实验中用到的模块有“PMC-2018051模块”、“204译码模块”、“503LED显示模块”、“504开关量模块”将其找出并插到相应的位置上。
2.将切换模块的SW1全拨到ON一端,SW2的7、8接ON,1-6接OFF端、SW3全ON、SW4全OFF,用8P的数据线将“PMC-2控制器单元”上的“8255A模块”的J1插座连在“504开关量模块”的J1上,“8255A模块”的J2插座连在“503LED显示模块”的J1上,将“204译码模块”的J1、J2短接2、3,J3短接1、2。
3.将WAVE仿真器头插在8051模块的紧锁插座内,通讯线接在计算机上。
4.检查模块及接线无误后,打开屏上电源,控制器单元的开关,打开仿真器电源。
5.打开计算机上的wave软件,