实验一 单片机数据区传送程序设计

合集下载

单片机实验一片内外清零、数据块的传送

单片机实验一片内外清零、数据块的传送

单片机实验报告专业:电子信息工程班级:姓名:学号:指导教师:单片机实验报告实验项目名称:片内外清零、置位和数据块传送程序实验日期: 2010-10-27 实验成绩:实验评定标准:1)实验内容否完整A()B()C()2)实验结果分析是否正确A()B()C()3)实验报告是否按照规定格式A()B()C()一、实验目的1、掌握汇编语言中对芯片内外存储器的清零,置位。

2、掌握8031 内部RAM 和外部RAM 之间的数据传送方法;掌握这两部分RAM 存贮器的特点与应用,掌握各种数据传送方法。

二、实验内容及要求1、将片内从50H开始的连续30个地址内容清零;将片外7000H_79FFH单元内容清零;将片内从20H开始的连续30个地址内容设置为0FEH。

2、试编写将外部的数据存贮区6030~607FH 的内容写入外部RAM 3030~307H 中。

三、实验步骤1、片内外清零、置位打开Keil程序,执行菜单命令“Project”→“New Project ”创建“片内外清零置位”项目,并选择单片机型号为AT89C51。

执行菜单命令“File”→“New ”创建文件,输入源程序,保存为“片内外清零置位.A51”。

在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group ‘Source Group1’”将源程序“片内外清零置位.A51”添加到项目中。

执行菜单命令“Project”→Options for Target ‘Target 1’”,在弹出的对话框中选择“Output”选项卡,选中“Greate HEX File”。

执行菜单命令“Project”→“Build Target 1”,编译源程序。

如果编译成功,则在“Outp ut Window”窗口中显示没有错误,并创建了,“片内外清零置位. HEX”文件。

执行菜单命令“Debug”→“Start/Stop Debug Seesion”,按键F11键,单步运行程序。

数据区传送子程序实验

数据区传送子程序实验

图1 图2 图3 数据区传送子程序1.实验方式:模拟调试2.实验目的:(1) 掌握汇编语言设计方法;学习编辑程序的方法。

(2) 学习在调试环境中查看和设置RAM 、XDATA 、R0-R7的方法。

学习程序调试方法。

3.实验内容:把XDATA(外部扩展RAM)的8000H-807FH 中的内容传送到8080H 开始的空间中去。

R2.R3存放源RAM 区首址,R6.R7存放需传送的字节数,R4.R5存放目的RAM 区首址。

4.实验器材:(1) 已经安装了KEIL Uv2集成调试环境软件的计算机 1 台5.程序框图:6.实验步骤:(1) 编写程序并编译通过。

(2) 进入调试状态,点击工具栏中“”打开Memory窗口,在Memory1“Address”位置上输入“X:8000H”,显示如上图1,把光标移到8000H的单元上,点鼠标右键,在开出的窗口中选择“Modify Memory at X:0X008000”,然后出现如图2的窗口,在这里输入一个数据,如95H。

同样方法,修改8001H-8010H单元内容。

(3) 在Memory2“Address”位置上输入“I:00H”,如上图3,把光标移到02H的单元上,点鼠标右键,在开出的窗口中选择“Modify Memory at I:0X02”,出现“Enter Bytes at I:0X02”窗口,在里边输入数据,如80H。

同样,修改03H单元为00H,04H单元为80H,05H单元为80H,06H单元为00H,06H单元为0FFH。

(4) 单步执行程序:注意Memery1窗口中8080H开始地址上内容变化情况。

(5) 实时执行程序,中断程序执行,此时,请观察8080H-80FFH之间的内容是否与8000H-807FH之间的内容一致。

单片机实验

单片机实验

实验一数据传送指令的使用及编程方法1.片内RAM的数据传送【实验程序】源程序单元内容ORG 0000HLJMP MAINORG 0030HMAIN:MOV R0,#40H R0MOV R1,#41H R1MOV A,R0 AMOV 30H,A 30HMOV 20H,30H 20HMOV A,#30H AMOV @R0,A 40HMOV A,30H AMOV R7, A R7MOV A,@R0 AMOV R7,A R7MOV DPTR,#0A702H DPTRMOV 30H,R7 30HMOV 20H,@R0 20HMOV 21H,#10H 21HMOV @R0,21H 10HMOV @R1,#01H 41HSJMP $END【实验要求】(1)理解源程序中每条数据传送指令的操作含义,将结果填入每个单元的相应“内容”中。

(2)单步运行源程序,逐条检查“内容”是否正确。

2.外部RAM的数据传送。

