北邮微原硬件实验

更新时间:2023-12-14 18:23:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

信息与通信工程学院

微原硬件实验报告

姓名: 班级: 学号: 班内序号:

【一.基本的I/O实验】

实验一 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输出一个负脉冲。

图1-1

利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、??),时间间隔通过软件延时实现。

2、接线: Y4/IO地址接 CLK/D触发器 Y5/IO地址接 CD/D触发器

D/D触发器接 SD/D角发器接 +5V Q/D触发器接 L7(LED灯)或逻辑笔

三、 硬件接线图及软件程序流程图

1.硬件接线图

2.软件程序流程图

四、 源程序

DATA SEGMENT DATA ENDS

STACK SEGMENT STACK 'STACK' DB 100H DUP(?) STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK ;基本框架 ;延时子程序

DELAY1 PROC NEAR

MOV BX,500H PUSH CX

LOOP2: MOV CX,0FFFH WAIT1: LOOP WAIT1

DEC BX JNZ LOOP2 POP CX RET

DELAY1 ENDP

START: MOV CX,0FFFFH ;L7闪烁控制 LOOP1: MOV DX,2A0H ;灯亮

OUT DX,AL CALL DELAY1

MOV DX,2A8H ;灯灭 OUT DX,AL CALL DELAY1

LOOP LOOP1 ;循环闪烁

CODE ENDS END START

五、 实验结果 灯L7闪烁

实验二简单并行接口 一、 实验目的

掌握简单并行接口的工作原理及使用方法。(选择273进行实验)

二、 实验原理和内容

1、按下面图1-2简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。 2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。

3、接线:按图1-2-1接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门)

图1-2

三、 硬件接线图及软件程序流程图

1.硬件接线图

实验四

四、 源程序(仅实验三代码)

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,283H ;8255控制寄存器端口地址283H MOV AL,10000000B ;工作方式为0

OUT DX,AL ;初始化8255

DIGITAL:MOV DX,28AH ;熄灭数码管

MOV AL,00H OUT DX,AL MOV DX,288H ;A口显示0 MOV AL,3FH OUT DX,AL MOV DX,28AH ;C口00000001(位码) MOV AL,01H OUT DX,AL MOV DX,28AH ; MOV AL,00H OUT DX,AL MOV DX,288H ;A MOV AL,06H OUT DX,AL MOV DX,28AH ;C MOV AL,02H OUT DX,AL MOV DX,28AH ; MOV AL,00H OUT DX,AL MOV DX,288H ;A MOV AL,5BH OUT DX,AL MOV DX,28AH MOV AL,04H ;C OUT DX,AL MOV DX,28AH ; MOV AL,00H OUT DX,AL MOV DX,288H ;A MOV AL,3FH OUT DX,AL MOV DX,28AH MOV AL,08H ;C OUT DX,AL MOV DX,28AH ; MOV AL,00H

熄灭数码管 口显示2 口00000010(位码)熄灭数码管 口显示1 口00000100(位码)熄灭数码管 口显示0 口00001000(位码) 熄灭数码管 OUT DX,AL

MOV AH,01H INT 16H

JNZ EXIT ;有键盘输入,退出 JMP DIGITAL

EXIT: MOV AX,4C00H INT 21H

CODE ENDS END START

五、 实验结果

数码管显示了学号的后四位“0210”如图所示。当键盘有按键输入时退出,数码管灭。

六、 实验总结

本次实验中控制数码管显示的主要有两个端口,A口和C口,C口控制哪一路数码管亮,A口控制一路数码管亮什么数字;工作方式的选择如下图所示,D7=1表示控制寄存器中存放的是工作方式选择字,工作在方式0,A、C均为输出,B口不使用,故AL为10000000B或10000010B均可。

七、 实验收获与心得体会

初步了解可编程并行接口8255的简单应用;在实验三中8255的工作方式选择字非常重要,要弄清A、C口为输入还是输出,其次在代码中设计按键退出模块,可以使得运行更加可靠。 学习了控制数码管显示的方法,即通过两路控制,一路负责扫描决定哪一路显示,一路负责决定显示什么数字。这种思路与数电实验中VHDL语言控制数码管有异曲同工之处,让我体会到了编程思想的相同之处。

【三.可编程定时器/计数8253实验】

实验八可编程定时器/计数器(8253/8254) 一、 实验目的

学习掌握8253用作定时器的编程原理;

二、 实验原理和内容

1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。

2.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。 注意:8253输入频率应小于2MHz。

三、 硬件接线图及软件程序流程图

1. 硬件接线图

2. 软件程序流程图

四、 源程序

DATA SEGMENT

FENPIN DW 0001H,3906,3472,3125,2932,2604,2344,2083,1953;分频比

DIGITAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;数码管 MUSIC DB 0,3,2,1,2,3,3,3,0,2,2,2,0,3,5,5,0,3,2,1,2,3,3,3,1,2,2,3,2,1,0,5,0,1,0 ;存放播放的乐曲音符

