北邮微机原理硬件实验报告.docx
《北邮微机原理硬件实验报告.docx》由会员分享,可在线阅读,更多相关《北邮微机原理硬件实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
北邮微机原理硬件实验报告
微机原理
硬件实验报告
实验一I/O地址译码
一、实验目的
1、掌握I/O地址译码电路的工作原理。
二、实验内容及原理
实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:
280H~287H,Y1:
288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
根据图1-1,我们可以确定A9~A3,AEN,IOW,IOR的值。
要使译码电路正常工作,必须使处于低电平有效。
因而可以确定A6=A8=0,A7=A9=1,AEN=0,IOW与IOR不可同时为1(即不能同时读写)。
当要从Y4输出低脉冲时,A5A4A3=100;从Y5输出时,A5A4A3=101。
综上所述,Y4输出时,应设置值2A0H(A9~A0=1010100000B);Y5输出时,应设置值2A8H(A9~A0=1010101000B)。
执行下面两条指令
MOVDX,2A0H
OUTDX,AL(或INAL,DX)
Y4输出一个负脉冲到D触发器的CLK上,因为D=1(接了高电平+5V),所以Q被赋值为1.
延时一段时间(delay);
执行下面两条指令;
MOVDX,2A8H
OUTDX,AL(或INAL,DX)
Y5输出一个负脉冲到CD,D触发器被复位,Q=0。
再延时一段时间,然后循环上述步骤。
利用这两个个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
三、硬件接线图与软件流程图
硬件接线:
Y4/IO地址接CLK/D触发器
Y5/IO地址接C/D触发器
D/D触发器接SD/D角发器接+5V
Q/D触发器接L7(LED灯)或逻辑笔
软件流程图:
四、源程序
OUTPORT1EQU2A0H;预置,方便修改
OUTPORT2EQU2A8H
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,OUTPORT1;根据原理图设定A9~A0的值(Y4)
OUTDX,AL;让译码器Y4口输出一个负脉冲
CALLDELAY;延时
MOVDX,OUTPORT2;根据原理图设定A9~A0的值(Y5)
OUTDX,AL;让译码器Y5口输出一个负脉冲
CALLDELAY;延时
MOVAH,1;调用1号DOS功能,等待键盘输入
INT16H
JESTART;若有键盘输入则退出程序,否继续循环
MOVAH,4CH
INT21H
DELAYPROCNEAR;延时子程序
MOVBX,200;时延长度(200)
A:
MOVCX,0
B:
LOOPB
DECBX
JNEA
RET
DELAYENDP
CODEENDS
ENDSTART
五、实验结果
LED灯处于闪烁状态,键盘有输入后,成功退出。
六、实验总结
遇到的问题:
需要合理设置时延值。
七、实验收获与心得体会
这是第一次进行微机原理的硬件实验,熟悉了使用的实验系统,学习了最基本的硬件测试方法,学会了在实验的环境下进行单步调试,对接口的地址、LED灯的控制有了初步的了解。
为后续实验做了准备。
实验二简单并行接口
一、实验目的
1、掌握简单并行接口的工作原理及使用方法。
二、实验内容及原理
1、按下面图2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。
74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。
2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。
三、硬件接线图与软件流程图
图2-1
软件流程图:
四、源程序
CODESEGMENT
ASSUMECS:
CODE
START:
MOVCX,0FFH
LOOP1:
MOVAH,1
INT21H
CMPAL,1BH
JZEND1
MOVDX,2A8H
OUTDX,AL
LOOPLOOP1
END1:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验结果
键盘输入一个字符,LED灯显示相应的ASCII码。
键入ESC后成功退出。
六、实验收获与心得体会
本次实验让我对硬件实验有了更加深刻的理解,硬件实验需要经常读取硬件的状态,根据其状态采取相应的控制方案,同时需要向接口输出数据和控制信息,驱动硬件正常工作。
通过键盘的输入还记下了一些字符的ASCII码。
实验三可编程并行接口8255
一、实验目的
1、通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。
二、实验内容及原理
1、8255芯片工作原理:
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位(如图3-1),存放在8255控制寄存器中。
最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。
根据上图,方式控制字应为:
10000000B,即80H。
8255控制寄存器端口地址--28BH,A口的地址--288H,B口的地址--289H,C口的地址--28AH。
3)C口置/复位控制字
8255的C口可进行位操作,即:
对口可进行位操作,即:
对8255C口的每一位进行置或清零操作,该操通过设置C口置/复位字实现的(图)。
复位字实现的(图)。
C口置/复位字共8位,各位含义如下:
2、8255A的控制信号与传输动作的对应关系
3、命令字与初始化编程
8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:
①向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式;
②当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。
这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求;
注意:
“C口置0/置1控制字”虽然是对C口进行操作,但是该控制器是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。
③向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据”。
三、硬件接线图与软件流程图
硬件接线图:
软件流程图
四、源代码
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,89H
MOVDX,28BH
OUTDX,AL
LOOP1:
MOVDX,28AH
INAL,DX
MOVDX,288H
OUTDX,AL
MOVAH,1
INT16H
JZLOOP1
CODEENDS
ENDSTART
五、实验结果
将一个拨码开关推上去,其对应的LED灯亮。
六、实验收获与心得体会
这个实验比较简单,代码也很简短,但通过这个实验对8255有了初步的了解,对于接下来的实验有很大帮助。
实验四七段数码管
一、实验目的
1、掌握数码管显示字的原理。
二、实验内容及原理
1、静态显示:
将8255的A口PA0~PA7分别与七段数码管的驱动输入分别与七段数码管的驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号后四位。
(或编上循环“程在数码管显示自己的学号后四位。
(或编上循环“程在数码管显示自己的学号后四位。
(或编上循环“00-99”,位码驱动输入端S0、S1接PC0、PC1;S2、S3接地。
)接地。
)
2、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
七段数码管的字型代表码如下:
三、硬件接线图与软件流程图
硬件接线图:
接线:
PA7~PA0/8255接dp~a/LED数码管
PC3~PC0/8255接S3~S0/LED数码管
CS/8255接Y1/IO地址
软件流程图:
四、源代码
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,80H
MOVDX,28BH
OUTDX,AL
LOOP1:
MOVDX,28AH;数码管清零
MOVAL,00H
OUTDX,AL
MOVDX,288H;送出段码
MOVAL,3FH;0的段码
OUTDX,AL
MOVDX,28AH;送出位码
MOVAL,08H;最高位显示
OUTDX,AL
MOVDX,28AH;数码管清零
MOVAL,00H
OUTDX,AL
MOVDX,288H;送出段码
MOVAL,07H;7的段码
OUTDX,AL
MOVDX,28AH;送出位码
MOVAL,04H;次高位显示
OUTDX,AL
MOVDX,28AH;数码管清零
MOVAL,00H
OUTDX,AL
MOVDX,288H;送出段码
MOVAL,4FH;3的段码
OUTDX,AL
MOVDX,28AH;送出位码
MOVAL,02H;第3位显示
OUTDX,AL
MOVDX,28AH;数码管清零
MOVAL,00H
OUTDX,AL
MOVDX,288H;送出段码
MOVAL,06H;1的段码
TDX,AL
MOVDX,28AH;送出位码
MOVAL,01H;第4位显示
OUTDX,AL
MOVAH,1;调用DOS功能,监视键盘是否有输入
INT16H
JZLOOP1;键盘有输入跳出循环,否则继续显示
MOVAH,4CH;返回DOS
INT21H
CODEENDS
ENDSTART
五、实验结果
数码管上静态显示我的学号后四位0731。
六、实验总结
在本实验中数码管的显示是一位写,当然也可以用查表方法来进行。
在本实验中数码管的显示是一位写,当然也可以用查表方法来进行。
七、实验收获与心得体会、实验收获与心得体会
这是第一次在硬件实验中使用到数码管,的显示需要位和段输这是第一次在硬件实验中使用到数码管,的显示需要位和段输送。
这次实验也真正地通过8255控制外设的动作。
懂得了置控制外设的动作。
懂得了置8255的工作方式以及C口的置/复位的方法。
实验八可编程定时器/计数器(8253/8254)
一、实验目的
1.掌握8253用作定时器的编程原理;
二、实验内容及原理
1、8253芯片
1)8253初始化
使用8253前,要进行初始化编程。
初始化编程的步骤是:
A、向控制寄存器端口写入字对使用的计数规定其方式等。
B、向使用的计数器端口写入初值。
2)8253控制字:
附:
8253控制寄存器地址283H计数器0地址280H
计数器1地址281H计数器2地址282H
定时器可工作在方式3下。
综上所述,设置控制字为:
00111110B,即选择零号计数器先读/先写低8位、再读/写高8位,选择方式3,计数初值为二进制。
2、音乐产生原理
由参考资料中的音符与频率对应表,根据计数器的性质,利用公式,使用MATLAB矩阵运算可以快速计算出七种音符在高中低音时计数器应该对应的初始计数值,如下表所示。
三、硬件接线图与软件流程图
硬件接线图:
接线:
CS/8253接Y0/IO地址
GATE0/8253接+5V
CLK0/8253接1M时钟
OUT0/8253接喇叭
软件流程图:
四、源程序
DATASEGMENT
BUFDB'334554*********';欢乐颂乐谱
LTHEQU$-BUF;乐谱长度
ENDS
STACKSEGMENT
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
DELAYPROCNEAR;延时子程序
PUSHCX;避免改变原始CX值,将其压入堆栈
MOVCX,0FFFFH;光靠设置CX的值延时还不够长
L:
MOVAX,50;嵌套循环,总循环长度为AX*CX
WA:
DECAX
JNZWA
LOOPL
POPCX;提取原CX值
RET
DELAYENDP
START:
MOVAX,DATA
MOVDS,AX
MOVAL,80H
MOVDX,28BH
OUTDX,AL;初始化8255
MOVDX,283H
MOVAL,00111110B
OUTDX,AL;初始化8254
BEGIN:
MOVBX,OFFSETBUF;载入音谱
MOVCX,LTH;根据音谱长度设定循环变量
PRO:
MOVAL,[BX];载入音符
ADDBX,1;准备载入下一个音符
CMPAL,31H;通过比较ASCII码,读取单个音符
JZN1;跳往DO
CMPAL,32H
JZN2
CMPAL,33H
JZN3
CMPAL,34H
JZN4
CMPAL,35H
JZN5
CMPAL,36H
JZN6
CMPAL,37H
JZN7
CMPAL,38H
JZN8
PRO2:
LOOPPRO
JMPFIN;音乐播完
N1:
JMPDO;由于程序过长,此处设置跳转中
N2:
JMPRE
N3:
JMPMI
N4:
JMPFA
N5:
JMPSO
N6:
JMPLA
N7:
JMPSII
N8:
JMPDOI
DO:
MOVDX,280H;设置零号计数器的初始值
MOVAL,42H;42H是通过公式算得的初始值低8位
OUTDX,AL
MOVAL,0FH;高8位
OUTDX,AL
MOVDX,28AH;数码管清零
MOVAL,00H
OUTDX,AL
MOVDX,288H;给数码管送出1的段码
MOVAL,06H
OUTDX,AL
MOVDX,28AH;给数码管送出位(最高显示)
MOVAL,08H
OUTDX,AL
CALLDELAY;调用延时子程序,以免乐谱播放过快
JMPPRO2;准备接收下一个音符
;以下代码解释类似
RE:
MOVDX,280H
MOVAL,90H
OUTDX,AL
MOVAL,0DH
OUTDX,AL
MOVDX,28AH
MOVAL,00H
OUTDX,AL
MOVDX,288H
MOVAL,5BH
OUTDX,AL
MOVDX,28AH
MOVAL,08H
OUTDX,AL
CALLDELAY
JMPPRO2
MI:
MOVDX,280H
MOVAL,34H
OUTDX,AL
MOVAL,0CH
OUTDX,AL
VDX,28AH
MOVAL,00H
OUTDX,AL
MOVDX,288H
MOVAL,4FH
OUTDX,AL
MOVDX,28AH
MOVAL,08H
OUTDX,AL
CALLDELAY
JMPPRO2
FA:
MOVDX,280H
MOVAL,74H
OUTDX,AL
MOVAL,0BH
OUTDX,AL
MOVDX,28AH
MOVAL,00H
OUTDX,AL
MOVDX,288H
MOVAL,66H
OUTDX,AL
MOVDX,28AH
MOVAL,08H
OUTDX,AL
CALLDELAY
JMPPRO2
SO:
MOVDX,280H
MOVAL,2CH
OUTDX,AL
MOVAL,0AH
OUTDX,AL
MOVDX,28AH
MOVAL,00H
OUTDX,AL
MOVDX,288H
MOVAL,6DH
OUTDX,AL
MOVDX,28AH
MOVAL,08H
OUTDX,AL
CALLDELAY
PPRO2
N9:
JMPBEGIN;代码跳转中处
LA:
MOVDX,280H
MOVAL,28H
OUTDX,AL
MOVAL,09H
OUTDX,AL
MOVDX,28AH
MOVAL,00H
OUTDX,AL
MOVDX,288H
MOVAL,7DH
OUTDX,AL
MOVDX,28AH
MOVAL,08H
OUTDX,AL
CALLDELAY
JMPPRO2
SII:
MOVDX,280H
MOVAL,24H
OUTDX,AL
MOVAL,08H
OUTDX,AL
MOVDX,28AH
MOVAL,00H
OUTDX,AL
MOVDX,288H
MOVAL,07H
OUTDX,AL
MOVDX,28AH
MOVAL,08H
OUTDX,AL
CALLDELAY
JMPPRO2
DOI:
MOVDX,280H
MOVAL,0A2H
OUTDX,AL
MOVAL,07H
OUTDX,AL
MOVDX,28AH
MOVAL,00H
OUTDX,AL
VDX,288H
MOVAL,75H
OUTDX,AL
MOVDX,28AH
MOVAL,08H
OUTDX,AL
CALLDELAY
JMPPRO2
FIN:
MOVDX,280H;乐谱播完,进入静音状态设置初值
MOVAL,0AH;发出超声波(人耳听不到),低8位
OUTDX,AL
MOVAL,00H;高8位
OUTDX,AL
MOVAH,01H;调用1号DOS功能,等待键盘输入
INT21H
CMPAL,1BH;是否输入"ESC"
JNZN9;是则退出,否进行下一次播放
MOVAH,4CH;程序结束,返回DOS界面
INT21H
CODEENDS
ENDSTART
五、思考题
写出8253计数初值、输入频率和输出频率的关系。
答:
计数初值=输入频率/输出频率
六、实验现象
8253可以正确播放出存放在数据段的歌曲《欢乐颂》,同时数码管可以正确显示出音符。
七、实验总结
在编程时首先要进行8253的初始化,包括计数器的选择、读入计数初值的方式、工作方式的选择以及计数的方式等等。
实验开始之前自己是想设计出一个播放器,可以比较准确的播放出歌曲,数据段存储其音符、音高以及节拍,但是调试到最后也没有成功,于是最后只是进行了功能十分简单的音乐播放,应该说这是一个遗憾。
八、实验收获与心得体会
进行实验的时候还没有学习过8253,所以在进行实验的时候经历了许多周折。
但最终完成了音乐的播放,也算是一个成功吧,在这次实验中我学会了8253的设置以及编程实现,对之后的理论课学习有非常大的帮助。
实验中对每一个音符的计数初值是一个一个写入的,其实也可以通过查表的方法进行,在尝试写功能比较完备的音乐播放时就用了查表的方法。
实验十六串行通信8251
一、实验目的
1、了解串行通讯的基本原理;
2、掌握串行接口芯片8251的工作原理和编程方法。
二、实验内容及原理
1、8251A的基本性能:
可以工作在同步或异步方式下,两种方式下的字符位数5-8个;同步方式时传输速率可达0-64K,异步方式时传输速率可达0-19.2K;异步传输时,可自动产生一个起始位,程控产生1个、1.5个、2个停止位;具有奇偶错、数据丢失和帧错误和检测能力;同步方式时,可自动检测,插入同步字符。
2、8251A的工作原理:
1)异步接收方式
当8251A工作于异步方式且允许接收和准备好接收数据时,它监视RXD线。
在没有字符信息时,RxD为高电平。
一旦8251A检测到RxD线为低电平,即认为是起始位(Space)到达,便启动内部计数器开始计数。
假设接收时钟频率为波特率的16倍频,8251A的内部寄存器计数接收始终的第8个脉冲时,又一次采样RXD线,看两次采样的信号是否一致。
如果相同,即都为低,则表示一个起始位的到来。
此后,每隔一位的时间,在每个数据中间的一个接收时钟的上升沿采样一次RxD线作为输入信号,送至串→并移位寄存器。
在移位寄存器中数据被转换成并行,并且进行奇偶校验并去除停止位后,经8251A内部数据总线送至接收缓冲器,同时发出RxRDY信号,表示一个字符的接收和转换全部完成。
如果在第二次采样RxD线发现为高电平,则可能是一个干扰噪声。
于是8251A将不予理会,重新进行下一次的采样。
2)异步发送方式
异步发送时,首先必须由程序设置TxEN(TransmitterEnable――发送允许)和(ClearToSend――由外设发来的对CPU请求发送信号的响应信号)有效后,方可发送。
发送时,发送器为每个字符自动地加上1位起始位,并按照程序的要求加上1位奇偶校验位,1、1.5、或2位停止位,在发送时钟的下降沿经发送移位寄存器从线发出。
3)同步接收方式
常用的串行同步通信数据格式分为单、双、外同步和SDLC/HDLC四种格式。
单同步数据格式的串行同步通信方式,在内同步方式允许接收后,8251A由编程命令进入搜索方式。
它监视RxD线,每出现一个数据位就把它移一位,然后把接收寄存器与含有同步字符(由程序给定)的寄存器相比较,如果相同,表示接收和发送方已同步,接收方便使SYNDET信号输出为高。
如果不同,则接收下一个数据并重新进行比较过程。
如果采用双同步数据格式传送,则在比较第一个同步字符相同后,进行第二个同步字符的