微原硬件实验二:8255A并行接口.doc

上传人:牧羊曲112 文档编号:4263696 上传时间:2023-04-12 格式:DOC 页数:15 大小:423KB
返回 下载 相关 举报
微原硬件实验二:8255A并行接口.doc_第1页
第1页 / 共15页
微原硬件实验二:8255A并行接口.doc_第2页
第2页 / 共15页
微原硬件实验二:8255A并行接口.doc_第3页
第3页 / 共15页
微原硬件实验二:8255A并行接口.doc_第4页
第4页 / 共15页
微原硬件实验二:8255A并行接口.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《微原硬件实验二:8255A并行接口.doc》由会员分享,可在线阅读,更多相关《微原硬件实验二:8255A并行接口.doc(15页珍藏版)》请在三一办公上搜索。

1、专业:信息工程学生姓名:学号:指导教师:完成时间:2013年11月29日实验二:8255A并行接口应用北京邮电大学微机原理硬件实验报告一、 实验目的3二、实验原理及内容31、实验原理38255的工作方式3工作方式选择字3命令字与初始化编程4注意事项42、 实验内容46位数码管静态显示46位数码管动态显示5拓展功能5三、 硬件连接图与软件程序流程图71、 硬件连接图78255A并行接口7数码管82、 程序流程图9基本要求一流程图9基本要求二流程图10四、 源程序111、基本要求一源代码112、基本要求二源代码12五、 实验结果14六、 实验总结151、 段内VS段外152、 瞬间之误153、 接

2、力跳远15七、 实验收获与心得体会15一、 实验目的1、掌握8255A的功能及方式0、1的实现。2、熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。3、了解七段数码管显示数字的原理。4、掌握同时显示多位数字的技术。二、实验原理及内容1、实验原理8255的工作方式一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。方式0是基本型输入/输出。这种方式和外设交换数据时,8255端口与外设之间不使用联络线。方式1为选通型输入/输出。用这种方式和外界交换数据时,端口和外设之间要有联络信号。方式2是双向数据传送,仅A口有这项

3、功能。当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。工作方式选择字8255工作方式选择字共8位(如图),存放在8255控制寄存器中。最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。图一:8255工作方式选择字命令字与初始化编程8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:I、向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。II、当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的

4、主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求。注意:“C口置0/置1控制字”虽然是对C口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。III、向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据”。注意事项在方式0输入/输出)下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段B口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。8255A中A端口地址E800HB端口地址E801HC端口地址E802H控制地址E803H八段

5、数码管的显示规律及数码管的位选规律自己查找,可用实验一中,学过的I、O命令来做。2、 实验内容6位数码管静态显示在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回DOS。提示:该电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型编码之后,6个数码管都有可能显示出相同的数字。如果要使6个数码管“同时”显示不同的数字,必须采用扫描显示的方法,通过选位寄存器选择某一位数码管,显示其数字(对应段值为1),然后关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位数码管都能显示30次以上,则人眼看到的是几位数码管同时在显示。实验证明,在扫描显示过程中,每一位显

6、示延迟1ms是最佳选择。6位数码管动态显示要求在数码管电路16位数码管上按图所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。图二:字符串动态显示示意图提示:、本实验应在上面实验的基础上完成;、在数据段,按下列规律设置12个字型码:MESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0POINTDWMESGPOINT单元存放MESG单元的有效地址,程序取出POINT单元的内容BX,然后用BX间址取数送数码管电路,扫描显示6个字符。每过0.5s将POINT单元的内容加1,再将POINT单元的内容BX,。POINT单元内容加1,使字符串显示的首地址向高地

7、址移动一个单元,从而使6位字符串向“左”移动一位,实现动态显示。、动态显示的速度可控制(快或慢),利用实验一读入端口的功能。拓展功能完成一个扫描键盘(PC口)输入自己的学号,并在数码管上显示。端口C地址E802H;控制端口地址EE03H;PC4、PC5、PC6、PC7接行PC3、PC2、PC1、PC0接列图三:键盘电路提示:1 识别闭合键的方法行扫描法是使键盘某一行线为低电平,其余为高电平,然后读取列值,如列值中有某位位低电平,则表明行列交叉点处的键被按下;否则扫描下行,知道扫完全部的行线为止。行反转法识别闭合键时,要将行线接一个并行口,先让他工作在输出方式,将列线接另一个并行口,先让它工作在

8、输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线的值,如此时某键按下则必使某一列线值为0,然后程序再对两个并行端口的工作方式进行设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么在闭合键所在的行线上的值必定为0。这样,有按键时,可读得唯一的行值和列值。2 设计时,行、列值应放在一个表中,通过查表确定按下的是哪个键。3 键闭合时,注意加延时防抖动。4 键松开时,加判断释放程序。5 按下键盘某键能够返回系统。三、 硬件连接图与软件程序流程图1、 硬件连接图8255A并行接口图四:8255A并行接口数码管图

