找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12657|回复: 9
收起左侧

8086 4路竞赛抢答器设计实习报告与源程序(8255+8259+8253+8086)

[复制链接]
ID:270563 发表于 2018-1-3 09:16 | 显示全部楼层 |阅读模式
word中有详细的4路竞赛抢答器的具体实验流程图,关于8086详细解释,8255等
微机原理与接口技术硬件实习报告

题        目:   竞赛抢答器设计        

学 生 姓 名:卓*强

学  院(系):信息数理学院专 业 班 级:计算机141

校内指导教师:       潘*     专业技术职务:副教授

实 习 时 间:2017619 201777

硬件实习任务书

一、设计题目

4路竞赛抢答器设计

二、设计背景

随着计算机技术的不断发展,基于微处理器的控制系统应用非常广泛,通过自己动手设计一个基于8086CPU的竞赛抢答器,进一步了解计算机的工作原理,接口技术,提高软硬件综合应用能力,即对微机原理,接口技术,汇编语言程序设计进行综合训练。

三、设计内容及目标

设计内容:
设计一个4路竞赛抢答器,综合应用8255并行接口、8259中断和8253定时器等知识。逻辑开关K0---K3代表抢答按钮,当某个逻辑开关闭合时,相当于抢答按钮按下,此时在七段数码管上将其号码显示出来,并使喇叭响一声(或者以发光二极管代替),包括开始抢答信号的接收;计时器的倒计时;检查抢答按钮并显示在数码管上;任意键退出程序。
设计目标:
1、综合运用相关课程中所学到的理论知识去独立完成某一设计课题;
2、通过查阅手册和相关文献资料,培养学生独立分析和解决问题的能力;
3、进一步熟悉8086CPU和常用接口电路,加深对专业知识和理论知识学习的认识和理解
4、学会撰写硬件实习的总结报告;
5、培养严肃认真的工作作风和严谨的科学态度。

四、进度安排

周次
工 作 内 容
预 定 目 标
第17周周一
题目安排;图书馆查相关资料
查阅相关资料
第17周周二、周三
系统硬件设计及软件设计
实现系统硬件和软件设计
第17周周四
设计成果检查及指导
确定设计成果
第17周周五
完善硬件及软件设计;开始准备实习报告初稿。
完善软件硬件设计
第18周
学习Proteus仿真软件,并仿真系统
熟悉Proteus仿真软件,并成功仿真系统
第19周周一至周四
完成实习任务;完善实习报告。
写好硬件实习报告,调试好系统
第19周周五
答辩并且验收实习报告
答辩并且验收实习报告

五、设计时间:2017619日到  201777


  计算机科学与技术  系               指导教师    潘 操                                            



微机原理与接口技术硬件实习报告


目 录

1 实习目的
2 课题方案原理
2.1 主要工程问题
2.2 解决方案
2.2.1提出方案
2.2.2方案选择
2.3 相关核心模块(技术)介绍
2.3.1并行接口芯片8255A
2.3.2中断控制芯片8259A
2.3.3可编程定时芯片8253
3 课题设计及实现
3.1硬件设计
3.1.1硬件设计原理
3.1.2显示选手电路设计
3.1.3计时电路设计
3.1.4中断电路设计
3.2 软件设计
3.2.1 软件设计程序流程图
3.2.2 软件设计程序代码及分析
4 实习结果分析
5 实习心得
5.1 实习日记
5.2 心得体会
参 考 文 献



微机原理与接口技术硬件实习报告


