单片机实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名学号
时间 2014.11.24
实验题目单片机对外部RAM读写实验
一、实验目的与要求
实验目的:学习扩展存储器62256的读、写操作和用法。
实验要求:①向62256里连续写入1、2、3……100,然后再连续读出并求和,结果送P1口显示。
②将62256里0000H-7FFFH内容全部清零;
③将编写程序表TAB为首地址的6个单元(1,3,5,7,11,13共6个奇数)
内容写入62256里以1000H为首地址的单元内;并累计相乘,将16位计算
结果的送62256里的2000H单元;高八位通过LED闪烁(0.5s亮,0.5s灭)
显示。
二、实验环境(硬件环境、软件环境)
硬件环境:TMD-2模块化单片机实验仪
RAM:62256(32K X8)地址范围:0000H~7FFFH
I/O口输入输出设备:8个拨动开关,8个LED灯
数据显示设备:1个共阴极数码管,1个两行16字符的液晶显示器
逻辑笔
输出时钟频率(YCLK):1MHz
系统电源:+5V/2A ,+12V/0.5A ,-12V/0.5A
软件环境:系统编程软件Flash Magic ,汇编语言程序编辑软件Keil,串行口调试助手
三、实验电路
说明:74LS245(U22)用作数据总线双向驱动。74LS373(U21)用于低8
位地址锁存。62256(U16)是32K字节的数据存储器。它有8条数据线
(D0~D7),15条地址线(A0~A14)。通过读、写线(/RD,/WR)控制CPU
与62256之间数据传送的方向。
A15用作62256的片选线。A15=0时,选中62256,可对它进行读、写操作。
62256的地址空间范围:0000H~7FFFH。
A15=1时,选中外部接口芯片:8000H~8FFFH。
四、程序流程图
①向62256里连续写入1、2、3……100,然后再连续读出并求和,结果送P1口显示。
②将62256里0000H-7FFFH内容全部清零;
③将编写程序表TAB为首地址的6个单元(1,3,5,7,11,13共6个奇数)内容写入62256里以1000H为首地址的单元内;并累计相乘,将16位计算结果的送62256里的2000H 单元;高八位通过LED闪烁(0.5s亮,0.5s灭)显示。
五、程序测试报告:(调试输入数据、结果数据或状态。)
①向62256里连续写入1、2、3……100,然后再连续读出并求和,结果送P1口显示。答:运行程序后,LED指示灯显示的数值大小为“BA”,即八个灯的亮灭状态为“亮灭亮亮亮灭亮灭”。
②将62256里0000H-7FFFH内容全部清零;
答:运行程序后,可通过软件检测0000H-7FFFH所存储的数据均为“0”。
③将编写程序表TAB为首地址的6个单元(1,3,5,7,11,13共6个奇数)内容写入62256里以1000H为首地址的单元内;并累计相乘,将16位计算结果的送62256里的2000H 单元;高八位通过LED闪烁(0.5s亮,0.5s灭)显示。
答:运行程序后,可通过软件检测1000H-1005H六个单元中存储的内容分别为“01H,03H,05H,07H,0BH,0DH”。LED指示灯显示的数值大小为“3A”,即八个灯状态为“灭灭亮亮亮灭亮灭”与全灭状态交替,各为0.5s。
六、体会:(碰到的问题、如何解决、有何体会)
通过本次实验,我们学会了扩展存储器62256的读、写操作和用法。通过实验书中的例子,我们了解到向扩展存储器中写数的一种方法,就是要设置一个数据数量来控制数据是否完全写入。可是当数据数量大于255时便不能再用这一方法来控制数据是否完全写入,这时候我们可以通过判断DPH或DPL的数值是否达到要求来控制。
通过最后一个思考题的练习,综合了向扩展存储器中写数、读数以及实现数据的处理这些内容,难度较大。写数利用了查表法,读数则与例题类似,但是在数据的处理上,思考题增加了难度为数据的相乘,这时候就应该注意“MUL AB”语句的使用,相乘后得到的数据高八位存储在B中,低八位存储在A中。对于思考题的数据我们可以注意到,前四个数据相乘后仍然是<255,后两个数据相乘后是<255,因此我们可以分别计算前四位相乘、后两位相乘的数据,然后这两个数据再相乘,便可以得到最终我们需要的六个数相乘的结果,此时高八位存储在B中,低八位存储在A 中。然后便可以存储结果,并将高八位输出到P1口。利用延时程序,完成整个程序的设计。
设计程序的过程中遇到过一些困难,经过多次检查、修改、调试后最终得到想要的结果。总之,原理是易懂的,但是会灵活运用确实有点困难的,说明我们还需要加强练习。
七、源程序代码
①向62256里连续写入1、2、3……100,然后再连续读出并求和,结果送P1口显示。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#0000H
MOV R7,#100
MOV A,#1
INPUT:MOVX @DPTR,A
INC A
INC DPTR
DJNZ R7,INPUT
MOV 20H,#0
MOV R7,#100
MOV DPTR,#0000H
OUTPUT:MOVX A,@DPTR
ADD A,20H
MOV 20H,A
INC DPTR
DJNZ R7,OUTPUT
MOV P1,20H
LOOP: SJMP LOOP
END
②将62256里0000H-7FFFH内容全部清零;
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#0000H
MOV A,#00H
INPUT:MOVX @DPTR,A
INC DPTR
MOV R7,DPH
CJNE R7,#7FH,INPUT
MOVX @DPTR,A
INPUT1:INC DPTR
MOVX @DPTR,A
MOV R7,DPL
CJNE R7,#0FFH,INPUT1
HERE: SJMP HERE