北京邮电大学微原硬件实验报告.docx

上传人:b****5 文档编号:8169543 上传时间:2023-01-29 格式:DOCX 页数:38 大小:670.48KB
下载 相关 举报
北京邮电大学微原硬件实验报告.docx_第1页
第1页 / 共38页
北京邮电大学微原硬件实验报告.docx_第2页
第2页 / 共38页
北京邮电大学微原硬件实验报告.docx_第3页
第3页 / 共38页
北京邮电大学微原硬件实验报告.docx_第4页
第4页 / 共38页
北京邮电大学微原硬件实验报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

北京邮电大学微原硬件实验报告.docx

《北京邮电大学微原硬件实验报告.docx》由会员分享,可在线阅读,更多相关《北京邮电大学微原硬件实验报告.docx(38页珍藏版)》请在冰豆网上搜索。

北京邮电大学微原硬件实验报告.docx

北京邮电大学微原硬件实验报告

 

微原硬件实验报告

 

班级:

学号:

班内序号:

姓名:

 

实验一、二基本的I/O实验

一、实验目的

1、掌握I/O地址译码电路的工作原理。

2、掌握简单并行接口的工作原理及使用方法。

二、实验原理及内容

1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。

译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:

280H~287H,Y1:

288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。

例如:

执行下面两条指令

MOVDX,2A0H

OUTDX,AL(或INAL,DX)

Y4输出一个负脉冲,执行下面两条指令

MOVDX,2A8H

OUTDX,AL(或INAL,DX)

Y5输出一个负脉冲。

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

2、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。

74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。

3、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。

4、按下面图4-2-2简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。

74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。

5、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。

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

图1:

实验一的硬件接线图

图2:

实验二的硬件接线图

图3:

实验二的程序流程图

四、源程序

1、实验一源程序

DATASEGMENT

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100HDUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

;延时子程序

DELAYPROCNEAR

MOVBX,500

PUSHCX

LOOP2:

MOVCX,0FFFH

WAIT:

LOOPWAIT

DECBX

JNZLOOP2

POPCX

RET

DELAYENDP

START:

MOVCX,0FFFFH

;二极管闪烁部分

LOOP1:

MOVDX,2A0H;灯亮

MOVAL,0FFH

OUTDX,AL

CALLDELAY

MOVDX,2A8H;灯灭

MOVAL,0

OUTDX,AL

CALLDELAY

LOOPLOOP1

CODEENDS

ENDSTART

2、实验二的源程序

DATASEGMENT

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAH,1;键盘输入

INT21H

CMPAL,27;检测是否为ESC键

JZEXIT

MOVDX,2A8H;输出

OUTDX,AL

JMPSTART

;返回DOS

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

五、实验结果

1、实验一:

二极管闪烁显示

2、实验二:

键盘输入,然后二极管显示键盘输入的ASCⅡ码

六、实验总结

本实验遇到的问题主要是:

1、二极管显示不正常,主要是延时的问题,调整一下就好了。

七、实验收获与心得体会

这次实验的要点是对I/O接口译码电路的理解以及使用。

我们测试了外设功能,这使我们了解了地址与端口的对应情况,从而明确了程序编写的流程和注意事项。

通过该译码电路实验,我掌握了地址译码电路的设计方法和实现原理,对硬件的I/O接口技术有了进一步的认识。

这次实验也为以后的实验打下了基础,特别是,应先理解了译码电路的工作原理,然后才能进行编程。

实验三、四、五可编程并行接口8255实验

一、实验目的

1、通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。

2、掌握数码管显示数字的原理。

3、掌握8255控制键盘及显示电路的基本功能及编程方法。

4、掌握一般键盘和显示电路的工作原理。

二、实验原理及内容

实验三:

1、实验电路如图4-3-1,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。

2、编程从8255C口输入数据,再从A口输出。

实验四:

1、静态显示:

按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接地。

实验五:

1、编程:

使得在小键盘上每按一个健,4位数码管上显示出相应字符。

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

图1:

实验三的硬件接线图

图2:

实验四的硬件接线图

图3:

实验三的程序流程图

图4:

实验四的程序流程图

四、源程序

1、实验三源程序

DATASEGMENT

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVDX,28BH;8255初始化

MOVAL,89H

OUTDX,AL

LOOP1:

MOVDX,28AH

INAL,DX

MOVDX,288H

OUTDX,AL

JMPLOOP1

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2、实验四源程序

(1)显示学号

DATASEGMENT

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVDX,28BH;8255初始化

MOVAL,80H

OUTDX,AL

MOVCX,30

VIEW:

MOVDX,28AH;第一个数码管显示

MOVAL,00H

OUTDX,AL

MOVDX,288H

MOVAL,6DH

OUTDX,AL

MOVDX,28AH

MOVAL,01H

OUTDX,AL

;第二个数码管显示

MOVDX,28AH

MOVAL,00H

