收藏 分销(赏)

北邮微原硬件实验报告.doc

上传人:Fis****915 文档编号:551811 上传时间:2023-12-06 格式:DOC 页数:30 大小:854.88KB 下载积分:6 金币
下载 相关 举报
北邮微原硬件实验报告.doc_第1页
第1页 / 共30页
北邮微原硬件实验报告.doc_第2页
第2页 / 共30页


点击查看更多>>
资源描述
信息与通信工程学院 微机原理硬件实验报告 2013年微机原理硬件实验报告 学 院:信息与通信工程学院 班 级:2011211104 姓 名: 实验一 I/O地址译码 一.实验目的 掌握I/O地址译码电路的工作原理。 二.实验原理和内容 1.实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。 译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 原理:地址2A0H的A5,A4,A5为100,在输入或输出时,IOW或IOR为0,使得74LS138被选中,经过译码,在Y4口输出负脉冲。其他同理。 图1-1 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。 2.接线: Y4/IO地址 接 CLK/D触发器 Y5/IO地址 接 CD/D触发器 D/D触发器 接 SD/D角发器 接 +5V Q/D触发器 接 L7(LED灯)或 逻辑笔 三. 程序流程图 开始 设置循环次数 输出负脉冲点亮L7 调用延时子程序延时 输出另一个负脉冲,熄灭L7 调用延时子程序延时 循环次数是否到零 结束 否 是 四. 源程序 DATA SEGMENT DATA ENDS STACK SEGMENT STACK 'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;延时子程序 DELAY PROC NEAR MOV BX,500 PUSH CX LOOP2: MOV CX,0FFFH WAIT: LOOP WAIT DEC BX JNZ LOOP2 POP CX RET DELAY ENDP START: MOV CX,0FFFFH ;二极管闪烁部分 LOOP1: MOV DX,2A0H ;灯亮 OUT DX,AL CALL DELAY MOV DX,2A8H ;灯灭 OUT DX,AL CALL DELAY LOOP LOOP1 CODE ENDS END START 五. 实验结果 LED7正常闪烁显示 六. 实验总结 这是我们第一次做微原硬件实验,我开始一直觉得编程很重要,发现按照实验要求很快就编出了程序,完成了实验,但是当给老师验收时,老师问我为什么向2A0口输出一下,就会在Y4产生一个负脉冲,我瞬间就僵住了,的确我没有考虑过这个问题。 后来,经过我对电路图的分析思考,得出了正确的结论,我才明白,硬件才是这个实验的核心,最重要的是要理解硬件是如何工作的,而不是仅仅按照要求编个程序就可以了。 同时,我也十分感谢老师对我们的严格要求! 实验二 简单并行接口 一.实验目的 掌握简单并行接口的工作原理及使用方法。 二.实验原理和内容 1.按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。 2.编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。 3.按下面图4-2-2简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。 4.用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。 5.接线: 1)输出 按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门) 2)输入 按图4-2-2接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门) 由于,我的实验台上的芯片是74LS273,因此本实验仅涉及74LS273输出。 三. 程序流程图 四.源程序 DATA SEGMENT DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AH,1 ;键盘输入 INT 21H CMP AL,27 ;检测是否为ESC键 JZ EXIT MOV DX,2A8H ;输出 OUT DX,AL JMP START ;返回DOS EXIT: MOV AX,4C00H INT 21H CODE ENDS END START 五.实验结果 键盘输入字符,然后二极管显示键盘输入字符的ASCⅡ码 六.实验总结 本次实验相较上一次实验,顺利很多,因为有了第一次实验的基础,我在编代码之前,先仔细研究课硬件电路图,分析了整个过程中硬件是如何工作的,都会有怎样的反应,而后才编写了程序,并验收通过。 实验三 可编程并行接口8255 一.实验目的 通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。 二.实验原理和内容 1.8255的工作方式 一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。 方式0是基本型输入/输出。这种方式和外设交换数据时,8255端口与外设之间不使用联络线。 方式1为选通型输入/输出。用这种方式和外界交换数据时,端口和外设之间要有联络信号。 方式2是双向数据传送,仅A口有这项功能。当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。 2. 工作方式选择字 8255工作方式选择字共8位(如图),存放在8255控制寄存器中。最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。 3.C口置/复位控制字 8255的C口可进行位操作,即:可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的。C口置/复位字共8位,各位含义如下: 4.8255A的控制信号与传输动作的对应关系 : 5.命令字与初始化编程 8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是: ① 向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。 ②当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求。 注意:“C口置0/置1控制字”虽然是对C口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。 ③ 向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据” 6.实验内容 (1)实验电路如图4-3-1,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。 (2)编程从8255C口输入数据,再从A口输出。 (3)接线:PC7~PC0/8255 接 K7~K0/逻辑电平开关 PA7~PA0/8255 接 L7~L0/LED显示 CS/8255 接 Y1/IO地址 8255控制寄存器端口地址--28BH, A口的地址--288H, B口的地址--289H,C口的地址--28AH。 三.程序流程图 四.源程序 DATA SEGMENT DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS XOR AX,AX PUSH AX ;准备返回DOS MOV AL,10001001B;8255初始化,设置A口为输出,C口输入 MOV DX,28BH OUT DX,AL LOOP1: MOV DX,28AH ;从C口读入开关状态 IN AL,DX MOV DX,288H ;向A口输出,点亮对应二极管 OUT DX,AL JMP LOOP1 RET START ENDP CODE ENDS END START 五.实验结果 打开开关,对应的LED灯被点亮 六.实验总结 本次实验是关于并行接口8255,由于在实验前我们还没有讲8255,使得我在做实验过程中发生了很多困难,主要是在对硬件连接的分析上一直没有搞懂,后来我和周围同学看着课本一点点的讨论,最终弄懂了硬件连接和响应的过程,也使得我们对8255有了深刻的理解,画出硬件连接图后,很快编写了程序,完成了实验内容。 在此,还要感谢老师对我们严格要求,使得我们能真正搞懂硬件,再去完成软件编程。 实验四 七段数码管 一.实验目的 掌握数码管显示数字的原理 二. 实验原理和内容 1.数码管原理 实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。七段数码管的字型代码表如下表: 2.实验内容 静态显示:按4-4-1连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1 、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。(或编程在数码管上循环显示“00-99”, 位码驱动输入端S0、S1 接PC0、PC1;S2、S3接地。) 3.接线: PA7~PA0/8255 接 dp~a/LED数码管 PC3~PC0/8255 接 S3~S0/LED数码管 CS/8255 接 Y1/IO地址 三.程序流程图 四.源程序 DATA SEGMENT DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV DX,28BH ;写控制口,设置A,C口为输出 MOV AL,80H OUT DX,AL MOV CX,100 AGAIN: MOV DX,28AH ;第一个数码管显示 MOV AL,00H OUT DX,AL MOV DX,288H MOV AL,3FH OUT DX,AL MOV DX,28AH MOV AL,01H OUT DX,AL MOV DX,28AH ;第二个数码管显示 MOV AL,00H OUT DX,AL MOV DX,288H MOV AL,5BH OUT DX,AL MOV DX,28AH MOV AL,02H OUT DX,AL MOV DX,28AH ;第三个数码管显示 MOV AL,00H OUT DX,AL MOV DX,288H MOV AL,06H OUT DX,AL MOV DX,28AH MOV AL,04H OUT DX,AL MOV DX,28AH ;第四个数码管显示 MOV AL,00H OUT DX,AL MOV DX,288H MOV AL,3FH OUT DX,AL MOV DX,28AH MOV AL,08H OUT DX,AL LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS END START 五.实验结果 数码管显示我的学号后四位0120 六.实验总结 实验中遇到的问题: 由于有上一个实验的基础,我在做这个实验时对8255的工作方式和硬件连接已经十分熟悉了,因此开始很快就分析了硬件,画出流程图,编写了代码,原本以为可以很快做完这个实验,后来发现数码管显示有问题,显示有重影,还有些闪烁,后来,经过分析,我觉得是因为点亮每个数码管之前没有复位导致的,所以我在每次显示数码管之前对数码管的位码复位: MOV DX,28AH MOV AL,00H OUT DX,AL 经过修改显示了稳定、清晰的数字。 这次实验再一次巩固了我对8255并行接口的理解和使用,同时,学会了数码管的使用。收获颇丰,也对我的理论课学习有十分大的帮助! 实验八 可编程定时器/计数器(8253/8254) 一.实验目的: 学习掌握8253用作定时器的编程原理; 二.实验原理和内容 1.8253/8254的使用 8253和8254都是可编程计数器,它们的引脚兼容,功能与使用方法相同。8254是8253的改进型。 (1)8253初始化 使用8253前,要进行初始化编程。初始化编程的步骤是: ① 向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。 ② 向使用的计数器端口写入计数初值。 (2)8253控制字 D7D6=00:使用0号计数器,D7D6=01:使用1号计数器 D7D6=10:使用2号计数器,D7D6=11:无效 D5D4=00:锁存当前计数值 D5D4=01:只写低8位(高8位为0),读出时只读低8位 D5D4=10:只写高8位(低8位为0),读出时只读高8位 D5D4=11:先读/写低8位,后读/写高8位计数值 D3D2D1=000:选择方式0,D3D2D1=001:选择方式1 D3D2D1=X10:选择方式2,D3D2D1=X11:选择方式3 D3D2D1=100:选择方式4,D3D2D1=101:选择方式5 D0=0:计数初值为二进制,D0=1:计数初值为BCD码数 2. 实验电路 3.接线: CS /8253 接 Y0 /IO 地址 GATE0 /8253 接 +5V CLK0 /8253 接 1M时钟 OUT0 /8253 接 喇叭或蜂鸣器 8253控制寄存器地址 283H ,计数器0地址 280H ,计数器1地址 281H ,计数器2地址 282H ,CLK0连接时钟 1MHZ 4.实验内容: 完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。 扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。 三.程序流程图 开始 初始化8254 初始化8255 设置循环次数为歌曲长度 取一个音符 数码管显示音符 按照音符频率,输出给8254计数初值 将分频后的时钟,输出给喇叭发声 循环次数减一 循环次数是否到0 结束 是 否 四.源程序 1.基础实验:(自动播放预存乐曲) DATA SEGMENT NOTE DW 0,3906,3472,3125,2932,2604,2344,2083,1953;频率 TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管 MUSIC DB 1,1,5,5,6,6,5,4,4,3,3,2,2,1,5,5,4,4,3,3,2,5,5,4,4,3,3,2,1,1,5,5,6,6,5,4,4,3,3,2,2,1;存放的乐符 DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;延时子程序 DELAY PROC NEAR PUSH CX MOV CX,0FFFFH WAIT1: LOOP WAIT1 POP CX RET DELAY ENDP START: MOV AX,DATA MOV DS,AX ;8254初始化 MOV DX,283H MOV AL,36H ;零号计数器,工作在方式3 OUT DX,AL ;8255初始化 MOV DX,28BH MOV AL,80H OUT DX,AL MOV DX,28AH MOV AL,01H OUT DX,AL AGAIN: MOV SI,0 MOV CX,42 PLAY: MOV BL,MUSIC[SI] MOV BH,0 MOV AL,TABLE[BX] MOV DX,288H ; 显示音符 OUT DX,AL ADD BX,BX MOV AX,NOTE[BX] MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL MOV AX,120H LOOP1: CALL DELAY DEC AX JNZ LOOP1 MOV AX,0 MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL CALL DELAY INC SI LOOP PLAY JMP AGAIN CODE ENDS END START 2. 拓展实验:(DOS调用键盘输入弹奏乐曲) DATA SEGMENT NOTE DW 0,3906,3472,3125,2932,2604,2344,2083,1953;频率 TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管 DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;延时子程序 DELAY PROC NEAR PUSH CX MOV CX,0FFFFH WAIT1: LOOP WAIT1 POP CX RET DELAY ENDP START: MOV AX,DATA MOV DS,AX ;8254初始化 MOV DX,283H MOV AL,36H ;零号计数器,工作在方式3 OUT DX,AL ;8255初始化 MOV DX,28BH MOV AL,80H OUT DX,AL MOV DX,28AH MOV AL,01H OUT DX,AL PLAY: MOV AH,01H INT 21H SUB AL,30H MOV AH,0 MOV BX,AX MOV AL,TABLE[BX] MOV DX,288H ; 显示音符 OUT DX,AL ADD BX,BX MOV AX,NOTE[BX] MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL MOV AX,90H LOOP1: CALL DELAY DEC AX JNZ LOOP1 MOV AX,0 MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL CALL DELAY JMP PLAY CODE ENDS END START 五.实验结果 基础实验:正常播放出预存的《小星星》歌曲 拓展实验:由键盘输入,可以弹奏乐曲 六.实验总结 实验中遇到的问题: 1. 播放音乐声音刺耳,发现是因为用了蜂鸣器,改用喇叭后声音不再刺耳。 2. 播放音乐音调有问题,发现是分频比计算错误导致 这次实验是我第一次接触8254,为了能顺利完成实验,我按照老师的要求在课前做好了预习工作,提前编写了代码,并画了硬件连接图和对应的程序流程图。于是在课上节省了很多时间,很快便调试成功。 而后,我有对实验进行了拓展,将自动播放音乐,改为由键盘输入弹奏音乐,并实现成功。 通过这次实验,我基本学会了8254计数器的使用,对我理论课的学习有很大帮助! 七.思考题 写出8253计数初值、输入频率和输出频率的关系。 输出频率 = 输入频率 / 8253计数初值 实验十六 串行通讯8251 一.实验目的 1.了解串行通讯的基本原理。 2.掌握串行接口芯片8251的工作原理和编程方法。 二.实验原理和内容 1.按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。 2.编程: 从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。)实现自发自收。 3.接线: CLK0 /8254 接 1M时钟 GATE0 /8254 接 +5V 0UT0 /8254 接 TX/RXCLK /8251 CS /8254 接 Y0 /IO地址 CS /8251 接 Y7 /IO地址 RXD /8251 接 TXD /8251 (1)图示电路8251的控制口地址为2B9H,数据口地址为2B8H。 (2)8254计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接 1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。 14 (3) 收发采用查询方式。 扩展:双机通信,将发送端用小键盘发送数据,接收端用数码管显示接收的数据。 连线:将发送端的TXD与接收端的RXD,将发送端的RXD与接收端的TXD,(即交叉连接),并将两台接口板的地连在一起。其余与上面连线相同。 三.程序流程图 四.源程序 1.基础部分:(自发自收) DATA SEGMENT ERRMSG DB 0DH,0AH,'error',0DH,0AH,'$' STRING DB 0DH,0AH,'Please input a word.',0DH,0AH,'$',0DH,0AH DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: ;8253初始化 MOV DX,283H MOV AL,00010110B OUT DX,AL MOV DX,280H MOV AL,52 OUT DX,AL MOV AH,09H MOV DX,SEG STRING MOV DS,DX MOV DX,OFFSET STRING INT 21H ;初始化8251A GOON: MOV DX,2B9H MOV AL,40H OUT DX,AL NOP MOV AL,5EH ;设置异步方式,1位停止位,字符长度为8位,奇校验,波特率因子为16 OUT DX,AL MOV AL,37H ;命令控制字对应位置一 OUT DX,AL ;查询工作 AGAIN: MOV DX,2B9H IN AL,DX TEST AL,38H;检查是否出错 JNZ ERR TEST AL,01H;检查是否可以发送数据 JZ AGAIN MOV AH,01H;从键盘输入一个字符,ACSII码加一后在输出 INT 21H CMP AL,1BH JZ EXIT INC AL MOV DX,2B8H OUT DX,AL MOV CX,100H LOOP1: LOOP LOOP1 RECEIVE: MOV DX,2B9H IN AL,DX TEST AL,02H;检查是否收到新数据 JZ RECEIVE MOV DX,2B8H IN AL,DX MOV DL,AL MOV AH,02H INT 21H JMP GOON ERR: MOV AH,09H MOV DX,SEG ERRMSG MOV DS,DX MOV DX,OFFSET ERRMSG INT 21H EXIT: MOV AX,4C00H INT 21H CODE ENDS END START 2. 拓展双机通信: (1) 单工: 发送方: DATA SEGMENT ERRMSG DB 0DH,0AH,'error',0DH,0AH,'$' STRING DB 0DH,0AH,'Please input a word.',0DH,0AH,'$',0DH,0AH DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: ;8253初始化 MOV DX,283H MOV AL,00010110B OUT DX,AL MOV DX,280H MOV AL,52
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 行业资料 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服