北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx

上传人:b****7 文档编号:26160469 上传时间:2023-06-17 格式:DOCX 页数:22 大小:574.76KB
下载 相关 举报
北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx_第1页
第1页 / 共22页
北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx_第2页
第2页 / 共22页
北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx_第3页
第3页 / 共22页
北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx_第4页
第4页 / 共22页
北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx

《北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx》由会员分享,可在线阅读,更多相关《北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx

北邮通信工程微机原理与接口技术硬件实验实验报告

 

微机原理硬件实验报告

 

学院:

信息与通信工程学院

专业:

通信工程

班级:

学号:

班内序号:

姓名:

实验一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范围内,译码器选中,必有一根译码线输出负脉冲。

例如:

执行下面两条指令

MOVDX,2A0H

OUTDX,AL(或INAL,DX)

Y4输出一个负脉冲;

执行下面两条指令

MOVDX,2A8H

OUTDX,AL(或INAL,DX)

Y5输出一个负脉冲。

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

2、接线:

Y4/IO地址接CLK/D触发器

Y5/IO地址接CD/D触发器

D/D触发器接SD/D角发器接+5V

Q/D触发器接L7(LED灯)或逻辑笔

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

1、硬件接线图

2、软件程序流程图

 

四、源程序

DATASEGMENT

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100HDUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

DELAY1PROCNEAR;延时子程序

MOVBX,500H

PUSHCX

LOOP2:

MOVCX,0FFFH

WAIT1:

LOOPWAIT1

DECBX

JNZLOOP2

POPCX

RET

DELAY1ENDP

;L7闪烁

START:

MOVCX,0FFFFH;最大可循环次数

LOOP1:

MOVDX,2A0H;灯亮

OUTDX,AL

CALLDELAY1

MOVDX,2A8H;灯灭

OUTDX,AL

CALLDELAY1

LOOPLOOP1;循环闪烁

CODEENDS

ENDSTART

五、实验结果

灯L7闪烁,一段时间后停止。

 

六、实验总结

1、采用的是软件延时,更改延时子程序中给BX、CX的赋值可以改变LED闪烁的频率;

2、灯的闪烁并不是无限的,在主程序中给CX赋了最大值0FFFFH,循环完这个次数后就停止循环了。

另外,若给CX赋予0,会比赋予0FFFFH多循环一次。

七、实验收获与心得体会

“纸上得来终觉浅,绝知此事要躬行。

”不得不说,虽然在理论课上已经学到了很多知识,但第一次面对硬件的连接还是有种无从下手的感觉。

看到编的程序通过硬件得到了实现,不仅更直观的感受到了编程逻辑,而且还提高了对微机原理这门课程的兴趣。

 

实验四七段数码管

一、实验目的

掌握数码管显示数字的原理

 

二、实验原理和内容

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、静态显示:

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

5、接线:

PA7~PA0/8255接dp~a/LED数码管

PC3~PC0/8255接S3~S0/LED数码管

CS/8255接Y1/IO地址

 

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

1、硬件接线图

2、软件程序流程图

四、源程序

DATASEGMENT

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVDX,28BH;8255控制寄存器端口地址28BH

MOVAL,80H

OUTDX,AL;初始化8255

DIGITAL:

MOVDX,28AH;熄灭数码管

MOVAL,00H

OUTDX,AL

MOVDX,288H;A口显示2

MOVAL,5BH

OUTDX,AL

MOVDX,28AH;选最低位数码管

MOVAL,01H

OUTDX,AL

MOVDX,28AH;熄灭数码管

MOVAL,00H

OUTDX,AL

MOVDX,288H;A口显示5

MOVAL,6DH

OUTDX,AL

MOVDX,28AH;选第二位数码管

MOVAL,02H

OUTDX,AL

MOVDX,28AH;熄灭数码管

MOVAL,00H

OUTDX,AL

MOVDX,288H;A口显示4

MOVAL,66H

OUTDX,AL

MOVDX,28AH

MOVAL,04H;选第三位数码管

OUTDX,AL

MOVDX,28AH;熄灭数码管

MOVAL,00H

OUTDX,AL

MOVDX,288H;A口显示0

MOVAL,3FH

OUTDX,AL

MOVDX,28AH

MOVAL,08H;C口00001000(位码)

OUTDX,AL

MOVDX,28AH;选第四位数码管

MOVAL,00H

OUTDX,AL

MOVAH,01H

INT16H

JNZEXIT;ZF=0说明有按键输入,故退出

JMPDIGITAL

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

 

五、实验结果

数码管显示0452,有按键输入则退出。

 

六、实验总结

在这个循环中,要注意切换数码管的选位时,要先将输出的段位清零再进行切换,再给输出段位赋予新值,否则会出现数码管显示错误,即亮度降低、且无法正确显示数字。

 

七、实验收获与心得体会

有时会出现“明明感觉自己写的代码什么问题都没有,但是就是无法正确得到想要的结果”。

这种时候不妨换种角度思考,也许会收获新思路。

不过还是想要一个和小学期那样的可以单步运行,并且可以检视内存变化情况的软件。

数码管本身其实很简单,给予选位和选段之后就可以显示,但在数字电路实验与本实验中,代码的思路是不同的,这点要予以区分和注意,不能生搬硬套。

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

