实验一 单片机数据区传送程序设计
- 格式:doc
- 大小:113.00 KB
- 文档页数:3
单片机实验报告专业:电子信息工程班级:姓名:学号:指导教师:单片机实验报告实验项目名称:片内外清零、置位和数据块传送程序实验日期: 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个。
数据传送实验验证性实验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单片机结构的理解。
实验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累加器进行数据块传输。
单片机与嵌入式系统实验报告一、软件模拟调试实验:本部分实验内容主要为指令系统和汇编语言程序设计。
采用软件模拟调试的方法,目的在于通过这些实验使学生巩固所学知识,加深对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.进一步掌握汇编语言程序设计和调试方法。
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 的内容完全相同,说明程序实现了数据区传送。