NUM DB 00H,070H,0B0H,0D0H,0E0H ;检测键盘输入(00h=00000000;070h=01110000;0b0h=10110000;0d0h=11010000;0e0h=11100000)

DATA ENDS

STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK

;延时子程序1

DELAY PROC NEAR PUSH CX

MOV CX,100H WAIT0: LOOP WAIT0 POP CX RET DELAY ENDP

;延时子程序2

DELAY1 PROC NEAR PUSH CX

MOV CX,0FFFFH WAIT1: LOOP WAIT1 POP CX RET DELAY1 ENDP

;获取键盘输入值的子程序 KEY PROC NEAR

PUSH AX ;保护现场 PUSH CX PUSH DX

MOV CX,00H ;从第一行开始扫描 CHECK: MOV DX,28AH ;C口地址给DX 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 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 GOT NEXT: INC CX CMP CX,05H JNZ JUMP1

MOV CX,01H ;修改变量扫描下一行 JUMP1: JMP CHECK NEXT1: MOV BX,04H JMP GOT

NEXT2: MOV BX,03H JMP GOT

NEXT3: MOV BX,02H ;计算按下键盘的数值 GOT: SUB CX,01H MOV AL,CL MOV DL,04H MUL DL ADD BL,AL

SUB BL,01H ;此时BX中所存即为对应的偏移量 POP DX ;恢复现场 POP CX POP AX RET KEY ENDP ;主程序

START: MOV AX,DATA MOV DS,AX ;8253初始化 MOV DX,283H MOV AL,36H OUT DX,AL ;8255初始化

MOV DX,28BH MOV AL,81H ;C口输入 OUT DX,AL

MOV DX,289H ;B口位选数码管 MOV AL,01H OUT DX,AL ;扫描键盘

LOOP1: CALL KEY

CMP BX,0 ;按0播放音乐 JZ PLAY0

CMP BX,9 ;按9退出

JZ EXIT ;按1~8发出对应音

MOV CX,BX

MOV BX,OFFSET DIGITAL ;数码管显示音符 ADD BX,CX MOV AL,[BX]

MOV DX,288H ;A口输出 OUT DX,AL ;播放该音符

MOV BX,OFFSET FENPIN MOV AX,CX ADD AX,AX ADD BX,AX

;计数,先低八位后高八位 MOV AX,[BX] MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL CALL DELAY1 CALL DELAY1

MOV DX,28AH ;C口输入 IN AL,DX ;检测键盘是否弹起

MOV AH,AL LOOP2: CALL DELAY IN AL,DX CMP AL,AH JZ LOOP2

;初始化8253,停止播放音乐 MOV AX,0H MOV DX,283H MOV AL,36H OUT DX,AL JMP LOOP1

;播放音乐

PLAY0: MOV CX,01H PLAY: PUSH CX ;读取音符,存于CX中

MOV BX,OFFSET MUSIC ADD BX,CX MOV AL,[BX]

MOV CL,AL MOV CH,0H ;数码管显示

MOV BX,OFFSET DIGITAL ADD BX,CX MOV AL,[BX] MOV DX,288H OUT DX,AL ;播放该乐符

MOV BX,OFFSET FENPIN 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,90H LOOP3: CALL DELAY1 DEC AX

JNZ LOOP3

;乐曲未结束时,CX加1 INC CX

CMP CX,28H;共40个音符 JNZ JUM JMP LOOP1 JUM: JMP PLAY

EXIT: MOV AL,0 MOV DX,288H OUT DX,AL MOV AX,4C00H INT 21H

CODE ENDS END START

五、 实验结果

1. 按小键盘的0,播放预置音乐,数码管显示音符对应的数字1~8; 2. 按小键盘的1~8,分别发出do,re,mi,fa,so,la,si,高音do,数码管

显示按下的音符对应的1~8数字;

3. 按小键盘的9,数码管熄灭,放音停止,返回dos;

六、 实验总结

1. 在开始用MUSIC存乐谱实现了代码的多用性,可以直接在开头改变对

应数字来实现不同乐曲的演奏;

2. 开头用DIGITAL存数码管需要显示的0~8数字,数码管显示原理参考

实验三和四,不同点在于8255中C口为输入,B口位选数码管仅第一路亮;

3. 实验难点主要在小键盘与数码管,8254的连接控制。获得键盘输入值

的子程序参考了实验五的键盘扫描,其原理为先给第一行一个低电平,然后检测哪一列为低电平如第三列,则为坐标(1,3)的按键被按下。若所有列均无低电平则给第二行低电平重复上述检测; 4. 在代码中需加入延时程序以保证音乐播放的准确性;

5. 按键要加入防抖程序。原理为检测按键是否达到一定时长,如果达到

