北邮微机原理硬件实验报告.docx
《北邮微机原理硬件实验报告.docx》由会员分享,可在线阅读,更多相关《北邮微机原理硬件实验报告.docx(34页珍藏版)》请在冰点文库上搜索。
北邮微机原理硬件实验报告
微机原理硬件实验报告
专业通信工程
班级
姓名
学号
班内序号
报告日期2013年10月~12月
实验一、实验二
一、实验目的
1.掌握I/O地址译码电路的工作原理。
2.掌握简单并行接口的工作原理及使用方法。
二、实验原理及内容
实验一:
I/O地址译码
1.编程控制LED灯闪烁
2.译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:
280H~287H,Y1:
288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器被选中,必有一根译码线输出负脉冲。
要使译码电路正常工作,必须使使能端处于低电平。
即A6=A8=0,A7=A9=1,AEN=0,IOW与IOR不可同时为1(即不能同时读写)。
当要从Y4输出低脉冲时,A5A4A3=100;从Y5输出时,A5A4A3=101。
因此,当Y4输出时,应设置值A9~A0=1010100000B=2A0H;Y5输出时,应设置值A9~A0=1010101000B=2A8H。
执行下面两条指令:
MOVDX,2A0H
OUTDX,AL
延时一段时间(delay);
执行下面两条指令;
MOVDX,2A8H
OUTDX,AL
再延时一段时间,然后循环上述步骤。
利用这两个负脉冲及延迟来控制L7闪烁发光,时间间隔通过软件延时实现。
实验二:
简单并行接口
1、74LS273插通用插座,74LS32用实验台上的“或门”。
74LS273的8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。
2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。
三、硬件连接图和软件流程图
实验一:
I/O地址译码
图1-1硬件连接图
其中,Y4/IO地址接CLK/D触发器
Y5/IO地址接CD/D触发器
D/D触发器接SD/D角发器接+5V
Q/D触发器接L7(LED灯)或逻辑笔
图1-2软件流程图
实验二:
简单并行接口
图1-3硬件连接图
图1-4软件流程图
四、源程序及注释
实验一:
I/O地址译码
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,X;设定A9~A0的值
OUTDX,AL;Y4端口输出一个负脉冲
CALLDELAY;调用延时子程序
MOVDX,Y;设定A9~A0的值
OUTDX,AL;Y5端口输出一个负脉冲
CALLDELAY;调用延时子程序
MOVAH,1;调用1号DOS功能,等待键盘输入
INT16H
JESTART;若有键盘输入则退出程序,否则继续循环
MOVAH,4CH
INT21H
DELAYPROCNEAR;延时子程序
MOVBX,200
A:
MOVCX,0
B:
LOOPB
DECBX;BX自减1
JNEA
RET
DELAYENDP
CODEENDS
ENDSTART
实验二:
简单并行接口
codesegment
assumecs:
code
start:
movah,01h;输入一个字符
int21h
cmpal,1bh
jzexit;判断是否是ESC,是则退出
movdx,2a8h
outdx,al
jmpstart
exit:
movax,4c00h
int21h
codeends
endstart
五、实验结果
实验一:
I/O地址译码
发光二极管以一定的频率闪灭交替(频率可以通过修改延时子程序的参数来改变),按‘ESC’退出。
实验二:
简单并行接口
在键盘上键入字符后,8个LED灯成功显示对应的ASCII(‘1’亮,‘0’灭),键入“ESC”后程序成功退出。
六、实验收获及心得体会
这门实验弱化了对代码的要求,侧重硬件的接线,以及对译码原理的理解等。
实验三、实验四
一、实验目的
1、通过实验,掌握8255工作方式0以及设置A口为输出口,C口为输入口的方法。
2、掌握数码管显示数字的原理
二、实验内容及原理
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。
2、七段数码管及接线图:
1)静态显示:
将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。
(或编程在数码管上循环显示“00-99”,位码驱动输入端S0、S1接PC0、PC1;S2、S3接地。
)
2)实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
七段数码管的字型代码表如下表:
图2-18255方式控制字
(向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。
)
图2-2数码管字型代码
三、硬件接线图及软件流程图
实验三:
可编程并行接口8255
图2-3硬件连接图
接线:
PC7~PC0/8255接K7~K0/逻辑电平开关
PA7~PA0/8255接L7~L0/LED显示
CS/8255接Y1/IO地
图2-4软件流程图
实验四:
七段数码管
图2-5硬件连接图
接线:
PA7~PA0/8255接dp~a/LED数码管
PC3~PC0/8255接S3~S0/LED数码管
CS/8255接Y1/IO地址
图2-6软件流程图
四、源程序及注释
实验三:
可编程并行接口8255
codesegment
assumecs:
code
start:
movdx,28BH;设8255为C口输入,A口输出
moval,89h
outdx,al
inout:
movdx,28AH;从C口输入一数据
inal,dx
movdx,288H;从A口输出刚才自C口输入的数据
outdx,al
movdl,0ffh;判断是否有按键
movah,06h
int21h
jzinout;若无,则继续自C口输入,A口输出
movah,4ch;否则返回DOS
int21h
codeends
endstart
实验四:
七段数码管
DATASEGMENT;数据段
SHOWDB06H,66H,6FH,06H;1491
COUNTEQU$-SHOW
CATDB01h;选通信号,可以不赋初值
DATAENDS
STACKSEGMENTSTACK'STACK'
DB100HDUP(?
)
STACKENDS;代码段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
NEXT:
MOVCX,COUNT
LEABX,SHOW
MOVCAT,01H;选通信号,最先点亮第1个数字
AGAIN:
MOVAL,80H;写控制器,方式选择;A、B口方式0输出
MOVDX,28BH
OUTDX,AL
MOVAL,CAT
MOVDX,28AH;C口为数码管选通端口
OUTDX,AL
MOVAL,[BX]
MOVDX,288H;A口为8段数码管
OUTDX,AL;依次显示学号后四位数字
INCBX
SHLCAT,1
LOOPAGAIN
MOVAH,0BH;检测键盘缓冲区
INT21H
ORAL,AL
JZNEXT
RET
STARTENDP
CODEENDS
ENDSTART
五、实验结果
实验三:
可编程并行接口8255
拨码开关控制灯的亮灭。
实验四:
七段数码管
在数码管上显示0195。
六、实验总结及心得体会
刚开始调试时,数码管上四个数字无法静态显示,一开始以为是分频系数的问题,于是调整了分频系数。
但是把分频系数改小了之后,就出现了4个9,也就是出现了残影。
经过分析和讨论之后,找出了问题所在:
没有对数码管进行清零。
改正之后显示正常。
实验八可编程定时器/计数器
一、实验目的
学习掌握8253用作定时器的编程原理。
二、实验内容及原理
1、8253芯片
1)8253初始化
使用8253前,要进行初始化编程。
初始化编程的步骤是:
A、向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。
B、向使用的计数器端口写入计数初值。
2)8253控制字:
图3-18253控制字
附:
8253控制寄存器地址283H计数器0地址280H
计数器1地址281H计数器2地址282H
定时器可工作在方式3下。
综上所述,设置控制字为:
00111110B,即选择零号计数器,先读/先写低8位、再读/写高8位,选择方式3,计数初值为二进制。
2、音乐产生原理
由参考资料中的音符与频率对应表,根据计数器的性质,利用公式,使用MATLAB矩阵运算可以快速计算出七种音符在高中低音时计数器应该对应的初始计数值,如下表所示。
图3-2音符频率图
三、硬件连接图及软件流程图
如下图所示(虚线为实际要接的线路):
图3-3硬件接线图
接线:
CS/8253接Y0/IO地址
GATE0/8253接+5V
CLK0/8253接1M时钟
OUT0/8253接喇叭或蜂鸣器
图3-4软件流程图
四、源代码及注释
DATASEGMENT
BUFDB'115566544332215544332554433211556654433221';小星星乐谱
LTHEQU$-BUF;乐谱长度
DATAENDS
STACKSEGMENT
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
DELAYPROCNEAR;延时子程序
PUSHCX;避免改变原始CX值,将其压入堆栈
MOVCX,0FFFFH;光靠设置CX的值延时还不够长
LENGTH:
MOVAX,50;嵌套循环,总循环长度为AX*CX
WAIPRO:
DECAX
JNZWAIPRO
LOOPLENGTH
POPCX;提取原CX值
RET
DELAYENDP
START:
;主程序
MOVAX,DATA
MOVDS,AX
MOVAL,80H;控制字写入
MOVDX,28BH
OUTDX,AL;初始化8255
MOVDX,283H
MOVAL,00111110B
OUTDX,AL;初始化8253
;8253工作于计数器0,先读低8再读高8,方式3,二进制
;8255工作于工作方式0
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
MOVDX,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
JMPPRO2
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
MOVDX,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
五、实验结果
喇叭播放音乐,数码管上显示乐谱,按ESC退出播放。
六、心得体会与建议
实验总结:
通过编程播放出来的音乐没有原版音乐那种抑扬顿挫的感觉,究其原因在于节拍没有变化,也就是说在不同音调之间还得有频率变化,遗憾的是在本次实验中由于时间问题没能实现。
心得体会:
实验非常有趣,在音乐声中理解了8253的工作原理,在本次实验8253做分频使用,用以给不同的音符提供频率。
七、思考题
问题:
写出8253计数初值、输入频率和输出频率的关系。
答:
输出频率=输入频率/初值
实验16串行口8251A实验
一、实验目的
1、了解串行通讯的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。
二、实验原理及内容
1、实验原理:
1)8251A的基本性能:
可以工作在同步或异步方式下,两种方式下的字符位数5-8个;
同步方式时传输速率可达0-64K,异步方式时传输速率可达0-19.2K;
异步传输时,可自动产生一个起始位,程控产生1个、1.5个、2个停止位;
具有奇偶错、数据丢失和帧错误和检测能力;
同步方式时,可自动检测,插入同步字符。
2)8251A的工作原理:
A.方式控制字
图4-18251A方式控制字格式
从图中可知:
D0D1:
首先区分发送方式,其次是在异步条件下的输入时钟频率与波特率之间的系数。
接收和发送的波特率可以不同,接收时钟和发送时钟的频率也可以不同,但是接收和发送的波特率系数只能是同一个。
D3D2:
确定每个字符的位数。
字符长度值可以从5位到8位不等。
当程序制定字符位数小于8位时,有效数据位右对齐,高位以0补充。
D4:
决定是否使用奇偶校验位,D5表示校验的方式。
注意,校验位仅仅是提供传送过程中是否有出错的判定,当正确接收到有效数据后,检验位的作用完成。
因此,从RxD上接收的奇偶校验信号是不会进入CPU的。
D7D6:
与采用的传输方式有关。
当D1D0≠00为异步方式时,表示停止位的个数,其中D7D6=00时无效。
当D1D0=00为同步方式时,D6=1为外同步,D6=1为内同步。
D7表示同步字符的个数,D7=1为单同步,D7=0为双同步。
如果为外同步方式,则D7无效。
B.命令控制字
图4-28251A命令控制字格式
格式中,TxEN和RxE位分别是发送允许和接收允许位,在发送和接收之前应发相应位为“1”的命令字,当然两位也可同时为“1”。
和位分别控制和端的输出状态,要根据通信是否受这些信号的控制来选择这两位的值。
SBRK位为1时将使TxD输出低电平作为“间断”信号。
ER位为“1”将使状态信息中的错误标志PE、OE清除为0。
IR位为“1”的命令字用于使8251A复位,与RESET端加高电平作用一样。
8251A复位以后,等待设置方式控制字。
在设置为同步方式后,第一个命令字的EH为应该为1,称为ENTERHUNT(进入搜索方式)命令。
这个命令之后,8251A进入测试同步字符的操作状态。
C.状态控制字
8251A内部设有状态寄存器,CPU可由读指令IN获取状态寄存器的内容,判定8251A当前的工作状态。
状态寄存器各位的定义如图9-27所示。
D1(RxRDY)、D0(TxRDY)位可供CPU查询。
状态位TxRDY和输出引脚TxRDY有所不同。
状态位TxRDY并不受命令控制字中允许发送位TxEN和输入的允许发送引脚的控制,它只反映发送命令/数据缓冲器的状态,只要数据缓冲器一空就置位;而输出引脚TxRDY却要受到上述内部和外部两个条件限制,它不只反映发送过程中数据缓冲器的状态。
图4-38251A状态字格式
在发送前和发送后TxRDY的状态位和输出引脚的状态可能不一致,在发送过程中二者总是一致的。
前者可供CPU查询,后者可作为向CPU发出的中断申请信号。
状态位的置位比状态的出现总是要滞迟后,最坏情况下要延迟28个时钟脉冲(CLK端)。
在读状态的操作过程中,状态位是不变