【实验程序】源程序单元内容ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#1A33H DPTRMOV A,#80H AMOVX @DPTR,A 1A33HMOV A,#00H AMOV P2,#1AH P2MOV R0,#34H R0MOV R1,#35H R1MOVX @R0,A 1A34HMOVX A,@DPTR AMOVX @R1,A 1A35HMOVX A,@R0 AMOVX A,@R1 ASJMP $END【实验要求】(1)理解源程序指令含义,指出各存储单元的内容,写在右边的“内容”中。

(2)单步运行源程序,逐条验证分析结果。

3.片内特殊功能寄存器(SFR)的数据传送【实验程序】源程序ORG 0000HLJMP MAINORG 0030HMAIN:MOV SP,#60H ;设栈指针MOV R0,#30H ;#30H送R0(0区)MOV P1,#0EFH ;#EFH送P1口(直接地址为90H)MOV @R0,P1 ;将P1内容送R0所指单元MOV C,P1. 1 ;将P1口的D1位内容送CMOV P1. 7,C ;将CY的内容送P1. 7PUSH PSW ;保护0区寄存器MOV PSW,#08H ;选择1区寄存器MOV R0,#40H ;#40H送1区寄存器R0(08H)MOV @R0,P1 ;P1口内容送1区R0所指单元POP PSW ;恢复0区寄存器SJMP $END【实验要求】(1)理解源程序指令含义,并参照注释写出结果。

实验一.数据传送实验

实验一.数据传送实验

实验一数据传送实验一、实验目的1、熟悉keilc的使用方法,掌握项目的创建、程序的输入,运行和调试方法。

2、掌握8031内部RAM和外部RAM的数据传送操作,了解这两部分RAM 存贮器的特点和应用。

二、实验原理MCS—51单片机具有极丰富的数据传送指令,能够实现多种数据传送操作,给程序设计带来了极大方便。

1、内部RAM数据传送8031内部RAM低128字节(00H~7FH)包含四个工作寄存器区(00H~1FH)、位地址空间(20H~2FH)、堆栈区,可用的传送指令多达16条。

因此,数据在内部128字节里传送就显得灵活方便。

内部RAM0~31个单元可作通用工作寄存器RO~R7,被划分为四个寄存器块,由程序状态字PSW中的RSI、RSO选择,其对应关系是:RSI RSO0 0 选0区,OOH~O7H被看是RO~R70 1 选1区,08H~0FH被看是RO~R71 0 选2区,00H~17H被看是RO~R71 1 选3区,18H~1FH被看是RO~R7MCS—51单片机上电复位后自动选0区,此后可通过修改PSW中的RSW中的RSI和RSO来选择其它寄存器区。

数据在内部RAM低128字节内传送指令共16条,它们是:MOV A,RnMOV A,directMOV A,@RiMOV A,”dataMOV Rn,AMOV Rn,directMOV Rn,dataMOV direct, AMOV direct,RnMOV direct1,direct2MOV direct,@RiMOV direct,#dataMOV Ri,AMOV Ri,directMOV Ri,#data2、外部RAM的数据传输MCS-51单片机采用当前工作寄存器的R0和R1作间接寻址寄存器。

可寻址256个单元,8位的地址和数据均由P0口分时输入/输出。

采用16位数据指针DPTR间址,最多可寻址片外64K字节的RAM或I/O,低8位地址(DPL)由P0口进行分时使用,P2口输出高8位地址,当P2口输出高8位地址时,P2口专用寄存器保存其原内容不变。

单片机及其接口技术实验报告

单片机及其接口技术实验报告

单片机及接口技术实验报告实验一数据传送程序一、实验目的1、掌握汇编语言设计和调试方法。

2、掌握DVCC实验系统的操作步骤。

二、实验内容1、编程实现,把7000H~70FFH单元的内容清零。

2、编程实现,把源地址为6000H开始的单元内容,传送到目的地址7000H开始的单元中,传送个数为0FFFH个。

三、DVCC实验系统操作说明1、接通DVCC实验系统电源,在DVCC实验箱上应显示闪动的“P”,否则按Reset键。

2、运行DVCC软件。

(程序DVCC598H实验系统DVCC实验系统)3、单击工具栏上“新建”或“打开”按钮,编写源程序。

单击“编译”按钮,使其形成可执行文件。

4、单击工具栏上“联接”按钮,同时按下DVCC实验箱上PCDBG键(键盘上最右边第2个),实现PC机和实验箱的联接。

联机成功,屏幕上出现:.反汇编窗口、寄存器标示位窗口。

5、在成功联机后,单击工具栏上“调试”按钮,把最终目标文件装载到实验系统RAM区;或者通过单击菜单栏中的“动态调试”,选择“传送(.EXE)文件”来实现。

6、单击工具栏上“运行”或“单步”按钮,运行实验程序。