一、实验目的:

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

 

二、实验原理及内容

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码数

3、实验要求

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

音符频率对照

4、扩展部分

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

注意:

8253输入频率应小于2MHz。

 

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

1、硬件接线图

2、软件程序流程图

 

 

四、源程序

DATASEGMENT

FENPINDW0001H,3906,3472,3125,2932,2604,2344,2083,1953;分频比

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

MUSICDB5,5,6,5,4,3,4,5,2,3,4,3,4,5,5,6,5,4,3,4,5,2,5,5,3,1,1;存放播放的乐曲音符

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

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

;延时子程序

DELAYPROCNEAR

PUSHCX

MOVCX,100H

WAIT0:

LOOPWAIT0

POPCX

RET

DELAYENDP

;延时子程序2

DELAY1PROCNEAR

PUSHCX

MOVCX,0FFFFH

WAIT1:

LOOPWAIT1

POPCX

RET

DELAY1ENDP

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

KEYPROCNEAR

PUSHAX;保护现场

PUSHCX

PUSHDX

MOVCX,01H

CHECK:

MOVDX,28AH;C口地址给DX

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;此时BX中所存即为对应的偏移量

POPDX;恢复现场

POPCX

POPAX

RET

KEYENDP

 

;主程序

START:

MOVAX,DATA

MOVDS,AX

;8253初始化

MOVDX,283H

MOVAL,36H

OUTDX,AL

;8255初始化

MOVDX,28BH

MOVAL,81H;C口输入

OUTDX,AL

MOVDX,289H;B口位选数码管

MOVAL,01H

OUTDX,AL

;扫描键盘

LOOP1:

CALLKEY

CMPBX,0;按0播放音乐

JZPLAY0

CMPBX,9;按9退出

JZEXIT

;按1~8发出对应音

MOVCX,BX

MOVBX,OFFSETDIGITAL;数码管显示音符

ADDBX,CX

MOVAL,[BX]

MOVDX,288H;A口输出

OUTDX,AL

;播放该音符

MOVBX,OFFSETFENPIN

MOVAX,CX

ADDAX,AX

ADDBX,AX

;计数,先低八位后高八位

MOVAX,[BX]

MOVDX,280H

OUTDX,AL

MOVAL,AH

OUTDX,AL

CALLDELAY1

CALLDELAY1

MOVDX,28AH;C口输入

INAL,DX

;检测键盘是否弹起

MOVAH,AL

LOOP2:

CALLDELAY

INAL,DX

CMPAL,AH

JZLOOP2

;初始化8253,停止播放音乐

MOVAX,0H

MOVDX,283H

MOVAL,36H

OUTDX,AL

JMPLOOP1

;播放音乐

PLAY0:

MOVCX,01H

PLAY:

PUSHCX

;读取音符,存于CX中

MOVBX,OFFSETMUSIC

ADDBX,CX

MOVAL,[BX]

MOVCL,AL

MOVCH,0H

;数码管显示

MOVBX,OFFSETDIGITAL

ADDBX,CX

MOVAL,[BX]

MOVDX,288H

OUTDX,AL

;播放该乐符

MOVBX,OFFSETFENPIN

MOVAX,CX

ADDAX,AX

ADDBX,AX

;计数,先低八位后高八位

MOVAX,[BX]

MOVDX,280H

OUTDX,AL

MOVAL,AH

OUTDX,AL

POPCX

;延时,持续播放

MOVAX,90H

LOOP3:

CALLDELAY1

DECAX

JNZLOOP3

;乐曲未结束时,CX加1

INCCX

CMPCX,1BH;共27个音符

JNZJUM

JMPLOOP1

JUM:

JMPPLAY

EXIT:

MOVAL,0

MOVDX,288H

OUTDX,AL

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

 

五、实验结果

1、按键盘的0时,播放预置音乐《Londonbridgeisfallingdown》,同时数码管显示相应的音符;

2、按键盘的9时,熄灭数码管,回到dos;

3、按键盘的1~8时,分别发出do,re,mi,fa,so,la,si,高音do,数码管显示按下的音符;

 

六、实验总结

1、在子程序KEY中,“ANDAL,0FH”这一语句十分重要。

因为AX的高四位并不是全0,需要用这一句来将AH清零,这样当按下对应按键时,才能准确把列位置传送给8255。

例如,如果将这一句话注释掉,运行结果将是一直循环播放存储的乐曲,按下键盘任何键都没有反应。

这就是因为程序一直在播放乐曲的子程序中循环而导致的;

2、在子程序KEY中,判断键盘列位置的跳跃使用十分频繁,应小心谨慎方不致出错;

3、在调整延时程序时,应保证音乐播放时长适中,符合人按键时长习惯。

 

七、实验收获与心得体会

本次实验最大的收获是与同学讨论,明白了语句“ANDAL,0FH”的功能。

另外,如何判断持续按键?

如何改变I/O的输出?

这里的防抖与数字电路实验中的防抖代码有什么相似和不同?

在老师的问题中,我得以进一步思考。

 

八、思考题

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

答:

输出频率=输入频率(1MHZ)/8253计数初值

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

当前位置:首页 > 高中教育 > 其它课程

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

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