1 实习目的
(1)进一步掌握8255、8253以及8259显示电路的编程方法。
(2)进一步掌握定时器的使用和编程以及中断处理程序的编程方法。
(3)进一步熟悉8086CPU和常用接口电路,加深对专业知识和理论知识学习的认识和理解。
(4)程序功能按照要求实现,程序能够自由开始竞赛,竞赛开始后选手进行抢答,抢答选手号码通过数码管显示出来,选手回答时间进行计时,选手回答完毕重新开始下一轮抢答。
2 课题方案原理2.1 主要工程问题
此次实习利用8086芯片、并行接口芯片8255A、中断接口芯片8259和定时芯片8253,设计一个4人竞赛抢答器。通过8255A芯片要实现主持人的竞赛控制、选手的抢答按钮、选手号码的显示和倒计时显示,显然这通过一个8255A芯片是行不通的,所以本次实验用到了2个8255A芯片分别来实现功能。
主持人能够中断计时,需要用8259芯片来实现比赛的中断,这加大了程序的复杂度,需要用到不同的中断类型去响应中断。比赛要能够计时,这需要将8255A芯片与8253芯片结合在一起。
2.2 解决方案2.2.1提出方案
方案一 选用8255A,8253,8259,数码管
1.8253作为定时器使用。
2.8259利用IR0端作为计时暂停的中断引入端。
3. 8255 作为并行输入输出,A口接4个抢答开关,B口接准备键、开始计时键、暂停键和关闭键,C口数码管显示。
  • 显示区由3LED数码管8个按钮组成。
方案二 自锁开关、NE555定时器、共阳极数码管
  • 锁存器锁存号码。
  • NE555定时器作为定时器使用
  • 共阳极数码管作为显示数字使用。
方案三 采用AT89C51作为系统控制器的方案。单片机可以通过编程实现各种不同的功能,同时经过多年发展越来越多的型号被制造出来满足大多数使用需求。在方案中用模块化设计思想,设计出各种所需要的模块,再通过单片机联系起来,从而形成一个整体,实现所需要的功能。
方案四 独立式键盘、单片机、数码管、蜂鸣器
系统采用6个独立式键盘作为按键,通过单片机不停地扫描按键来控制LED数码管的显示以及蜂鸣器,当按下启动按键后,经单片机处理,输出控制信号,数码管从30开始进入减计时并在数码管上显示剩余时间,在有选手按下按键时,就会有对应于这个按键的编码在数码管上显示,同时蜂鸣器给出声响来提示主持人和选手,如果在30秒内没有选手抢答,则本次抢答无效,系统封锁输
入电路,禁止选手超时抢答,定时器上显示00。
用一片四D触发器74LS175和四输入2或非门CD4002实现。四D触发器输出经四输入或非门到四路抢答按键开关,加到触发器的四个输入端,同时经四输入或非门和反相器作为四D触发器的时钟信号,四D触发器清零端经上拉电阻接电源,同时经过清零控制开关到地。电路简单成本低,稍加扩展就能达到实用化。
2.2.2方案选择
方案一采用中断,程序结构化更为清晰,且cpu少了循环扫描的时间,效率较高。而且多用了一个8259中断控制芯片,一个8253定时/计时芯片,程序编制上涉及到中断服务子程序的编写,虽然稍显复杂,但是能够很好的实现实验要求。电路所需的器件较少,电路连接简单化,调试更方便,布局美观。
方案二采用74LS375、74LS148、CD4511分别作为抢答信号的锁存、编码和译码输出,来完成抢答部分,所需的元件较多且实际中实现锁存功能时也比较繁琐难实现,所需器件都是纯电子器件,没有软件的参与,不易扩展和修改而且电路结构复杂、调试困难,电子器件管脚很多,实际搭建起来费时费力,连电路容易出错,再就是学院器材库中并没有NE555定时器、74LS375锁存器以及自锁开关,找别的器材替换会导致电路连接更复杂。
方案三是选用了单片机,该方案不需要软件编程,只需要硬件电路不出错就可以实现需要的功能。但是电路结构复杂,不利于调试,成本较高,实际接线的时候会因导线连接混乱造成干扰和短路等故障,而且我们根本毫无头绪。
方案四采用单片机,体积小、价格低、应用方便、稳定可靠、单片机将很多任务交给软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便,电路所需的器件较少,电路连接简单化,调试更方便,布局美观。然而目前对于单片机的编程还不熟悉,无法单独实现。
经过我们深思熟虑讨论,决定采用效率更高、程序结构化更清晰的方案一,完成基本和扩展功能。用Proteus画电路来进行仿真调试,再进行逐步改进、调试好后连接电路。
2.3 相关核心模块(技术)介绍2.3.1并行接口芯片8255A
8255A芯片具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种;
方式0 :基本的输入输出方式,即无须联络就可以直接进行的 I/O方式。其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2: 双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
8255A是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O口:A组包括A口及C口高4位,B组包括B口及C组的低4位。8255A引脚图如下所示:

图1  8255A引脚图
2.3.2中断控制芯片8259A
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。单个的8259A能管理8级向量优先级中断。在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。8259A有多种工作方式,能用于各种系统。各种工作方式的设定是在初始化时通过软件进行的。 在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。
功能:就是在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到cpu的INTR端;当cpu响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。
8259A的主要功能如下:
①一片8259A可以接受并管理8级可屏蔽中断请求,通过8片8259A级联可扩展至63级可屏蔽中断优先控制。
②对每一级中断都可以通过程序来屏蔽或允许。
③在中断响应周期,8259A可为CPU提供相应的中断类型码。
④具有多种工作方式,并可通过编程来加以选择。
8259A引脚图如下所示:

图2  8259A引脚图
2.3.3可编程定时芯片8253
8253芯片是可编程计数器/定时器。8253内部有三个计数器,分别称为计数器0、计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
本次实验8253作为定时器,作定时器时, 计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到:
定时系数=需要定时的时间/时钟脉冲周期
①设置通道:向方式控制字寄存器端口写入方式选择控制字,用于确定要设置的通道及工作方式;
②计数/定时:向通道写入计数值,启动计数操作;
③读取当前的计数值:向指定通道读取当前计数器值时,8253将计数器值存入锁存器,从锁存器向外提供当前的计数器值,计数器则继续作计数操作。
④计数到:当计数器减1为0时,通过引脚OUTi向外输出“到”的脉冲信号。
计数初值输入存放在初值寄存器中,计数开始或重装入时被复制到计数器中。
锁存器在非锁存状态,其值随计数器的变化而变化;一旦锁存了计数器的当前值,直到锁存器值被读取后才能解除锁存状态。


图3 8253引脚图

3 课题设计及实现3.1硬件设计3.1.1硬件设计原理
本实验用到了两个8255芯片,第一个8255芯片的PC0至PC7分别与数码管的八个引脚相连,将8255芯片中需要显示的信息通过C口送入数码显示区,由显示电路设计数码管的亮灭显示出来。8255芯片的PA0至PA7分别与4个拨码开关相连,将四位选手的抢答信号(由拨码开关控制)通过A口送入8255芯片。8255芯片的PB0口对应准备按键,PB3口对应结束按键,PB5口对应着开始计时按键,PB7口对应着重置系统按键。将抢答开始和结束等信号(由开始按键和结束按键控制)通过B口送入8255芯片。第二个8255芯片的PB0至PB7通过74L373译码电路分别与两个数码管的八个引脚相连,将8253芯片中的计时方式通过芯片的B口入数码显示区,由显示电路设计数码管的亮灭显示出来。系统硬件原理图如下图所示:


图4 系统硬件原理图

3.1.2显示选手电路设计
本实验的其中一个8255芯片实现了数码管的显示、选手的抢答功能和主持人对本次抢答的控制。8255芯片工作在方式0,A端口与B端口输入,C端口输出。
8255芯片的A口与8个选手按键相连接,当选手抢答成功时,将选手号码传递给芯片。而8255芯片的C口分别与数码管的八个引脚相连,将A口传递过来的信息通过C口送入数码显示区,由数码管的亮灭显示出来。显示选手电路原理图如下图所示:


图5 显示选手电路原理图

3.1.3计时电路设计
本次试验的汇编程序中设立了一个flag变量(初始值为0H),当程序扫描到有选手抢答后,flag加1,其他选手不能进行抢答。此时等待主持人按下第一个8255芯片上的开始计时按键,若按下计时键,程序将通过8253芯片的计时功能将片选信号由第二个8255芯片的B口送入数码显示区,可以从数码管的亮灭显示出来。计时电路原理图如下图所示:


图6计时电路原理图

3.1.4中断电路设计
当主持人按下8255芯片上的结束按键或重置系统按键时,8255芯片将中断信号传递给8259芯片,抢答结束。中断电路原理图如下图所示:

图7 中断电路原理图

3.2 软件设计3.2.1 软件设计程序流程图
图8 系统主程序流程图
3.2.2 软件设计程序代码及分析

4 实习结果分析