7、单击工具栏上“窗口”,选择“显示内部数据窗口”或“显示外部数据窗口”可显示数据窗口。

鼠标右击数据窗口的数据,可设置数据块新地址;鼠标左键单击数据,可修改数据数值。

8、运行完毕,先按实验箱上的复位按钮Reset键,再按PCDBG键,并且点击屏幕上OK,即可退出运行状态。

四、实验程序代码1、把7000H~70FFH单元的内容清零。

程序代码:ORG 0000HAJMP STARTORG 70HSTART: MOV P2, #70H ;送地址高8位到P2端口MOV R0, #00H ;R0=00H,表地址低8位CLR A ;将累加器A清0LOOP: MOVX @R0, A ;将A送入以R0内容为地址的外部RAM.INC R0 ;R0+1-->R0CJNE R0,#00H,LOOP;比较条件转移指令,若R0不等于0,则跳转到LOOPAJMP $ ;暂停END2、编程实现,将源地址为6000H开始的单元,传送到目的地址7000H开始的单元,传送个数为0FFFH个。

MCS-51单片机实验4-3数据区传送

MCS-51单片机实验4-3数据区传送
LSOJMOPP $ END
如此反复,第一次将20H内容 送A至CC30H,R000FF,FEDHHR1R各0 加1,222变012HHH 成第R2二11次H,将312H331,012HHH内R7容减R送71,至变31100成HF0E,1HHH5, R200,H R1各0加FFH1,变30成H 0FFH 2将222H12H,H32内H容,R0F送7E变H至成3213H14H,, R第0,三0FR次E1H 各2加2H1,变0成FD2H3H,3323HH ,R7变 成…1..3….
第21FH6次,将0F20HFH内3容FH送至3FH,
R0,R1变成30,40, R7=0H,
执行判断后,结束。
实验三、数据区传送子程序
【思考题1】
修改程序,把片内RAM的20H起始的10连续单元的数 据传送到30H地址开始的空间。
答:修改判断次数,将MOV R7,#16修改为 MOV R7,#10即可
实验三、数据区传送子程序
【实验目的】
掌握循环指令的使用 掌握间接寻址的用途
【接线方式】
本实验无需连接仿真机,点击“取消”进入仿真软件 界面即可。
实验三、数据区传送子程序
【实验内容及要求】
编写程序,实现以下功能 将片内RAM的20H起始的16个连续单元的数据传 送到30H地址开始的空间。
【实验流程图】
【思考题2】
编写程序,绘制流程图,把片内RAM的20H起始的20 个连续单元的数据传送到2000H地址开始的外部数据空 间。
答:修改指令,R1赋初值00H,并将P2赋值20H,则片 外首地址为2000H 将MOV @R1,A 修改为 MOVX @R1,A 即可 也可用DPTR做地址指针,程序如下
ORG 0M0O00VHR0,#20H MOV DPTR,#2000H LOOP: MMOOVV R7,#20 A,@R0MOVX INC R@0DPTR ,A INC DPTR DJNZ R7, LOOP END

实验一 数据传送

实验一 数据传送

数据传送实验验证性实验2012年10月31日第三四节课一、实验目的1、掌握单片机的汇编指令系统及汇编语言程序设计方法。

2、掌握单片机的存储器体系结构。

3、熟悉Keil软件的功能和使用方法。

4、掌握单片机应用程序的调试方法。

二、设计要求1、编写程序将00H~0FH 16个数据送到单片机内部RAM 30H~3FH单元中。

2、编写程序将片内RAM 30H~3FH的内容传送至片内RAM 40~4FH单元中。

3、编写程序将片内RAM 40H~4FH单元中的内容传送到外部RAM 4800H~480FH单元中。

4、编程将片外4800H~480FH单元内容送到外部RAM 5800H~580FH单元中。

5、编写程序将片外RAM 5800H~580FH单元内容传送回片内RAM 50H~5FH 单元中。