OUTDX,AL

MOVDX,288H

MOVAL,6FH

OUTDX,AL

MOVDX,28AH

MOVAL,02H

OUTDX,AL

;第三个数码管显示

MOVDX,28AH

MOVAL,00H

OUTDX,AL

MOVAL,0

MOVDX,288H

MOVAL,07H

OUTDX,AL

MOVDX,28AH

MOVAL,04H

OUTDX,AL

;第四个数码管显示

MOVDX,28AH

MOVAL,00H

OUTDX,AL

MOVAL,0

MOVDX,288H

MOVAL,3FH

OUTDX,AL

MOVDX,28AH

MOVAL,08H

OUTDX,AL

循环显示

JZVIEW

;返回DOS

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(2)循环显示数字0~99

DATASEGMENT

TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数码管显示

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVDX,28BH;8255初始化

MOVAL,80H

OUTDX,AL

;循环显示

MOVBX,0H;控制重新从0开始计数的变量

LOOP1:

MOVCX,100;循环扫描数码管让两个数码管都显示

VIEW:

MOVDX,28AH

MOVAL,00H

OUTDX,AL

MOVDX,288H

;计算十位数,并显示

PUSHBX

MOVAX,BX

MOVBL,0AH

DIVBL

MOVAL,AH

MOVBX,OFFSETTABLE

MOVAH,0H

ADDBX,AX

MOVAL,[BX]

OUTDX,AL

POPBX

MOVDX,28AH

MOVAL,01H

OUTDX,AL

;计算个位数显示

MOVDX,28AH

MOVAL,00H

OUTDX,AL

MOVDX,288H

PUSHBX

MOVAX,BX

MOVBL,0AH

DIVBL

MOVBX,OFFSETTABLE

MOVAH,0H

ADDBX,AX

MOVAL,[BX]

OUTDX,AL

POPBX

MOVDX,28AH

MOVAL,02H

OUTDX,AL

LOOPVIEW

;修改变量显示下一个数

INCBL

CMPBL,64H

JNZJUMP1

MOVBL,0H

JUMP1:

JMPLOOP1

;返回DOS

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3.实验五的源程序

DATASEGMENT

TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,

DB39H,5EH,79H,71H;数码管显示

NUMDB00H,070H,0B0H,0D0H,0E0H;用于扫描键盘

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

;延时子程序

DELAYPROCNEAR

PUSHCX

MOVCX,100H

WAIT1:

LOOPWAIT1

POPCX

RET

DELAYENDP

;获取键盘的输入数字的子程序,通过BX寄存器传递

KEYBOPROCNEAR

PUSHAX;保护现场

PUSHCX

PUSHDX

MOVCX,01H;控制扫描4次

CHECK:

MOVDX,28AH;输出一行置低电平

MOVBX,OFFSETNUM

ADDBX,CX

MOVAL,[BX]

OUTDX,AL

;防抖

INAL,DX;判断是否有键盘按下

MOVAH,AL

CALLDELAY

INAL,DX

CMPAL,AH

JNZCHECK

;判断是那一列按下了

ANDAL,0FH

CMPAL,0FH

JZNEXT

CMPAL,0EH

JZNEXT1

CMPAL,0DH

JZNEXT2

CMPAL,0BH

JZNEXT3

MOVBX,01H

JMPGOT

NEXT:

INCCX;修改变量扫描下一行

CMPCX,05H

JNZJUMP1

MOVCX,01H

JUMP1:

JMPCHECK

NEXT1:

MOVBX,04H

JMPGOT

NEXT2:

MOVBX,03H

JMPGOT

NEXT3:

MOVBX,02H

;计算按下键盘的数值

GOT:

SUBCX,01H

MOVAL,CL

MOVDL,04H

MULDL

ADDBL,AL

SUBBL,01H

POPDX;恢复现场

POPCX

POPAX

RET

KEYBOENDP

;主程序

START:

MOVAX,DATA

MOVDS,AX

;8255初始化

MOVDX,28BH

MOVAL,81H

OUTDX,AL

MOVDX,289H

MOVAL,01H

OUTDX,AL

;扫描键盘

LOOP1:

CALLKEYBO

;数码管显示字符

MOVAX,BX

MOVBX,OFFSETTABLE

ADDBX,AX

MOVAL,[BX]

MOVDX,288H

OUTDX,AL

MOVDX,28AH

INAL,DX

;检测键盘弹起

MOVAH,AL

LOOP2:

CALLDELAY

INAL,DX

CMPAL,AH

JZLOOP2

JMPLOOP1

;返回DOS

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

五、实验结果

1、实验三:

打开的那个开关对应的二极管亮。

2、实验四:

(1)四个数码管稳定的显示学号:

0795;

(2)两个数码管循环显示0~99数字;

3、实验五:

键盘输入数字,数码管显示相应的的输入的数字。

六、实验总结

实验中主要遇到了下面的问题:

1、数码管显示总是有阴影,不清晰。

主要原因是数码管循环扫描的速度太快,以及视觉的停留效应。

解决办法发是显示下一个字符之前先对数码管进行初始化,使之不显示;

2、键盘的输入有错误,按键有时会获取错误数字。

主要是由于是键盘经常有毛刺,需要防抖。

通过先检测,延时,再检测的方式进行防抖,排除键盘抖动。

七、实验收获与心得体会

本次实验中,我们使用8255A并行接口芯片和数码管实现了一个数码管的静态和动态显示字符的程序。

为了实现同时显示不同字符,就要通过扫描(依次点亮数码管)的方式来实现,这就要给CAT信号依次赋值,并且在扫描的过程中要用到延时。

动态显示的程序设计思想与静态时的大体相同,只是对动态的每一种状态进行一段时间的静态显示然后换状态而已,所以通过一个二层循环就能很好地解决这个问题。

通过这次实验,我在编程过程中学到了很多东西,不但巩固了书本的知识,而且体会到了编程的过程中思维必须很缜密,否则写出来的程序常会导致无法运行甚至死机。

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

一、实验目的

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

二、实验原理及内容

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

2.扩展部分:

利用小键盘实现弹琴功能,并显示弹奏的乐谱。

注意:

8253输入频率应小于2MHz。

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

图1:

硬件连接图

图2:

程序流程图

四、给出源程序

1、播放音乐

程序:

DATASEGMENT

NOTEDW0001H,3906,3472,3125,2932,2604,2344,2083,1953;频率

TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数码管

MUSICDB3,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,

DB5,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

;存放的乐符

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

;延时子程序

DELAYPROCNEAR

PUSHCX

MOVCX,0FFFFH

WAIT1:

LOOPWAIT1

POPCX

RET

DELAYENDP

;主程序

START:

MOVAX,DATA

MOVDS,AX

;8254初始化

MOVDX,283H

MOVAL,36H

OUTDX,AL

;8255初始化

MOVDX,28BH

MOVAL,80H

OUTDX,AL

MOVDX,28AH

MOVAL,01H

OUTDX,AL

MOVCX,01H

;播放音乐

SPEAK:

PUSHCX;保护现场

;读取乐符

MOVBX,OFFSETMUSIC

ADDBX,CX

MOVAL,[BX]

MOVCL,AL

MOVCH,0H

;数码管显示

MOVBX,OFFSETTABLE

ADDBX,CX

MOVAL,[BX]

MOVDX,288H

OUTDX,AL

;播放该乐符

MOVBX,OFFSETNOTE

MOVAX,CX

ADDAX,AX

ADDBX,AX

MOVAX,[BX]

MOVDX,280H

OUTDX,AL

MOVAL,AH

OUTDX,AL

POPCX

;延时,持续播放

MOVAX,90H

LOOP1:

CALLDELAY

DECAX

JNZLOOP1

;判读继续播放还是重新播放

INCCX

CMPCX,41H

JNZJUM

MOVCX,01H

JUM:

JMPSPEAK

CODEENDS

ENDSTART

2、拓展:

小键盘弹奏

DATASEGMENT

NOTEDW0001H,3906,3472,3125,2932,2604,2344,2083,1953;频率

TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数码管

NUMDB00H,070H,0B0H,0D0H,0E0H;检测键盘输出

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

;延时子程序

DELAYPROCNEAR

PUSHCX

MOVCX,100H

WAIT1:

LOOPWAIT1

POPCX

RET

DELAYENDP

;获取键盘输入值的子程序,具体注释

KEYBOPROCNEAR

PUSHAX

PUSHCX

PUSHDX

MOVCX,01H

CHECK:

MOVDX,28AH

MOVBX,OFFSETNUM

ADDBX,CX

MOVAL,[BX]

OUTDX,AL

INAL,DX

MOVAH,AL

CALLDELAY

INAL,DX

CMPAL,AH

JNZCHECK

ANDAL,0FH

CMPAL,0FH

JZNEXT

CMPAL,0EH

JZNEXT1

CMPAL,0DH

JZNEXT2

CMPAL,0BH

JZNEXT3

MOVBX,01H

JMPGOT

NEXT:

INCCX

CMPCX,05H

JNZJUMP1

MOVCX,01H

JUMP1:

JMPCHECK

NEXT1:

MOVBX,04H

JMPGOT

NEXT2:

MOVBX,03H

JMPGOT

NEXT3:

MOVBX,02H

GOT:

SUBCX,01H

MOVAL,CL

MOVDL,04H

MULDL

ADDBL,AL

SUBBL,01H

POPDX

POPCX

POPAX

RET

KEYBOENDP

;主程序

START:

MOVAX,DATA

MOVDS,AX

;8254初始化

MOVDX,283H

MOVAL,36H

OUTDX,AL

;8255初始化

MOVDX,28BH

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1