本次实习我们组是设计一个竞赛抢答器,能够实现抢答、计时以及显示的功能。我们运用两个8255A芯片、一个8253芯片以及一个8259芯片来控制抢答过程的各项功能的实现。第一个8255A芯片A口控制抢答器的按钮,B口控制准备、关闭、暂停以及计时按钮,C口控制一个7段数码管,用来显示抢答的号码。第二个8255A芯片A口控制片选信号,B口控制两个7段数码管用来显示倒计时的时间,C口控制倒计时的开始和终止。8259芯片控制抢答器系统的中断。

我们这个抢答器操作简单,用户能够很快的了解其功能,使用方便。仿真效果如下图所示,开始仿真后如图9所示。开始使用时只要按下准备键,数码管亮起“0”,如图10所示,此时如果没人抢答可按关闭键终止抢答回到如图9时的状态,如果有人抢答就会在数码管显示所抢答选手的号码,如图11所示。有人抢答成功后便可以按下计时按钮开始进行30秒倒计时,如图12所示。在倒计时期间内,按下暂停按钮可以终止倒计时,之后重新按下准备键就可以开始新一轮的抢答。





图 9

图 10

图11

图12





5 实习心得5.1 实习日记

2017年6月19日-22日   十七周星期一至十七周星期四


卓长强(组长)
张迟
仲文
吴智文
6月19日
图书馆查阅资料
6月20日
网上查阅资料,构思电路和主程序流程图
6月21日
构思及完成主程序流程图
构思及完成硬件电路图

6月22日

老师检查,提出问题
思考老师提出的问题及修改方案

2017年6月23日-30日   十七周星期五至十八周星期五


卓长强
张迟(组长)
仲文(组长)
吴智文
6月23日
修改主程序流程图
修改硬件电路图
6月26日

编写抢答部分代码段

编写计时部分代码段

6月27日
6月28日
合并代码段,运行、仿真、调试及连线
6月29日

修改完善代码,并尝试拓展功能

6月30日

2017年7月3日-4日   十八周星期五至十九周星期二


卓长强
张迟
仲文
吴智文(组长)
7月3日

编写、检查和完善报告

7月4日

5.2 心得体会

本次实习是针对我们所学的知识完成一个抢答器的设计,综合应用8255并行接口、8259中断和8253定时器等学过的知识进行设计,在我们组员的共同努力下最终完成了这次实习任务,抢答器能够正常工作,实现了抢答、计时、重置等功能。

通过这次实习,我对所学的知识掌握的更加透彻了,让我更好的掌握了8259A、8255A、8253芯片的工作原理、方式及其应用。在这次实习中我们也遇到了很多困难,但是在我们组员的互相协助下克服了一个个难题,这让我们意识到了团队的重要性,在组员的团结合作下,工作效率越来越高,很多问题都能迎刃而解,最终完成了抢答器的设计。此次设计中,我深刻的体会到了知识的重要性,还要求我们要善于思考。同时设计不能单纯的考虑设计本身,要想到它是否切合实际,能否适用,我们的这个抢答器功能还不是很完善,但是也能很好实现抢答的功能,希望经过进一步的努力让这个作品更加完美。

参 考 文
[1]仁向民·《微机接口技术实用教程》[M].北京:清华大学出版社
[2]周荷琴,吴秀清.微型计算机原理与接口技术[M].合肥:中国科学技术大学出版社,2008年6月.
[3]张雪兰、谭毓安·《汇编语言程序设计》[M].北京:清华大学出版社
[4]宁飞,王维华,孔宇.微型计算机原于是与接口实践[M].北京:清华大学出版社,2006.
[5]裘雪红,李伯成,刘凯.微型计算机原理及接口技术[M].西安:西安电子科技大学出版社.2007年3月.
[6]刘红玲、邵晓根·《微机原理与接口技术》[M].北京:中国电力出版社