三、实验程序流程框图四、程序清单ORG 0000HMOV R0, #30H ;初始化数据指针MOV A, #00HMOV R2, #10H ;设置循环次数LOOP1: MOV @R0, A ;循环体部分INC R0 ;修改数据指针INC ADJNZ R2, LOOP1 ;循环控制部分MOV R0, #30H ;初始化数据指针 MOV R1, #40HMOV R2, #10HLOOP2: MOV A, @R0 ;循环体部分 MOV @R1, AINC R0 ;修改数据指针 INC R1DJNZ R2, LOOP2 ;循环控制部分MOV R1, #40H ;设置数据指针R0单元内容MOV DPTR, #4800H ;外部RAM4800H单元地址作为16位立即数送数据指针DPTRMOV R2, #10H ;设置循环次数LOOP3: MOV A, @R1 ;循环体部分MOVX @DPTR, AINC R1 ;修改数据指针INC DPTRDJNZ R2, LOOP3 ;循环控制部分MOV R0, #00H ;初始化数据指针MOV R1, #48HMOV R2, #58HLOOP4: MOV DPL, R0 ;设置数据指针的低八位内容MOV DPH, R1 ;设置数据指针的高八位内容MOVX A, @DPTR ;将外部RAM内容送累加器AMOV DPH, R2 ;重新设置数据指针高八位内容MOVX @DPTR, A ;将累加器A的内容送回外部RAM INC R0 ;修改数据指针CJNE R0, #10H, LOOP4 ;循环控制部分MOV R0, #50H ;初始化数据指针MOV DPTR, #5800HMOV R2, #10HCLR A ;累加器A清零LOOP5: MOVX A, @DPTR ;循环体部分MOV @R0, AINC R0 ;修改数据指针INC DPTRDJNZ R2, LOOP5 ;循环控制部分END五、程序数据六、实验总结通过本次试验,我掌握了单片机的汇编指令系统及汇编语言程序设计方法,掌握了单片机的存储器体系结构,同时熟悉了KEIL的功能和使用方法,掌握了单片机应用程序的调试方法,为以后的编程打下了基础,更加深了自己对51单片机结构的理解。

单片机 数据块传送 软件实验1

单片机 数据块传送 软件实验1

实验2:数据块传送程序:1.数据块传送程序 :ORG 0000HMAIN: MOV R0,#40HMOV R2,#10HMOV A,#0A0HA1: MOV @R0, AINC R0INC ADJNZ R2, A1注:此时R2=10h,通过djnz之后,r2=09h≠0,则跳转到A1段开始重复A1段中之前的语句。

R0从40h依次增加至4fh,R2则依次从10h 减少至01h,此时,在运行至djnz之后r0=00h,然后顺序执行语句。

从而完成了给40h~4fh赋值的目的。

MOV R0, #40HMOV DPTR, #9800HMOV R2, #10H注:此处重新给r0 ,dptr,r2.赋初值A2: MOV A, @R0MOVX @DPTR, AINC R0INC DPTRDJNZ R2, A2MOV R0, #50HMOV DPTR, #9800HMOV R2, #10HA2: MOV A, @R0 注:(40h)=a0hMOVX @DPTR, AINC R0INC DPTRDJNZ R2, A2注:此时r2=10h,经过djnz语句之后,r2=0fh≠0h,则语句跳转至A2处,依次执行之后,r2最后变为00h然后顺序执行。

此时,实现数据由片内传至片外的目的MOV R0, #50HMOV DPTR, #9800HMOV R2, #10HA3: MOVX A, @DPTRMOV @R0, AINC DPTRINC R0DJNZ R2, A3注:此时r2=10h,经过djnz语句之后,r2=0fh≠0h,则语句跳转至A3处,依次执行之后,r2最后变为00h然后顺序执行。

此时,实现数据由片内外回传至片内的目的2.多字节十进制加法:注:赋初值(30h)=23h,(20h)=41h,(31h)=27h,(21h)=25h,(32h)=13h,(22h)=50,(23h)=12h,(33h)=24h,(24h)=40h,(34h)=37h ORG 0000HMAIN: MOV R0, #30HMOV R1, #20HMOV 2FH,#04HCLR CDA1: MOV A,@R0ADDC A, @R1 注:此时a=23h,(20h)=41h,经过addc之后,a=64hDA A 进行2进制到十进制调整MOV @R1, AINC R0INC R1DJNZ 2FH, DA1 注:(2fh)=04h,经过djnz指令之后,(2fh)=03h≠0,则程序跳转至da1,直到(2fh)=0h后,顺序执行MOV 7FH, C 从而实现分别将(3ih)与(2ih)(其中i=0~4)的和经过da调整后,存放到2i中SJMP $END一、思考题1.若两个数据块都在外部数据存储器中,如何实现数据块的传送?答:选择R0和DPTR两个指针,用MOVX命令经过A累加器进行数据块传输。

单片机数据传送

单片机数据传送
for(k=0;k<16;k++) {
*p50=*p4800; p50=p50+1; p4800=p4800+1; }}
//B3
四、汇编语言及注释
92: ?C_STARTUP: LJMP STARTUP1
93:
94:
RSEG ?C_C51STARTUP
95:
96: STARTUP1:
97:
98: IF IDATALEN <> 0
0x4F
0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50
P50
0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50 0x50
P4800
0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800 0x004800
C:0x007A BB0106 CJNE
C:0x007D 8982 MOV
C:0x007F 8A83 MOV
C:0x0081 F0
MOVX
C:0x0082 22
RET
C:0x0083 5002 JNC
C:0x0085 F7