则为按键,否则判断为误触

七、 实验收获与心得体会

通过本次试验熟悉了可编程定时器/计时器的使用。通过键盘,8254,数码管的组合实现简单的电子琴功能。在本次试验中只使用了0至9十个按键,有机会可以完善,如不同的按键可以播放不同的乐曲等。此外,本实验中防抖非常重要,第一次连接试验箱试验时没有写入防抖程序导致按键发音不对,后加入按键防抖程序问题得以解决。这让我想到了数电实验用VHDL写打地鼠程序时也需要写防抖程序,体会到了编程的相通性以及编程中必须要面面俱到才能保证结果的正确稳定。

八、 思考题

写出8253计数初值,输入频率和输出频率的关系: 答:输出频率 = 输入频率/8253计数初值

【四.串行通讯接口8251实验】

实验十六串行通讯8251 一、 实验目的

1、了解串行通讯的基本原理。

2、掌握串行接口芯片8251的工作原理和编程方法。

二、 实验原理和内容

基础功能:

1、按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。

2、编程: 从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。)实现自发自收。 扩展功能:

双机通信,将发送端用小键盘发送数据,接收端用数码管显示接收的数据。

三、 硬件接线图及软件程序流程图

1. 硬件接线图(引用讲义)

2.软件程序流程图(引用讲义)

四、 源程序

DATA SEGMENT

STRING DB 'TRANSLATE ','$' STRING1 DB 'RECEIVE ','$' STRING2 DB 0DH,0AH,'$'

DATA ENDS

STACK SEGMENT STACK 'SATCK' DB 100 DUP(?) STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

;延时子程序

DELAY PROC NEAR PUSH CX

MOV CX,100H WAIT0: LOOP WAIT0 POP CX RET DELAY ENDP ;开始

START: MOV MOV ;8254初始化

MOV MOV OUT CALL DELAY

MOV MOV OUT CALL DELAY 初始化

MOV MOV OUT NOP

CALL DELAY

MOV OUT MOV OUT CALL DELAY

发送数据

GOON: MOV IN TEST JZ

;显示提示语句

MOV MOV INT

MOV AX,DATA DS,AX DX,283H

AL,16H ;0号计数器,读低字节,方式3 DX,AL DX,280H ;计数器地址为280H,计数初值为52 AL,34H DX,AL DX,2B9H ;控制端口 AL,40H ;内部复位命令 DX,AL AL,5EH ;方式控制字(01011110) DX,AL

AL,37H ;命令控制字(00110111) DX,AL DX,2B9H ;读状态字 AL,DX AL,01H

GOON;缓冲区为空显示提示语句否则继续检测 AH,09H

DX,OFFSET STRING 21H AH,01H

;8251; INT 21H ;检测是否为ESC键

CMP AL,1BH JZ EXIT INC AL;加1

MOV DX,2B8H OUT DX,AL

;接收数据

RECEIVE: MOV DX,2B9H IN AL,DX TEST AL,02H JZ RECEIVE

;显示提示语句

MOV AH,09H

MOV DX,OFFSET STRING2 INT 21H MOV AH,09H

MOV DX,OFFSET STRING1 INT 21H

MOV DX,2B8H

IN AL,DX MOV DL,AL

MOV AH,02H ;显示接收的数据 INT 21H MOV AH,09H

MOV DX,OFFSET STRING2 INT 21H

JMP GOON

EXIT: MOV AX,4C00H

INT 21H

CODE ENDS END START

五、 实验结果

键盘输入后加一发送,在屏幕上显示对应输入字符ASCII码加一后的字符,如:输入a显示b,输入1显示2。按ESC键后退出。

六、 实验总结

1.8254初始化选0号计数器,只写读写低8位,选择方式3,计数初值

为二进制;

2.方式控制字的确定如下图,异步方式、1个停止位、奇校验位,、8位数据、波特因子为16,故为5EH;

3.命令控制字的确定重点在于接收和发送都允许;

4.接收和发送数据前先检查状态字,看缓冲区是否为空; 5.单机通信中控制字后需要加入延时程序

七、 实验收获与心得体会

通过本次试验,让我对8251有了更深的了解。可以将书本上的理论应用到实际,更加充分的理解了芯片的原理及其使用。 本次试验中双机通信的扩展内容调试了很长时间,数码管必须等接收方按键后才可显示,无法做到实时显示故没有贴出代码,希望以后能有机会改进。

通过这四次实验,我在编程、调试、实验的过程中对于汇编语言有了更深的了解,对于微原课本上的原理理论也有了更好的理解。

最后,谢谢老师给予的指导,希望有机会能更多的接触此类实验。

八、 思考题

在实验中,你如何确定RxC,TxC的值,写出计算公式

答:RXC=TXC=8253输出时钟频率=8251波特率*波特率因子

本文来源:https://www.bwwdw.com/article/w715.html

Top