9、五:数码管2、 程序流程图基本要求一流程图图六:基本要求一流程图基本要求二流程图图七:基本要求二四、 源程序1、基本要求一源代码data segmenta equ 0e800h ;A端口(输出)作为数码管段选b equ 0e801h ;B端口(输出)作为数码管位选control equ 0e803h ;控制端口zero equ 0edhnine equ 79hfive equ 0d9htwo equ 0f4hone equ 21height equ 0fdhdata endsstack segment stack stack stack ends code segment assume cs:

10、code,ds:data,ss:stack start: mov ax,datamov ds,ax mov dx,control ;dx:控制寄存器(暂时)mov al,80h ;工作方式选择字out dx,al disp macro x,y mov al,xmov dx,bout dx,almov al,ymov dx,aout dx,alcall far ptr delay ;是否需要加入延时?nopmov al,00hout dx,alendm again: disp 01h,twodisp 02h,onedisp 04h,zerodisp 08h,eightdisp 10h,zerod

11、isp 20h,ninemov ah,0bh;检测键盘按键int 21hcmp al,0ffhjnz tempmov ah,4chint 21hdelay proc far ;延时子程序push cx ;入栈保护push axpush bxmov cx,03h ;2的8次方=65536 ;0ffffhloop1: nop ;CPU空操作mov bx,02h ;cx*bx可以控制分频为1000Hz ;018hloop2: dec bx ;?内层循环是否需要空操作jnz loop2 ;当dx0时,继续减一loop loop1 ;当cx0时,继续空操作pop bx ;出栈恢复pop axpop cx

12、retdelay endptemp: jmp againcode endsend start2、基本要求二源代码data segment a equ 0e800hb equ 0e801hcontrol equ 0ee03h mesg db 0,0,0,0,0,0,3dh,0dch,8ch,8ch,0edh,0 ;显示字符point dw mesg ;data endsstack segment stack stack db 100 dup(?) stack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov

13、ds,ax mov dx,controlmov al,80hout dx,al ;8255初始化控制字 mov si,offset mesg ;si指向字符串首地址add si,06h ;si指向第一个字母Hmov bx,offset mesg ;bx是字符串首地址disp macro x,y ;是否需要加入延时?mov al,xmov dx,bout dx,almov al,si+y ;应该把bx改成si?mov dx,aout dx,alcall far ptr delaynopmov al,00hout dx,alendmagain1: nopmov cx,54h ;每一个点亮1ms,6

14、个点亮6ms,0.5秒内亮500/6=83趟,转换为54h again2: dec cxjnz loop3mov cx,54h ;重新设置cx,应该与第38行保持一致dec sicmp bx,sijnz loop3add si,06hloop3: disp 01h,0disp 02h,1disp 04h,2disp 08h,3disp 10h,4disp 20h,5mov ah,0bh ;检测键盘按键 int 21hcmp al,0ffhjnz tempmov ah,4chint 21htemp: jmp again2 ;此处已经把again2改为again1delay proc far ;1

15、000Hz延时子程序push cx ;入栈保护push axpush bxmov cx,0ffffh ;2的8次方=65536 ;0ffffhloop1: nop ;CPU空操作mov bx,018h ;cx*bx可以控制分频为1000Hz ;018hloop2: dec bx ;?内层循环是否需要空操作jnz loop2 ;当dx0时,继续减一loop loop1 ;当cx0时,继续空操作pop bx ;出栈恢复pop axpop cxretdelay endp code endsend start五、 实验结果完成基本要求一,6位数码管稳定地静态显示学号:2011210809,且亮度高,无

16、闪烁现象。键盘按键触发程序终止,数码管全灭。大体完成基本要求二,动态显示“HELLO”字样,滚动速度控制在0.5s,键盘按键触发程序终止,数码管全灭。按键控制速度功能多次尝试,却最终没能实现。没有实现拓展功能。六、 实验总结1、 段内VS段外我们在程序中用到了调用子程序delay完成延时功能。然而,调用程序的位置与子程序定义之间隔着大量的宏指令,一开始使用段内调用“call delay”出现错误。在网上找到解决方案:定义delay:pro far 调用delay:call far ptr delay。此错误不仅在实验二中出现,实验三也出现过,被我们用同样的方法纠正了。2、 瞬间之误我们在调试过

17、程中发现数码管的闪亮出现“转换瞬间残留上一个数字的信息”,其产生是程序顺序执行所引起的。我们采取在转换瞬间之前使数码管熄灭,已达到欺骗人眼的目的,其效果良好。3、 接力跳远说来有趣,我们在进行条件转移的时候注意到竟然存在跳转距离太长而无法正常转移的的问题,因为跳转跨越了大量的宏指令。后来翻查了一下资料,发现条件转移指令的确存在一个跳转区间,所幸我们同时也发现了无条件转移的区间却相对大得多。于是,我们采用“接力跳远”的方式,先条件转移短程跳到无条件转移,再由无条件转移长程跳到目的地。七、 实验收获与心得体会虽然此次实验我们没能当堂就按时验收,但是对程序不停的修改却大大地增长了我们的知识,特别是体会到单步调制对于发现逻辑错误的重要性。

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号