单片机实验报告

单片机实验报告

单片机与嵌入式系统实验报告一、软件模拟调试实验:本部分实验内容主要为指令系统和汇编语言程序设计。

采用软件模拟调试的方法,目的在于通过这些实验使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。

实验一数据传送实验实验目的1、熟悉软件模拟调试环境。

2、掌握汇编语言程序设计的方法,加深对指令的理解。

3、学会软件模拟调试和察看、验证结果方法。

4、印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。

实验步骤1、进入调试软件环境,输入源程序;2、汇编源程序;3、用单步方式运行程序;4、检查并记录各寄存器和存储单元内容的变化。

实验内容:将8031内部RAM 40H—4FH单元置初值A0H—AFH,然后将片内RAM 40H—4FH单元中的数据传送到片内RAM 50H—5FH单元。

将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。

源程序清单:ORG 0000HRESET:AJMP MAINORG 003FHMAIN:MOV R0,#40HMOV R2,#10HMOV A,#0A0HA1:MOV @R0,AINC R0INC ADJNZ R2, A1MOV R1,#10HMOV R0, #50HMOV R2, #10HA3: MOV A, @R1MOV @R0, AINC R1INC R2DJNZ R2, A3SJMP $END实验结果与分析:1、按照实验内容补全程序。

2、对源程序进行编译并查看相应程序存储器的内容,将源程序对应的机器码记录入下表,掌握ORG伪指令及汇编的过程。

ORG的作用及相关注意事项:ORG表示之后的语句从哪里开始,有的单片机里面的固定区域是用来做堆栈或者是子程序跳转地址的入口。

PC表示:下一条要执行的指令PSW表示:程序状态字,其各位的含义为:cy进位标志位AC辅助进位标志位Ov溢出标志位p校验位SP表示:堆栈指针R0~R7的物理位置:0000H-0007H3、运行机器码,查看片内数据区、CPU内寄存器的变化情况,按要求将结果记录入下表。

单片机 数据块传送 软件实验1

单片机 数据块传送 软件实验1

单片机数据块传送软件实验1实验目的:实验原理:数据块传送是指将一段连续的数据从一个位置传送到另一个位置的操作。

在单片机中,可以通过中断、DMA、软件等方式实现数据块传送。

本实验中使用软件实现数据块传送。

数据块传送一般需要两个指针,一个指向源地址,一个指向目的地址。

每次传送一个数据,源地址指针和目的地址指针都要加上一个数据的长度,直到传送数据结束。

