《北京邮电大学微原硬件实验报告[1].docx》由会员分享,可在线阅读,更多相关《北京邮电大学微原硬件实验报告[1].docx(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微原硬件实验报告班级: 学号: 班内序号: 姓名: 实验一、二 基本的I/O实验一、 实验目的1、掌握I/O地址译码电路的工作原理。2、掌握简单并行接口的工作原理及使用方法。二、 实验原理及内容1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H287H,Y1:288H28FH, 当CPU执行I/O指令且地址在280H2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT
2、DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、),时间间隔通过软件延时实现。2、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0D7,8个Q输出端接LED显示电路L0L7。 3、编程从键盘输入一个字符或数字,将其ASC码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。 4、按下面图4-2-2简单并行输入接
3、口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0K7,8个数据输出端分别接数据总线D0D7。 5、用逻辑电平开关预置某个字母的ASC码,编程输入这个ASC码,并将其对应字母在屏幕上显示出来。三、硬件接线图与软件程序流程图图1:实验一的硬件接线图图2:实验二的硬件接线图图3:实验二的程序流程图四、源程序1、实验一源程序DATA SEGMENTDATA ENDSSTACK SEGMENT STACK STACK DB 100H DUP(?)STACK ENDSCODE SEGMENT ASSUME C
4、S:CODE,DS:DATA,SS:STACK;延时子程序DELAY PROC NEARMOV BX,500PUSH CXLOOP2:MOV CX,0FFFHWAIT: LOOP WAITDEC BXJNZ LOOP2POP CXRETDELAY ENDPSTART:MOV CX,0FFFFH;二极管闪烁部分LOOP1:MOV DX,2A0H;灯亮MOV AL,0FFHOUT DX,ALCALL DELAYMOV DX,2A8H;灯灭MOV AL,0OUT DX,ALCALL DELAYLOOP LOOP1CODE ENDSEND START2、实验二的源程序DATA SEGMENTDATA
5、ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AH,1;键盘输入 INT 21H CMP AL,27;检测是否为ESC键 JZ EXIT MOV DX,2A8H;输出 OUT DX,AL JMP START;返回DOSEXIT: MOV AX,4C00H INT 21HCODE ENDS END START五、实验结果1、实验一:二极管闪烁显示2、实验二:键盘输入,然后二极管显示键盘输入的ASC码六、实验总结本实验遇到的问题主
6、要是:1、二极管显示不正常,主要是延时的问题,调整一下就好了。七、 实验收获与心得体会这次实验的要点是对I/O接口译码电路的理解以及使用。我们测试了外设功能,这使我们了解了地址与端口的对应情况,从而明确了程序编写的流程和注意事项。通过该译码电路实验,我掌握了地址译码电路的设计方法和实现原理,对硬件的I/O接口技术有了进一步的认识。这次实验也为以后的实验打下了基础,特别是,应先理解了译码电路的工作原理,然后才能进行编程。实验三、四、五 可编程并行接口8255实验一、 实验目的1、通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。2、掌握数码管显示数字的原理。3、掌握82
7、55控制键盘及显示电路的基本功能及编程方法。 4、掌握一般键盘和显示电路的工作原理。二、 实验原理及内容实验三:1、实验电路如图4-3-1,8255C口接逻辑电平开关K0K7,A口接LED显示电路L0L7。 2、编程从8255C口输入数据,再从A口输出。 实验四:1、静态显示:按4-4-1连接好电路,将8255的A口PA0PA7分别与七段数码管的段码驱动输入端adp相连,位码驱动输入端S0、S1 、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。(或编程在数码管上循环显示“00-99”, 位码驱动输入端S0、S1 接PC0、PC1;S2、S3接地。) 实验五:1
8、、编程:使得在小键盘上每按一个健,4位数码管上显示出相应字符。三、 硬件接线图与软件程序流程图图1:实验三的硬件接线图图2:实验四的硬件接线图图3:实验三的程序流程图图4:实验四的程序流程图四、源程序1、实验三源程序DATA SEGMENTDATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV DX,28BH;8255初始化MOV AL,89HOUT DX,ALLOOP1:MOV DX,2
9、8AHIN AL,DXMOV DX,288HOUT DX,ALJMPLOOP1MOV AH,4CHINT 21HCODEENDSEND START2、实验四源程序(1)显示学号DATA SEGMENTDATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV DX,28BH;8255初始化MOV AL,80HOUT DX,AL MOV CX,30VIEW:MOV DX,28AH;第一个数码管显
10、示MOV AL,00HOUT DX,ALMOV DX,288HMOV AL,6DHOUT DX,ALMOV DX,28AHMOV AL,01HOUT DX,AL;第二个数码管显示MOV DX,28AHMOV AL,00HOUT DX,ALMOV DX,288HMOV AL,6FHOUT DX,ALMOV DX,28AHMOV AL,02HOUT DX,AL;第三个数码管显示MOV DX,28AHMOV AL,00HOUT DX,ALMOV AL,0MOV DX,288HMOV AL,07HOUT DX,ALMOV DX,28AHMOV AL,04HOUT DX,AL;第四个数码管显示MOV D
11、X,28AHMOV AL,00HOUT DX,ALMOV AL,0MOV DX,288HMOV AL,3FHOUT DX,ALMOV DX,28AHMOV AL,08HOUT DX,AL循环显示JZ VIEW ;返回DOSMOV AH,4CHINT 21HCODEENDSEND START(2)循环显示数字099DATA SEGMENTTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管显示DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODESEGMENTASSUME
12、CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV DX,28BH;8255初始化MOV AL,80HOUT DX,AL;循环显示 MOV BX,0H;控制重新从0开始计数的变量LOOP1:MOV CX,100;循环扫描数码管让两个数码管都显示VIEW: MOV DX,28AHMOV AL,00HOUT DX,ALMOV DX,288H;计算十位数,并显示PUSH BX MOV AX,BX MOV BL,0AH DIV BL MOV AL,AH MOV BX,OFFSET TABLE MOV AH,0H ADD BX,AX MOV A
13、L,BX OUT DX,AL POP BXMOV DX,28AHMOV AL,01HOUT DX,AL;计算个位数显示 MOV DX,28AHMOV AL,00HOUT DX,ALMOV DX,288HPUSH BX MOV AX,BX MOV BL,0AH DIV BL MOV BX,OFFSET TABLE MOV AH,0H ADD BX,AX MOV AL,BX OUT DX,AL POP BXMOV DX,28AHMOV AL,02HOUT DX,ALLOOP VIEW;修改变量显示下一个数 INC BL CMP BL,64H JNZ JUMP1 MOV BL,0HJUMP1: JM
14、P LOOP1 ;返回DOSMOV AH,4CHINT 21HCODEENDSEND START3.实验五的源程序DATA SEGMENTTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,DB 39H,5EH,79H,71H;数码管显示NUM DB 00H,070H,0B0H,0D0H,0E0H;用于扫描键盘DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK;延时子程序DELAY
15、 PROC NEAR PUSH CX MOV CX,100H WAIT1: LOOP WAIT1 POP CX RETDELAY ENDP;获取键盘的输入数字的子程序,通过BX寄存器传递KEYBO PROC NEAR PUSH AX;保护现场 PUSH CX PUSH DX MOV CX,01H;控制扫描4次CHECK: MOV DX,28AH;输出一行置低电平 MOV BX,OFFSET NUM ADD BX,CX MOV AL,BX OUT DX,AL;防抖 IN AL,DX;判断是否有键盘按下 MOV AH,AL CALL DELAY IN AL,DX CMP AL,AH JNZ CHE
16、CK;判断是那一列按下了 AND AL,0FH CMP AL,0FH JZ NEXT CMP AL,0EH JZ NEXT1 CMP AL,0DH JZ NEXT2 CMP AL,0BH JZ NEXT3 MOV BX,01H JMP GOTNEXT: INC CX;修改变量扫描下一行 CMP CX,05H JNZ JUMP1 MOV CX,01HJUMP1: JMP CHECKNEXT1: MOV BX,04H JMP GOTNEXT2: MOV BX,03H JMP GOTNEXT3: MOV BX,02H;计算按下键盘的数值GOT: SUB CX,01H MOV AL,CL MOV DL
17、,04H MUL DL ADD BL,AL SUB BL,01H POP DX;恢复现场 POP CX POP AX RET KEYBO ENDP;主程序START: MOV AX,DATA MOV DS,AX;8255初始化 MOV DX,28BH MOV AL,81H OUT DX,AL MOV DX,289H MOV AL,01H OUT DX,AL ;扫描键盘LOOP1: CALL KEYBO;数码管显示字符 MOV AX,BX MOV BX,OFFSET TABLE ADD BX,AX MOV AL,BX MOV DX,288H OUT DX,AL MOV DX,28AH IN AL
18、,DX;检测键盘弹起 MOV AH,ALLOOP2: CALL DELAY IN AL,DX CMP AL,AH JZ LOOP2 JMP LOOP1;返回DOS MOV AX,4C00H INT 21H CODE ENDS END START五、实验结果1、实验三:打开的那个开关对应的二极管亮。2、实验四:(1)四个数码管稳定的显示学号:0795;(2)两个数码管循环显示099数字;3、实验五:键盘输入数字,数码管显示相应的的输入的数字。六、 实验总结实验中主要遇到了下面的问题:1、数码管显示总是有阴影,不清晰。主要原因是数码管循环扫描的速度太快,以及视觉的停留效应。解决办法发是显示下一个字
19、符之前先对数码管进行初始化,使之不显示;2、键盘的输入有错误,按键有时会获取错误数字。主要是由于是键盘经常有毛刺,需要防抖。通过先检测,延时,再检测的方式进行防抖,排除键盘抖动。七、 实验收获与心得体会本次实验中,我们使用8255A并行接口芯片和数码管实现了一个数码管的静态和动态显示字符的程序。为了实现同时显示不同字符,就要通过扫描(依次点亮数码管)的方式来实现,这就要给CAT信号依次赋值,并且在扫描的过程中要用到延时。动态显示的程序设计思想与静态时的大体相同,只是对动态的每一种状态进行一段时间的静态显示然后换状态而已,所以通过一个二层循环就能很好地解决这个问题。通过这次实验,我在编程过程中学
20、到了很多东西,不但巩固了书本的知识,而且体会到了编程的过程中思维必须很缜密,否则写出来的程序常会导致无法运行甚至死机。实验八 可编程定时器计数器(8253/8254)一、 实验目的学习掌握8253用作定时器的编程原理; 二、 实验原理及内容1完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。2扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。 注意:8253输入频率应小于2MHz。三、硬件接线图与软件程序流程图图1:硬件连接图图2:程序流程图四、 给出源程序1、播放音乐程序:DATA SEGMENTNOTE DW 0001H,3906,3472,3125,2932,2604
21、,2344,2083,1953;频率TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数码管MUSIC DB 3,3,2,3,5,6,5,8,6,5,5,3,3,5,5,5,6,0,8,8,2,2,3,3,2,1,6,1,5,5,0,5,DB 5,3,3,5,5,6,8,8,2,2,3,3,1,1,6,6,5,5,5,0,5,5,2,2,3,5,3,2,1,6,6,1,1;存放的乐符DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CO
22、DE,DS:DATA,SS:STACK;延时子程序DELAY PROC NEAR PUSH CX MOV CX,0FFFFH WAIT1: LOOP WAIT1 POP CX RETDELAY ENDP;主程序START: MOV AX,DATA MOV DS,AX;8254初始化 MOV DX,283H MOV AL,36H OUT DX,AL;8255初始化 MOV DX,28BH MOV AL,80H OUT DX,AL MOV DX,28AH MOVAL,01H OUT DX,AL MOV CX,01H;播放音乐SPEAK: PUSH CX;保护现场;读取乐符 MOV BX,OFFSE
23、T MUSIC ADD BX,CX MOV AL,BX MOV CL,AL MOV CH,0H ;数码管显示 MOV BX,OFFSET TABLE ADD BX,CX MOV AL,BX MOV DX,288H OUT DX,AL;播放该乐符 MOV BX,OFFSET NOTE MOV AX,CX ADD AX,AX ADD BX,AX MOV AX,BX MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL POP CX ;延时,持续播放 MOV AX,90HLOOP1: CALL DELAY DEC AX JNZ LOOP1 ;判读继续播放还是重新播放 I
24、NC CX CMP CX,41H JNZ JUM MOV CX,01HJUM: JMP SPEAKCODEENDSEND START2、拓展:小键盘弹奏DATA SEGMENTNOTE DW 0001H,3906,3472,3125,2932,2604,2344,2083,1953;频率TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数码管NUM DB 00H,070H,0B0H,0D0H,0E0H ;检测键盘输出DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEG
25、MENT ASSUME CS:CODE,DS:DATA,SS:STACK;延时子程序DELAY PROC NEAR PUSH CX MOV CX,100H WAIT1: LOOP WAIT1 POP CX RETDELAY ENDP;获取键盘输入值的子程序,具体注释KEYBO PROC NEAR PUSH AX PUSH CX PUSH DX MOV CX,01HCHECK: MOV DX,28AH MOV BX,OFFSET NUM ADD BX,CX MOV AL,BX OUT DX,AL IN AL,DX MOV AH,AL CALL DELAY IN AL,DX CMP AL,AH J
26、NZ CHECK AND AL,0FH CMP AL,0FH JZ NEXT CMP AL,0EH JZ NEXT1 CMP AL,0DH JZ NEXT2 CMP AL,0BH JZ NEXT3 MOV BX,01H JMP GOTNEXT: INC CX CMP CX,05H JNZ JUMP1 MOV CX,01HJUMP1: JMP CHECKNEXT1: MOV BX,04H JMP GOTNEXT2: MOV BX,03H JMP GOTNEXT3: MOV BX,02HGOT: SUB CX,01H MOV AL,CL MOV DL,04H MUL DL ADD BL,AL SU
27、B BL,01H POP DX POP CX POP AX RET KEYBO ENDP;主程序START: MOV AX,DATA MOV DS,AX;8254初始化 MOV DX,283H MOV AL,36H OUT DX,AL;8255初始化 MOV DX,28BH MOV AL,81H OUT DX,AL MOV DX,289H MOV AL,01H OUT DX,AL ;扫描键盘显示LOOP1: CALL KEYBO;扫描键盘,获取乐符 MOV CX,BX MOV BX,OFFSET TABLE ;数码管显示乐符 ADD BX,CX MOV AL,BX MOV DX,288H OU
28、T DX,AL ;获取乐符的频率,并播放乐符 MOV BX,OFFSET NOTE MOV AX,CX ADD AX,AX ADD BX,AX MOV AX,BX MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL;检测键盘是否弹起,直到键盘弹起才停止播放音乐 MOV DX,28AH IN AL,DX MOV AH,ALLOOP2: CALL DELAY IN AL,DX CMP AL,AH JZ LOOP2 ;初始化8254,停止播放音乐 MOV AX,0H MOV DX,283H MOV AL,36H OUT DX,AL JMP LOOP1 CODE END
29、S END START 3、扩展:四个数码管滚动显示乐符由于大部分程序与程序1相同,再次省略部分程序删掉延时子程序,增加子程序:SHOW PROC NEAR PUSH CX;保护现场 PUSH AX MOV CX,5AH;一次扫描各个数码管,使四个数码管同时显示LOOP1: MOV DX,289H ;第一个数码管显示 MOV AL,01H OUT DX,AL MOV BX,OFFSET TABLE ADD BX,NUM1 MOV AL,BX MOV DX,288H OUT DX,AL;第二个数码管显示 MOV DX,289H MOV AL,02H OUT DX,AL MOV BX,OFFSET
30、 TABLE ADD BX,NUM2 MOV AL,BX MOV DX,288H OUT DX,AL; 第三个数码管显示 MOV DX,289H MOV AL,04H OUT DX,AL MOV BX,OFFSET TABLE ADD BX,NUM3 MOV AL,BX MOV DX,288H OUT DX,AL;第四个数码管显示 MOV DX,289H MOV AL,08H OUT DX,AL MOV BX,OFFSET TABLE ADD BX,NUM3 MOV AL,BX MOV DX,288H OUT DX,AL;调整循环参数 DEC CX JNZ LOOP1 POP AX POP C
31、X RET SHOW ENDP主程序调整: 在语句POP CX 之前增加 MOV AX,NUM3 MOV NUM4,AX MOV AX,NUM2 MOV NUM3,AX MOV AX,NUM1 MOV NUM2,AX MOV NUM1,CX CALL SHOW替换到原先的延时部分。五、 给出实验结果1、程序1可以循环播放茉莉花选段,数码管显示播放的音符;2、程序2可以按键播放音乐,键按下就响,直到弹起才停止,数码管显示正在播放的音符;3、程序3可以循环播放茉莉花选段,四个数码管滚动显示播放的音符。六、 实验总结做这个实验时主要遇到了下面几个问题:1、播放噪音:实验开始写的程序播放时,全是噪音。调了很长时间也不好使。其主要原因是延时太短,编写程序之前没有计算延时多久可以正常播放音符,只是评经验赋值,结果导致很长时间调不出来。多循环几次延时子程序就很好解决问题了。2、键盘弹奏遇到的问题是弹起问题,如果不检测弹起,会有音符长时间播放无法停下来。所以要用键盘按下的时间替换掉延时的程序,这样就可以控制音符播放的时间。3、数码管滚动显示音符遇到的主要问题
限制150内