单片机源程序如下:
  1. ;...............................................设置各个芯片的端口
  2. C8255 EQU 306H                            ;0011 0000 0110b
  3. IPA EQU 300H                            ;0011 0000 0000b
  4. IPB EQU 302H                            ;0011 0000 0010b
  5. IPC EQU 304H                            ;0011 0000 0100b

  6. A8255 EQU 206H                            ;0010 0000 0110b
  7. APA EQU 200H                            ;0010 0000 0000b
  8. APB EQU 202H                            ;0010 0000 0010b
  9. APC EQU 204H                            ;0010 0000 0100b

  10. C8253 EQU 106H                            ;0001 0000 0110b
  11. CPA EQU 100H                            ;0001 0000 0000b
  12. CPB EQU 102H                            ;0001 0000 0010b
  13. CPC EQU 104H                            ;0001 0000 0100b
  14.             

  15. code              segment 'code' ;定义代码段
  16.               assume cs:code,ds:code
  17. ;.............................................伪指令(DB定义字节,DW定义字)
  18.                   TEMP DB 100 DUP(11)
  19.     LED DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
  20.     HH  DB 00H
  21.     HL  DB 00H
  22.     LP  DB 0H
  23.     MS  DW 0H
  24.             
  25. main proc far
  26. start:            
  27.               mov ax,code              ;建立DS段地址
  28.               mov ds,ax

  29. ;写中断***************************************************
  30.               cli;关中断,防止有些硬件中断对程序的干扰
  31.               mov cx,100h
  32. ini:
  33.               mov ax,0
  34.               mov es,ax  ; 附加段寄存器置0
  35.               mov dx,cx
  36.               dec dx
  37.               shl dx,1
  38.               shl dx,1
  39.               mov si,dx              ;设置中断向量   源变址寄存器,用于存放源操作数的偏移地址
  40.               mov ax,offset int0 ;取中断号0的偏移地址
  41.               ;stosw              ;存入串指令的字操作
  42.               mov es:[si],ax
  43.               mov ax,cs              ;seg int0
  44.               ;stosw              ;
  45.               mov es:[si+2],ax
  46.               loop ini

  47.                                           ;初始化8259
  48.         mov al,00010011b  ;000 1 0 0 1 1 8086不用,标志位,边沿触发,8086不用,单级使用,需要设置ICW4
  49.               mov dx,400H
  50.               out dx,al
  51.             
  52.               mov al,060h  ;01100 000 中断类型号n的高5位  IR0
  53.               mov dx,402h
  54.               out dx,al

  55.               mov al,1bh  ;000 1  10 1 1 标志位,特殊全嵌套方式,8259A为从片,AEOI自动结束中断,8086配置
  56.               out dx,al

  57.                      MOV DX,402h
  58.         MOV AL,00H               ;OCW1,八个中断全部开放
  59.         OUT DX,AL

  60.         MOV DX,400h
  61.         MOV AL,60H              ;OCW2,非特殊EOI结束中断
  62.         OUT DX,AL
  63.               ;完成8259初始化

  64.               mov al,cnt;控制操作次数
  65.         mov dx,0600h
  66.               out dx,al
  67.               sti;开中断,允许硬件中断
  68. ;*********************************************************


  69.               xor ax,ax
  70.                   mov es,ax
  71.             
  72.               mov ax,offset IT
  73.               mov es:[8H],ax

  74.               mov ax,seg IT
  75.               mov es:[0AH],ax
  76.                            
  77. ;**********************************初始化C8255            
  78. LL:
  79.               cli
  80.               mov dx,306H              ;指向控制寄存器
  81.               mov al,92h  ;A口方式0输入,B口方式0输入,C口输出
  82.               out dx,al
  83.               mov dx,304h;指向C口
  84.               mov al,0FFh
  85.               out dx,al;数码管不亮
  86. ;**********************************程序初始化
  87. L:
  88.               mov dx,302h;指向B口
  89.               in al,dx;获取B口内容
  90.               cmp al,0ffh;判断是否什么都没按
  91.               jz L
  92.               call delay10
  93.               cmp al,011111110b              ;判断是不是按下准备键
  94.               jz  L1;跳转到开始段代码
  95.               jmp L
  96. ;**********************************复位()
  97. L3:            
  98.               mov dx,IPC;指向A8255C口
  99.               mov al,011000000b
  100.               out dx,al                            ;数码管复位为0
  101.             
  102. ;***********************************开始 数码管显示为0
  103. L1:            
  104.               mov dx,304h;指向C口
  105.               mov al,0c0h
  106.               mov flag,0;无人抢答
  107.               nop;产生微小延迟


  108. ;***********************************初始化A8255并进行按键检测            
  109. AGAIN:
  110.               mov dx,0206h;指向A8255寄存器端口
  111.               mov al,92h ;A口方式0输入,B口方式0输入,C口输出
  112.               out dx,al
  113.               mov dx,0204h;指向C口
  114.               mov al,0c0h;不可计时
  115.               out dx,al
  116.               mov dx,0302h;指向C8255的B口
  117.               in al,dx;获取内容
  118.               cmp al,7fh;判断是否按了重置系统按键
  119.               jz L3;跳到复位段
  120.               cmp al,0F7h;判断是否按了结束按键
  121.               jz LL
  122.             
  123.               mov dx,0300h;指向C8255A端口
  124.               in al,dx
  125.               cmp al,0FFh;判断是否没有人抢答
  126.               jz AGAIN


  127.               call delay10                            ;延时防抖动
  128.               in al,dx;将选手号赋给al
  129.               cmp flag,1                            ;按下键后,判断flag是否为1
  130.               jz AGAIN

  131.               inc flag;flag加1,其他选手不能再按
  132.               mov bx,0
  133. ;**********************************根据按下的值查表
  134. GKEY:
  135.               mov               ah,keydata[bx];查0-7数据表
  136.               cmp               al,ah;比较是否与选手号相同
  137.               jz               DISP;相同跳转到DISP
  138.               inc               bl;不相同加1继续比较
  139.               LOOP               GKEY
  140. ;**********************************再查表并显示抢答的一组
  141. DISP:
  142.               inc bl
  143.               mov al,segdata[bx]
  144.               mov dx,IPC;指向C8255C口
  145.               not al
  146.               out dx,al;数码管输出选手号
  147.               mov tmp,al;将选手号赋给tmp(3fh)
  148.               mov dx,IPB;指向C8255B口
  149. ;*********************************延时等待计时
  150. waits:
  151.               call delay10
  152.               in al,dx;获取B口内容
  153.               cmp al,11011111b              ;判断是不是按下计时键
  154.               jz L4;若按下计时键跳转到L4
  155.         jmp waits;等待按下计时键
  156. ;*********************************开始计时,计时完跳回程序最初位置
  157. L4:            
  158. ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  159. mov sxh,0
  160. mov sss,1
  161. ;*********************************初始化
  162.        mov dx,A8255    ;选中控制寄存器  
  163.        mov al,80H   ;命令字 10000000(A、B、C口输出)
  164.        out dx,al    ;初始化A8255

  165.        mov dx,C8253   ;00010110
  166.        mov al,00010100B;通道0、只读低字节、方式2(二进制)
  167.        out dx,al   ;初始化8253   

  168.        mov ax,03E8H  ;十进制为1000   

  169.        mov dx,CPA                            ;指向8253通道0
  170.        mov al,0H
  171.        out dx,al

  172.        mov dx,C8253   ;001000              *****
  173.        mov al,00100100B;通道0、只读高字节、方式2
  174.        out dx,al

  175.        mov dx,CPA   ;指向8253通道0
  176.        mov al,ah
  177.        out dx,al

  178.        mov dx,APC              ;              指向A8255C口
  179.        mov al,00010000B;与8253的start连接,开始计时
  180.        out dx,al
  181.               mov HH,00H;第二位计时器初值
  182.               mov HL,03H;第一位计时器初值
  183.               sti;打开中断
  184. ;********************************初始赋值
  185. LOP1:
  186.        mov ah,00000010B;连接第二个计时器
  187.        mov LP,0
  188. ;********************************数码管计数的显示
  189. LSP:     

  190.        mov bx,offset HH
  191.        mov al,LP
  192.        xlat
  193.        mov bx,offset LED;数码管数据表首地址
  194.        xlat ;查表,AL<-(BX+AL)
  195.             
  196.        mov dx,APB              ;              指向A8255B口
  197.        out dx,al ;输出数据

  198.        mov dx,APA              ;              指向A8255A口
  199.        mov al,ah;(00000010B)与SB1数码管相连
  200.        out dx,al

  201.        mov dx,APA              ;指向A8255A口
  202.        mov al,0H
  203.        out dx,al


  204.        shr ah,1;向右移1(00000001B)
  205.        inc LP

  206.        cmp ah,0H
  207.        jz  LOP1
  208.        loop LSP            
  209. ;.....................................结束计时
  210. ire:
  211.               mov dx,APC;指向A8255C口
  212.               mov al,0
  213.               out dx,al;结束与8253的连接

  214.               mov sss,0
  215. ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  216.               jmp LL
  217. ;********************************延时循环
  218. ;loop1:
  219.               ;loop $
  220.               ;loop AGAIN
  221.               ret
  222. main endp


  223. IT proc
  224.        cli;关闭中断
  225. ;********************************计时100ms   
  226.        inc MS;初始为0H
  227.        cmp MS,200H;调节时间快慢
  228.        jne re;相等跳转(打开中断)
  229.        mov MS,0H
  230.        jmp ad
  231. ;********************************秒的第二位减为0时重新赋值为9
  232. init:
  233.        mov HH,0aH;第二位计时器变为9
  234.        DEC HL;第一位计时器减1
  235.        jmp ad
  236. ;*******************************倒计时计数 C8255实时显示抢答组号
  237. ad:
  238.               push dx
  239.               push ax
  240.               push bx
  241.               push cx
  242.               mov dx,C8255              ;0111 0000 0000b,8255A控制端口地址
  243.               mov al,92H              ;10010010b,方式选择字:PA,PB输入、PC输出
  244.               out dx,al
  245.             
  246.               mov al,tmp
  247.               mov dx,IPC;指向C8255C口
  248.               out dx,al;输出选手号
  249.             
  250.               pop cx
  251.               pop bx
  252.               pop ax
  253.               pop dx
  254.               out dx,al
  255.               mov dx,IPB;指向C8255B口
  256.               in al,dx;获取内容
  257.               cmp al,7fh;判断是否按重置系统键
  258.               jz start;回到start

  259.               cmp sxh,01h
  260.               jnz FH
  261. RES:
  262.               mov HH,0
  263.               mov HL,0
  264.               mov cx,0

  265. FH:
  266.     cmp HL,0;比较第一位计时器是否为0(初始为3)
  267.               JZ  out1;若为0跳转到out1
  268.               cmp HH,0;比较第二位计时器是否为0
  269.               jz  init;第二位计时器变为9,第一位计时器减一(数码管输出)
  270.               jmp oend
  271. ;******************************计数判断以及跳转
  272. oend:
  273.        DEC HH              ;第二位计时器减一
  274.        cmp HH,00H
  275.        jne re
  276.        cmp HL,00H;判断第一位计时器是否为0
  277.        jz out2
  278.        cmp HL,00H
  279.        jz re
  280.        jmp re
  281. out1:
  282.               cmp HH,0;判断第二位计时器是否为0
  283.   jnz oend;不为0跳转oend
  284.               jmp ire;若为0结束计时
  285. ……………………

  286. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整的word格式实验报告文档51黑下载地址(内含清晰图片与完整程序):