软件实现数据块传送的步骤如下:1. 定义源地址和目的地址2. 定义数据长度5. 重复步骤4,直到传送数据结束实验器材:STM32单片机开发板实验程序:```c#include "stm32f10x.h"#define SRC_ADDRESS ((uint32_t)0x08000000) // 源地址#define DST_ADDRESS ((uint32_t)0x20002000) // 目的地址#define BLOCK_SIZE 128 // 数据块长度void TransferData(uint32_t srcAddr, uint32_t dstAddr, uint32_t size){uint32_t *srcPtr = (uint32_t *)srcAddr;uint32_t *dstPtr = (uint32_t *)dstAddr;for (int i = 0; i < size; i++){*dstPtr++ = *srcPtr++;}}实验说明:本实验中,定义源地址为0x08000000,目的地址为0x20002000,数据块长度为128字节。

使用指针将源地址和目的地址分别指向所定义的地址,循环传送数据块,每次传送一个数据,源地址和目的地址指针都加上一个数据的长度,直到传送数据结束。

实验结果:将实验程序下载到STM32单片机开发板中,按下复位键,观察LCD屏幕,发现数据块传送成功。

-单片机实验

-单片机实验

实验一数据传送实验实验内容:将8031内部RAM 40H—4FH单元置初值A0H—AFH,然后将片内RAM 40H—4FH单元中的数据传送到片外RAM 9800H—980FH单元,再从片外RAM 9800H—980FH单元中的数据传送到片内RAM 50H—5FH单元。

将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。

源程序清单:ORG 0000HRESET: SJMP MAINORG 003FHMAIN: MOV R1,#40HMOV R2,#10HMOV A, #0A0HA1: MOV @R0,AINC R0INC ADJNZ R2,A1MOV R0, #40HMOV DPTR, #9800HMOV R2, #10HA2: MOV A, @R0MOVX @DPTR, AINC R0INC DPTRDJNZ R2,A2MOV R0, #50HMOV DPTR, #9800HMOV R2, #10HA3: MOVX A, @DPTRMOV @R0, AINC RINC DPTRDJNZ R2, A3LJMP 0000HEND思考题:1. 按照实验内容补全程序。

2. CPU 对8031内部RAM存储器和外部RAM存储器各有哪些寻址方式?内部RAM存储器寻址方式:直接寻址方式寄存器间接寻址基址变址寄存器间接寻址外部RAM存储器寻址方式:寄存器间接寻址基址变址寄存器间接寻址3. 执行程序后下列各单元的内容是什么?内部RAM 40H~4FH _________________________ 内部RAM 50H~5FH__________________________ 外部RAM 9800H~980FH______________________ 截图:实验二多字节十进制加法实验实验内容:多字节十进制加法。

加数首地址由R0 指出,被加数和结果的存储单元首地址由R1指出,字节数由R2 指出。

将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。

实验一_单片机数据区传送排序程序设计

实验一_单片机数据区传送排序程序设计

实验一单片机数据区传送/排序程序设计一、单片机数据区传送/排序程序设计一、实验目的1.进一步掌握汇编语言程序设计和调试方法。

2.了解单片机RAM中的数据操作二、实验说明要求:编写程序把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的地址的RAM区。

三、实验仪器计算机伟福软件(lab2000P )四、实验内容在R0、R1中输入源地址(例如:3000H),R2、R3中输入目的地址(例如4000H),R6、R7中输入字节数(例如:1FFFH)。

查看RAM 区3000~30FFH和4000~40FFH内容,也可自己重新赋值。

运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。

记录下运行结果,检查3000~30FFH中内容是否和4000~40FFH内容完全一致。

五、思考题1、改变源地址,例如00FFH;2、改变目的地址,例如2000H;3、改变传输的个数,小于256个和大于256个的情况。

4、把程序改为对某一数据存储区RAM赋都相同一个数值。

六、源程序及其修改原理org 0000HBlock equ 2000hmov dptr, #Block ; 起始地址mov r0,#12hmov a,#20h ;修改2000h开始的地址所存放的内容为20hLoop:mov r1,#14h ;增加r1计数,用循环方式实现大于256的数据传输(思考题3)Loop1:movx @dptr,ainc dptr ; 指向下一个地址djnz r1,Loop1djnz r0, Loop ; 双循环实现r0,r1计数相乘(以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4)mov r0, #20h ;改变源地址为2000h(思考题1)mov r1, #00hmov r2, #50h;改变目的地址为5000h(思考题2)mov r3, #00hmov r7, #0Loop:mov dph, r0mov dpl, r1movx a, @dptrmov dph, r2mov dpl, r3movx @dptr, acjne r1, #0ffh, Goon1inc r0Goon1:inc r1cjne r3, #0ffh, Goon2inc r2Goon2:inc r3djnz r7, Loopljmp $End七、实验结果及说明1、执行到mov r0, #20h的结果:说明:实现对数据存储区2000h~2168hRAM都赋相同一个数值20h。

单片机实验1

单片机实验1

单片机实验1实验一、MCS51单片机基本开发环境1.实验目的:1) 熟悉软件的集成开发环境2) 掌握单片机软件设计流程3) 掌握单片机存贮器结构及各窗口之间的联系2.实验内容:1) 用三种方法实现将累加器A内容改为20H方法1--MOV A,#20H方法2—MOV R0,#20HMOV A,R0方法3—MOV R0,#20HXCH A,R02) 将58H位单元置为1,观察内部RAM中2BH内容的变化代码:SETB 2BH.0JMP $END这是关于内部存储中对单元和字节了解,不理解很容易做错.比如开始写的指令为MOV R0,#58H;MOV @R0,#1这是错误的指令。

这就需要认真去了解单片机中的字节地址与位地址的关系。

80C51中有位寻址区和字节寻址区。

题目中58H为位地址,2BH为字节地址,且58H为2B字节的最低位。

由于58H属于位寻址区,可用位操作指令SETB进行置位,SETB 2BH.0执行后,2BH中内容变为013) 如果当前状态为有进位、工作寄存器使用区2,请用3种方法设置这种状态代码:ANL PSW,#01HMOV A,PSWCJNE A,#01,LAB2LAB1:JMP LAB1LAB2: SETB PSW.4 MOV P0,#01H MOV R0,#18HCLR PSW.3 MOV C,P0.0 MOV PSW,R0MOV PSW.4,CCPL CMOV PSW.3,CEND以上LAB2写了三段代码,可分别完成题目要求。

不过实验时只是对代码进行了错误调试,没有对结果进行检验。

其中值得注意的是对于布尔(位)操作指令的用法,比如传送指令必须经累加器C,如第二段中MOV P0,#01H ; MOV C,P0.0 ,以及对于位寻址的方式(如需用到“.”隔开)的应用。

4) 编一个小程序将内部RAM中的20H单元的内容送到21H单元并调试(分组完成)代码:5) 用程序将堆栈指针指向60H,然后在堆栈中依次压入01,02,03,04,05五个数,观察哪些单元内容发生了变化,各变为多少?从哪些窗口可以发现这些变化?顺序将堆栈中的五个数放入30H~34H 五个单元中,编程实现之。

数据区传送子程序

数据区传送子程序

开始 原址内容送A 原址内容送 A送目标地址 送目标地址 原址和目标地址 1 N Y
实 验 程 序 框 图
实验步骤
中输入原首址( 在R2(高),R3(低)中输入原首址(0000H); ( ( R4(高),R5(低)中输入目的地址(2000H); ( 中输入目的地址( ( R6(高),R7(低)中输入字节数(1FFFH), ( 中输入字节数( ( 运行程序; 运行程序; 监察0000H– 1FFFH中的内容是否与 中的内容是否与2000H– 监察 中的内容是否与 3FFFH相同。 相同。 相同
ORG 07B0H SE22: MOV DPL , R3 MOV DPH , R2 MOV DPL , R5 MOV DPH , R4 MOVX @DPTR, A INC R2 LO42: INC R3 INC R4 ;源址加 源址加1 源址加 CJNE R5 , #0FFH, LO43 ;目标程序首址 ;目标程序首址 ;传送 ;源程序首址 源程序首址 MOVX A , @DPTR ;取数
CJNE R3 , #0FFH, LO42
LO43: INC R5 目标地址加1 ;目标地址加1 CJNE R7 , #00H, LO44 CJNE R6 , #00H, LO45 LOOP: SJMP LOOP NOP LO44: DEC R7 SJMP SE22 LO45: DEC R7 DEC R6 SJMP SE22 ;未完继续
实验1 实验1
数据区传送子程序
目的: 目的:
掌握RAM中的数据操作; 中的数据操作; 掌握 中的数据操作
内容: 内容:
把R2.R3源RAM区首地址内的R6.R7个 R2.R3源RAM区首地址内的R6.R7个 区首地址内的R6.R7 字节的数据传送到目的RAM RAM区 字节的数据传

实验一内部RAM数据传送程序设计

实验一内部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.存储器和数据存储器的地址空间可以重叠,对此如何解释?七、实验参考程序ORG 0000HCLEAR: MOV R0,#30H ;30H送R0寄存器MOV R6,#50H ;4FH送R6寄存器(计数)CLR1: MOV A,#00H ;00送累加器AMOV @R0,A ;00送到30H-7FH单元INC R0 ;R0加1DJNZ R6,CLR1 ;不到4F个字节再清NOP ;此处设断点观察30H-7FH单元的值MOV R0,#30HMOV R6,#50HLOOP: MOV A,#55HMOV @R0,AINC R0DJNZ R6,LOOPAJMP $ ;此处设断点观察30H-7FH单元的值END图1实验二算术运算程序设计一、实验目的1.学习单片机算术运算、逻辑运算等指令。

实验一 单片机数据区传送程序设计

实验一 单片机数据区传送程序设计

实验一单片机数据区传送程序设计一、实验目的1.进一步掌握汇编语言程序设计和调试方法。

2.了解单片机RAM中的数据操作二、实验说明要求:编写程序把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的地址的RAM区。

三、实验仪器计算机伟福软件(lab2000P )四、实验内容在R0、R1中输入源地址(例如:3000H),R2、R3中输入目的地址(例如4000H),R6、R7中输入字节数(例如:1FFFH)。

查看RAM 区3000~30FFH和4000~40FFH内容,也可自己重新赋值。

运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。

记录下运行结果,检查3000~30FFH中内容是否和4000~40FFH内容完全一致。

五、思考题1、改变源地址,例如00FFH;2、改变目的地址,例如2000H;3、改变传输的个数,小于256个和大于256个的情况。

4、把程序改为对某一数据存储区RAM赋都相同一个数值。

六、源程序及其修改原理org 0000HBlock equ 2000hmov dptr, #Block ; 起始地址mov r0,#12hmov a,#20h ;修改2000h开始的地址所存放的内容为20hLoop:mov r1,#14h ;增加r1计数,用循环方式实现大于256的数据传输(思考题3)Loop1:movx @dptr,ainc dptr ; 指向下一个地址djnz r1,Loop1djnz r0, Loop ; 双循环实现r0,r1计数相乘(以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4)mov r0, #20h ;改变源地址为2000h(思考题1)mov r1, #00hmov r2, #50h;改变目的地址为5000h(思考题2)mov r3, #00hmov r7, #0Loop:mov dph, r0mov dpl, r1movx a, @dptrmov dph, r2mov dpl, r3movx @dptr, acjne r1, #0ffh, Goon1inc r0Goon1:inc r1cjne r3, #0ffh, Goon2inc r2Goon2:inc r3djnz r7, Loopljmp $End七、实验结果及说明1、执行到mov r0, #20h的结果:说明:实现对数据存储区2000h~2168hRAM都赋相同一个数值20h。

单片机数据传送程序流程图

单片机数据传送程序流程图

程序清单ORG 0000HMOV R2, #10H;初始化程序控制变量MOV 30H, #00HMOV R0, #30HMOV A, #00HLOOP1: MOV @R0, AINC R0INC ADJNZ R2, LOOP1;循环是否结束是往下继续,否则循环MOV R2, #10H;初始化循环控制变量MOV R0, #30H;取地址30HMOV 40H, #00HMOV R1, #40H;取地址40HLOOP2: MOV A, @R0MOV @R1, A;数据传送INC R1INC R0DJNZ R2, LOOP2;循环是否结束是往下继续,否则循环MOV R2, #10H;初始化循环控制量MOV R0, #40HMOV DPTR, #4800H;取外部地址4800H指针变量LOOP3: MOV A, @R0MOVX @DPTR, A;数据传送INC R0INC DPTR;修改指针变量DJNZ R2, LOOP3;循环是否结束是往下继续,否则循环MOV R2, #10H;初始化循环控制量MOV R1, #00HMOV DPTR, #4800H;取外部地址4800H给指针变量LOOP4: MOVX A, @DPTRPUSH DPH;指针变量高位压人堆栈PUSH DPL;指针变量低位压人堆栈MOV DPH, #58H;取外部5800H高八位地址送给指针变量高八位MOV DPL, R1;修改指针变量低八位MOVX @DPTR, A;数据传送POP DPL;弹出指针变量低位POP DPH;弹出指针变量高位INC DPTR;修改指针变量INC R1DJNZ R2, LOOP4;循环是否结束是往下继续,否则循环MOV R2, #10H;初始化循环控制量MOV DPTR, #5800H;取外部地址5800H给指针变量MOV R0, #50H;去片内地址50HLOOP5: MOVX A, @DPTRMOV @R0, A;数据传送INC R0;INC DPTR;DJNZ R2, LOOP5;循环是否结束是往下继续,否则循环END1页(1.1)2页(1.2 2.21)3页(2.23 2.24)4页(2.25 2.26)5页(2.31 2.33)6页(2.34 2.35)7页(2.36 4.12)8页4.13。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一单片机数据区传送程序设计
一、实验目的
1.进一步掌握汇编语言程序设计和调试方法。

2.了解单片机RAM中的数据操作
二、实验说明
要求:编写程序把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的地址的RAM区。

三、实验仪器
计算机
伟福软件(lab2000P )
四、实验内容
在R0、R1中输入源地址(例如:3000H),R2、R3中输入目的地址(例如4000H),R6、R7中输入字节数(例如:1FFFH)。

查看RAM 区3000~30FFH和4000~40FFH内容,也可自己重新赋值。

运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。

记录下运行结果,检查3000~30FFH中内容是否和4000~40FFH内容完全一致。

五、思考题
1、改变源地址,例如00FFH;
2、改变目的地址,例如2000H;
3、改变传输的个数,小于256个和大于256个的情况。

4、把程序改为对某一数据存储区RAM赋都相同一个数值。

六、源程序及其修改原理
org 0000H
Block equ 2000h
mov dptr, #Block ; 起始地址
mov r0,#12h
mov a,#20h ;修改2000h开始的地址所存放的内容为20h
Loop:
mov r1,#14h ;增加r1计数,用循环方式实现大于256的数据传输(思
考题3)
Loop1:
movx @dptr,a
inc dptr ; 指向下一个地址
djnz r1,Loop1
djnz r0, Loop ; 双循环实现r0,r1计数相乘
(以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4)
mov r0, #20h ;改变源地址为2000h(思考题1)
mov r1, #00h
mov r2, #50h;改变目的地址为5000h(思考题2)
mov r3, #00h
mov r7, #0
Loop:
mov dph, r0
mov dpl, r1
movx a, @dptr
mov dph, r2
mov dpl, r3
movx @dptr, a
cjne r1, #0ffh, Goon1
inc r0
Goon1:
inc r1
cjne r3, #0ffh, Goon2
inc r2
Goon2:
inc r3
djnz r7, Loop
ljmp $
End
七、实验结果及说明
1、执行到mov r0, #20h的结果:
说明:实现对数据存储区2000h~2168hRAM都赋相同一个数值20h。

2、执行到ljmp $的结果:
说明:5000h 开头的存储区域执行程序之前的内容是FFh,执行程序之后变为20h,与2000h~20ffh 的内容完全相同,说明程序实现了数据区传送。

相关文档
最新文档