北邮微原硬件实验.docx
《北邮微原硬件实验.docx》由会员分享,可在线阅读,更多相关《北邮微原硬件实验.docx(23页珍藏版)》请在冰豆网上搜索。
北邮微原硬件实验
信息与通信工程学院
微原硬件实验报告
姓名:
班级:
学号:
班内序号:
【一.基本的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范围内,译码器选中,必有一根译码线输出负脉冲。
例如:
执行下面两条指令
MOVDX,2A0H
OUTDX,AL(或INAL,DX)
Y4输出一个负脉冲,执行下面两条指令
MOVDX,2A8H
OUTDX,AL(或INAL,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.软件程序流程图
四、源程序
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
START:
MOVCX,0FFFFH;L7闪烁控制
LOOP1:
MOVDX,2A0H;灯亮
OUTDX,AL
CALLDELAY1
MOVDX,2A8H;灯灭
OUTDX,AL
CALLDELAY1
LOOPLOOP1;循环闪烁
CODEENDS
ENDSTART
五、实验结果
灯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.硬件接线图
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
EXIT:
MOVDX,2A8H;返回DOS
MOVAL,0
OUTDX,AL;所有灯灭
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验结果
8个灯代表8位ASCII码,灯亮代表‘1’,灯灭代表‘0’。
当从键盘输入字母或字符时,8个灯显示与输入对应的ASCII码,按下ESC键则所有灯灭。
六、实验总结
接线时注意各个端口名称不要接错,接线完成之后可以用HQFC中的演示实验验证接线是否正确。
实验一中需要加入合理的延时子程序来实现灯的亮灭交替。
七、实验收获与心得体会
第一次微原硬件实验在参考讲义和询问老师的情况下了解到了基础的硬件试验箱操作方法,学会了通过电脑软件编写控制试验箱的简单步骤以及相关注意事项。
【二.可编程并行接口8255实验】
实验三可编程并行接口8255
实验四七段数码管
一、实验目的
实验三:
通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。
实验四:
掌握数码管显示数字的原理。
二、实验原理和内容
实验三:
1、实验电路如图2-1,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2、编程从8255C口输入数据,再从A口输出。
图2-1
实验四:
静态显示:
按图2-2连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示学号的后四位0210。
三、硬件接线图及软件程序流程图
1.硬件接线图
实验三
实验四
2.软件程序流程图
实验三
实验四
四、源程序(仅实验三代码)
DATASEGMENT
DATAENDS
STACKSEGMENTSTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK;基本框架
START:
MOVAX,DATA
MOVDS,AX
MOVDX,283H;8255控制寄存器端口地址283H
MOVAL,B;工作方式为0
OUTDX,AL;初始化8255
DIGITAL:
MOVDX,28AH;熄灭数码管
MOVAL,00H
OUTDX,AL
MOVDX,288H;A口显示0
MOVAL,3FH
OUTDX,AL
MOVDX,28AH;C口00000001(位码)
MOVAL,01H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,00H
OUTDX,AL
MOVDX,288H;A口显示2
MOVAL,06H
OUTDX,AL
MOVDX,28AH;C口00000010(位码)
MOVAL,02H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,00H
OUTDX,AL
MOVDX,288H;A口显示1
MOVAL,5BH
OUTDX,AL
MOVDX,28AH
MOVAL,04H;C口00000100(位码)
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;有键盘输入,退出
JMPDIGITAL
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验结果
数码管显示了学号的后四位“0210”如图所示。
当键盘有按键输入时退出,数码管灭。
六、实验总结
本次实验中控制数码管显示的主要有两个端口,A口和C口,C口控制哪一路数码管亮,A口控制一路数码管亮什么数字;工作方式的选择如下图所示,D7=1表示控制寄存器中存放的是工作方式选择字,工作在方式0,A、C均为输出,B口不使用,故AL为B或B均可。
七、实验收获与心得体会
初步了解可编程并行接口8255的简单应用;在实验三中8255的工作方式选择字非常重要,要弄清A、C口为输入还是输出,其次在代码中设计按键退出模块,可以使得运行更加可靠。
学习了控制数码管显示的方法,即通过两路控制,一路负责扫描决定哪一路显示,一路负责决定显示什么数字。
这种思路与数电实验中VHDL语言控制数码管有异曲同工之处,让我体会到了编程思想的相同之处。
【三.可编程定时器/计数8253实验】
实验八可编程定时器/计数器(8253/8254)
一、实验目的
学习掌握8253用作定时器的编程原理;
二、实验原理和内容
1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。
2.扩展部分:
利用小键盘实现弹琴功能,并显示弹奏的乐谱。
注意:
8253输入频率应小于2MHz。
三、硬件接线图及软件程序流程图
1.硬件接线图
2.软件程序流程图
四、源程序
DATASEGMENT
FENPINDW0001H,3906,3472,3125,2932,2604,2344,2083,1953;分频比
DIGITALDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;数码管
MUSICDB0,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;存放播放的乐曲音符
NUMDB00H,070H,0B0H,0D0H,0E0H;检测键盘输入(00h=00000000;070h=01110000;0b0h=;0d0h=;0e0h=)
DATAENDS
STACKSEGMENTSTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
;延时子程序1
DELAYPROCNEAR
PUSHCX
MOVCX,100H
WAIT0:
LOOPWAIT0
POPCX
RET
DELAYENDP
;延时子程序2
DELAY1PROCNEAR
PUSHCX
MOVCX,0FFFFH
WAIT1:
LOOPWAIT1
POPCX
RET
DELAY1ENDP
;获取键盘输入值的子程序
KEYPROCNEAR
PUSHAX;保护现场
PUSHCX
PUSHDX
MOVCX,00H;从第一行开始扫描
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,28H;共40个音符
JNZJUM
JMPLOOP1
JUM:
JMPPLAY
EXIT:
MOVAL,0
MOVDX,288H
OUTDX,AL
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验结果
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.软件程序流程图(引用讲义)
四、源程序
DATASEGMENT
STRINGDB'TRANSLATE','$'
STRING1DB'RECEIVE','$'
STRING2DB0DH,0AH,'$'
DATAENDS
STACKSEGMENTSTACK'SATCK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
;延时子程序
DELAYPROCNEAR
PUSHCX
MOVCX,100H
WAIT0:
LOOPWAIT0
POPCX
RET
DELAYENDP
;开始
START:
MOVAX,DATA
MOVDS,AX
;8254初始化
MOVDX,283H
MOVAL,16H;0号计数器,读低字节,方式3
OUTDX,AL
CALLDELAY
MOVDX,280H;计数器地址为280H,计数初值为52
MOVAL,34H
OUTDX,AL
CALLDELAY
;8251初始化
MOVDX,2B9H;控制端口
MOVAL,40H;内部复位命令
OUTDX,AL
NOP
CALLDELAY
MOVAL,5EH;方式控制字(01011110)
OUTDX,AL
MOVAL,37H;命令控制字(00110111)
OUTDX,AL
CALLDELAY
;发送数据
GOON:
MOVDX,2B9H;读状态字
INAL,DX
TESTAL,01H
JZGOON;缓冲区为空显示提示语句否则继续检测
;显示提示语句
MOVAH,09H
MOVDX,OFFSETSTRING
INT21H
MOVAH,01H
INT21H
;检测是否为ESC键
CMPAL,1BH
JZEXIT
INCAL;加1
MOVDX,2B8H
OUTDX,AL
;接收数据
RECEIVE:
MOVDX,2B9H
INAL,DX
TESTAL,02H
JZRECEIVE
;显示提示语句
MOVAH,09H
MOVDX,OFFSETSTRING2
INT21H
MOVAH,09H
MOVDX,OFFSETSTRING1
INT21H
MOVDX,2B8H
INAL,DX
MOVDL,AL
MOVAH,02H;显示接收的数据
INT21H
MOVAH,09H
MOVDX,OFFSETSTRING2
INT21H
JMPGOON
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验结果
键盘输入后加一发送,在屏幕上显示对应输入字符ASCII码加一后的字符,如:
输入a显示b,输入1显示2。
按ESC键后退出。
六、实验总结
1.8254初始化选0号计数器,只写读写低8位,选择方式3,计数初值为二进制;
2.方式控制字的确定如下图,异步方式、1个停止位、奇校验位,、8位数据、波特因子为16,故为5EH;
3.命令控制字的确定重点在于接收和发送都允许;
4.接收和发送数据前先检查状态字,看缓冲区是否为空;
5.单机通信中控制字后需要加入延时程序
七、实验收获与心得体会
通过本次试验,让我对8251有了更深的了解。
可以将书本上的理论应用到实际,更加充分的理解了芯片的原理及其使用。
本次试验中双机通信的扩展内容调试了很长时间,数码管必须等接收方按键后才可显示,无法做到实时显示故没有贴出代码,希望以后能有机会改进。
通过这四次实验,我在编程、调试、实验的过程中对于汇编语言有了更深的了解,对于微原课本上的原理理论也有了更好的理解。
最后,谢谢老师给予的指导,希望有机会能更多的接触此类实验。
八、思考题
在实验中,你如何确定RxC,TxC的值,写出计算公式
答:
RXC