竞赛抢答器设计.doc (1.67 MB, 下载次数: 173)
回复

使用道具 举报

ID:271823 发表于 2018-1-5 13:17 | 显示全部楼层
请问你这个项目源码包还有备份保留吗
回复

使用道具 举报

ID:271823 发表于 2018-1-5 13:52 | 显示全部楼层
请问这个项目的源码包还有备份存在吗?可不可以给我发一份呢
回复

使用道具 举报

ID:282852 发表于 2018-2-7 20:19 | 显示全部楼层
有最后50多行的代码吗
回复

使用道具 举报

ID:334927 发表于 2018-6-9 22:26 | 显示全部楼层
为什么按文件里的程序和硬件连接仿真不出结果呢
回复

使用道具 举报

ID:451030 发表于 2018-12-24 16:46 | 显示全部楼层
浚宇y 发表于 2018-6-9 22:26
为什么按文件里的程序和硬件连接仿真不出结果呢

你知道原因了吗?
回复

使用道具 举报

ID:479827 发表于 2019-2-24 15:45 | 显示全部楼层
你的Proteus仿真文件还在吗
回复

使用道具 举报

ID:566282 发表于 2019-6-18 23:57 | 显示全部楼层
有人知道原因了吗,我查了可能是cpu的问题
回复

使用道具 举报

ID:373720 发表于 2019-6-23 15:04 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:1104687 发表于 2023-12-17 17:44 | 显示全部楼层
学长唉。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表