评分系统课程设计-微机接口课程设计报告_第1页
评分系统课程设计-微机接口课程设计报告_第2页
评分系统课程设计-微机接口课程设计报告_第3页
评分系统课程设计-微机接口课程设计报告_第4页
评分系统课程设计-微机接口课程设计报告_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理课程设计PAGEPAGE9计算机科学与技术系课程设计报告学年第1学期课程微机原理与接口技术课程设计名称竞赛评分系统学生姓名学号专业班级网工(2)班指导教师评分系统一、题义分析及解决方案1题意需求分析题目要求是用8086接口芯片设计一个四评委使用的评分系统,接受四个评委的打分,输出的是平均得分。由题目要求分析如下:(1)题目要求四个评委给出自己的打分,可知设计的第一步就是主持人给出一个开始打分的指令,否则任何打分都是无效的;(2)评委们接到打分指令后即可为选手输入分数,先设想用通用可编程键盘/显示接口芯片INTEL8279与小键盘结合实现该步;(3)接收所有评委的打分到指定缓冲区后,开始对数据进行处理,求出平均分;(4)将(3)步求出的平均分显示出来。综合题目要求分析提出以下四个问题:(1)如何实现主持人发出指令表示评分结束?(2)用什么来作为外设让评委进行打分?(3)怎样求平均分?(4)采用什么设备将平均分显示出来?2问题解决方法及思路基于以上问题分析此评分系统是由四个评委组成的一个评分系统。对每位评委给出的分数进行累加,并求出平均分。评委分数范围是0~~10的整数,将4位评委给出的分数累加,由于最高分为10分,则用4位二进制就可以表示每位评委的分数,用8279的RL0~RL7八位连接小键盘,将评委的分数保存到8279的缓冲寄存器中,可同时将4位评委的分数同时输入。对求得平均分进行分析,将4位评委累加后除以4即得到平均分数,除以4后将会出现小数部分如:0.0、0.25、0.50、0.75这4种情况,要将最后得分显示在LED上,就要用4个LED显示,其中第二个LED存在小数点,故用八段LED显示,3个显示要分别进行输出,通过位选码对每一位的显示进行控制,还要通过段选码对每一个LED的每一段进行控制。这样,就能将整个最后得分显示出来了,还要考虑在显示后一位时前一位会不会消失的情况。以上四个问题解决其中(1)、(2)、(4)可以用硬件完成,而(3)即数据处理部分需由软件来完成。2.1硬件部分问题(1)可以利用小键盘上的任意一位输入或逻辑开关的一位来实现。问题(2)评委可通过很多设备进行数据输入,如小键盘、逻辑开关等,小键盘做输入设备其电路简单,但对其编程接受输入数据相对复杂。逻辑开关的电路相对复杂,但编程接受输入数据的程序简单,且兼于实验室设备,故选择小键盘作为输入设备。输入数据会很方便。问题(4)输出设备既可用发光二极管也可用LED显示器,但相对于前者,后者对结果的显示一目了然,故本设计选择LED显示器作输出设备。2.2软件部分(1)读数据程序:采用小键盘与8279芯片相结合,故可8279的相应端口进行合适的参数设置,数据端口地址为0B0H,控制端口的地址为0B1H。RLrr5~RL7八位中最高位作为指令开关。(2)数据处理:每次读数据累加求和,并取数据整数和小数部分,从OUTA0~OUTA3输出到LED显示器.当四个评委均输入完毕,将累加和采用逻辑右移2位的方式求平均分.在计算输入的时候,用两位输入来控制一位数的输入,将AL的值赋给中间变量TEMP,然后将TEMP*10,然后累加,求出输入的数,进行和的累加。(3)数据输出:平均分整数和小数部分分别输出到LED.分析整数0-40之间的数除以4的小数部分,平均分处理方法,(也可采用四舍五入的方法保留一位小数)。十进制和二进制和右移二位平均值十进制整数二进制整数小数部分00000001100.2500321000.500531100.75008410011110510111.25113611011.5115711111.7511881000102210091001102.252103十进制和二进制和右移二位平均值十进制整数二进制整数小数部分101010102.52105111011102.752108……151111113.253113……2010100101551010……35100011……401010001010101010100表1-1:小数部分的求解方法见上表二、硬件设计2.1选择芯片8279图2-18279内部逻辑框图2.1.1芯片8279在本设计中的作用8279连接4*4的键盘及8位显示器的电路,即可显示按下键对应的键值。2.1.2芯片8279的功能分析生产厂家:Intel公司

特性:Intel8279芯片是一种通用的可编程序的键盘、显示接口器件,单个芯片就能完成键盘输入和LED

显示控制两种功能。其内部结构如图6-10-1所示。8279包括键盘输入和显示输出两个部分。

键盘部分提供的扫描方式,可以和64个按键或传感器的阵列相连。能自动消除开关抖动以及N个键

同时按下的保护。

显示部分按扫描的方式工作。可以显示8或16位LED显示块。

一、8279电路工作原理

根据结构框图,分别介绍各部分电路工作原理。

1.I/O控制及数据缓冲器

数据缓冲器是双向缓冲器,连接内、外总线,用于传送CPU和8279之间的命令或数据;I/O控制线是

CPU对8279进行控制的引线。CS是8279的片选信号,CS=0时,8279才被允许读出或写入信息。WR、RD为来自

CPU的控制信号。

A0用于区别信息特性:A0=1时,表示数据缓冲器输入为指令、输出为状态字;A=0时,输入、输出皆为数据。

2.控制与定时寄存器及定时控制

控制与定时寄存器用来寄存键盘及显示的工作方式,以及由CPU编程的其它操作方式。这些寄存器一旦接受并锁存送来的命令,就通过译码产生相应的信号,从而完成相应的控制功能。

定时控制包含基本记数键。首级计数器是一个可编程的N级计数器。N可以2~31之间由软件编程,以便

从外界时钟CLK分频得到内部所需要的100KHZ时钟。然后再经过分频为键盘扫描提供适当的逐行扫描频率和显示扫描时间。

3.扫描计数器

扫描计数器有两种工作方式。按编码方式工作时,计数器作二进制记数。4位记数状态从扫描线SL0~SL3

输出,经外部译码器译码后,为键盘和显示器提供扫描线;按译码方式工作时,扫描计数器的最低二位被译码后,从SL0~SL3输出。因此,SL0~SL3提供了4中取1的扫描译码。

4.回复缓冲器、键盘去抖及控制

来自RL0~RL3的8根回复线的回复信号,由回复缓冲器缓冲并锁存。

在键盘工作方式中,回复线作为行列式键盘的行列输入线。在逐行列输入时,在逐行列扫描时,回复线用来搜索每一行列中闭合的键。当某一键闭合时,去抖电路被置位,延时等待10ms后,再检验该键是否继续闭和,并将该键的地址和附加的移位、控制状态一起形成键盘数据被送入8279内部FIFO(先进先出)存储器。键盘数据格式如下:

D7

D6

D5

D4

D3

D2

D1

D0

控制

移位

扫描

回复

控制和移位(D6、D7)的状态由两个独立的附加开关决定,而扫描(D5、D4、D3)和回复(D2、D1、D0)则是被按键置位的数据。D5、D4、D3来自动扫描计数器,是按下键的行列编码,而(D7D7D7)则来自行/列计数器,它们是根据回复信号而确定的行/列编码。

在传感器开关状态矩阵方式中,回复线的内容直接被送往和相应的传感器RAM(即FIFO存储器)。

在选通输入方式中,回复线的内容在CNTL/STB线的脉冲上升沿被送入FIFO存储器。

5..FIFO/传感器及其状态寄存器

FIFO/传感器RAM是一个双重功能的88RAM。

在键盘或选通方式工作时,它是FIFO存储器,其输入或读出遵循先入先出的原则。FIFO状态寄存器用于存放FIFO的工作状态。例如,RAM是满还是空;其中存有多少数据;是否操作出错等。当FIFO存储器不空,状态逻辑将产生IRQ=1信号向CPU申请中断。

在传感器矩阵方式工作时,这个存储器以是传感器不是存储器。它存放着传感器矩阵中的每一个传感器状态。在此方式中,若检索出传感器的变化,IRQ信号变为高电平,向CPU申请中断。

6.显示RAM和显示地址寄存器

显示RAM用来存储显示数据。容量为168位。在显示过程中,存储的显示数据轮流从显示寄存器输出。显示寄存器分别为A、B两组,OUTA0~3和OUTB0~3可以单独送数,也可以组成一个8位的字。显示寄存器的输出与显示扫描配合,不断从显示RAM中读出显示数据,同时轮流驱动被选中的显示器件,以达到多路复用的目的,使显示器件呈现稳定的显示状态。

显示地址寄存器用来寄存由CPU进行读/写显示RAM的地址,它可以由命令设定,也可以设置成每次读写或写入之后自动递减。

二.管脚、引线与功能

8279采用40引脚封装,其管脚、引线功能如图6-10-2所示。其引脚功能如下:

D0~D7(数据总线):双向、三态总线,和系统数据总线相连;用于CPU和8279间的数据/命令传递。

CLK(系统时钟):输入线,为8279提供内部时钟的输入端。

RESET(复位):输入线,当RESET=1时,8279复位,其复位状态为:

16个字符显示;

编码扫描键盘--双键锁定;

程序时钟编码为31。

CS(片选):输入线,当CS=0时8279被选中,允许CPU对其读、写,否则被禁止。

A0(数据选择):输入线。当A0=1时CPU写入数据为命令字,读出数据为状态字;A0=0时CPU读、写的字节均为数据。

RD、WR(读、写信号):输入线。低电平有效,来自CPU的控制信号,控制8279的读、写操作。

IRQ(中断请求):输出线。高电平有效。

在键盘工作方式中,当FIFO/传感器RAM存有数据时,IRQ为高电平。CPU每次从RAM中读出数据时,IRQ变为低电平。若RAM中仍有数据,则IRQ再次恢复高电平。

在传感器工作方式中,每当检测到传感器状态变化时,IRQ就出现高电平。

SL0~SL3(扫描线):输出线。用来扫描键盘和显示器。它们可以编程设定为编码(4中取1)或译码输出(16取1)。

RL0~RL7(回复线):输入线。它们是键盘矩阵或传感矩阵的列(或行)信号输入线。

SHIFT(移位信号):输入线、高电平有效。该输入信号是键盘数据的最高位(D7),通常用来扩充键开关的功能,作为控制功能键用。

在选通输入方式时,该信号的上升沿可将来自RL0~RL7的数据存入FIFORAM中。

在传感器输入下,该信号无效。

OUTA0~OUTA3(A组显示信号):输出线。

OUTB0~OUTB3(B组显示信号):输出线。

这两组引线都是显示数据输出线,与多位数字显示的扫描线SL0~SL3同步,两组可以独立使用,也可以合并使用。

BD(显示消隐):输出线。低电平有效。该信号在数字切换显示或使用消隐命令时,将显示消隐。

三、命令格式与命令字

8279的操作方式是通过CPU对8279送入命令时来实现编程的。当数据选择端A0置1时,CPU对8279写入数据为命令字,读出的数据为状态字。

8279共有八条命令。其功能及命令字定义分述如下。

1.键盘/显示方式设置命令字

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

D

D

K

K

K

其中:

D7、D6、D5=000方式设置命令特征位。

D

D(D4、D3):来设定显示方式,其定义如下:

00:8个字符显示,左入口

00:16个字符显示,左入口

00:8个字符显示,右入口

00:16个字符显示,右入口

所谓左入口,即显示位置从最左一位(最高位)开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,即显示位置从最右一位(最低位)开始,以后逐次输入的显示字符时,已有的显示字符逐个向左顺序移动。

KKK(D2、D1、D0):用来设定七种键盘、显示工作方式:

000

编码扫描键盘,双键锁定

001

译码扫描键盘,双键锁定

010

编码扫描键盘,N键轮回

011

译码扫描键盘,N键轮回

100

编码扫描传感器矩阵

101

译码扫描传感器矩阵

110

选通输入,编码显示扫描

111

选通输入,译码显示扫描

双键锁定与N键轮回是多键按下时的两种不同的保护方式。双键锁定为两键同时按下提供的保护方法。再消颤周期里,如果有两键同时按下,则只有其中一个键弹起,而另一个键保持在按下位置时,才被认可。N键轮回为N键同时按下的保护方法。当有若干键按下时,键盘扫描能够根据发现他们的顺序,依次将它们的状态送入FIFORAM中。

2.程序时钟命令

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

0

0

1

P

P

P

P

P

其中:

D7、D6、D5=001为时钟命令特征位。

PPPPP(

D4、D3、D2、D1、D0)用来设定外部输入CLK端的时钟进行分频的分频数N。N取值为2~31。例如外部时钟频率为2MHZ,PPPPP被置为10100(N=20),则对输入的外部时钟20分频,以获得8279内部要求的100KMZ的基本频率。

3.读FIFO/传感器RAM命令

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

0

1

0

AI

X

A

A

A

其中:

D7D6D5=010为读FIFO/传感器RAM命令特征位。该命令字只在传感器方式时使用。在CPU读传感器RAM之前,必须使用这条命令来设定传感器RAM中的8个地址(每个地址一个字节)。

AAA(D2、D1、D0)为传感器RAM中的八个字节地址。

AI(D4)为自动增量特征位。当AI=1时,每次读出传感器RAM后地址自动加1使地址指针指向下一个存储单元。这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。

在键盘工作方式中,由于读出操做严格按照先入先出顺序,因此,不需使用此命令。

4.读显示RAM命令

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

0

1

1

AI

A

A

A

A

其中:

D7D6D5=011为读显示RAM命令字的特征位。该命令用来设定将要读出的显示RAM地址。

AAAA(D3、D2、D1、D0)用来寻址显示RAM命令字的特征位。由位显示RAM中有16个字节单元故需要4位寻址。

AI(D4)为自动增量特征位。当AI=1时,每次读出后地址自动加1指向下一地址。

5.写显示RAM命令

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

1

0

0

AI

A

A

A

A

其中:

D7D6D5=100为写显示RAM命令字的特征位。在写显示器RAM之前用该命令用来设定将要写入的显示RAM地址。

AAAA(D3、D2、D1、D0)为将要写入的存储单元地址。

AI(D4)为自动增量特征位。当AI=1时,每次写入后地址自动加1指向下一次写入地址。

6.显示禁止写入/消隐命令特征位

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

1

0

1

X

IW

A

IW

B

BL

A

BL

B

其中:

D7D6D5=101为显示禁止写入/消隐命令特征位。

IW/A、IW/B(D3、D2)为A、B组显示RAM写入屏蔽位。由于显示寄存器分成A、B两组,可以单独送数,故用两位来分别屏蔽。当A组的屏蔽位D3=1时,A组的显示RAM禁止写入。因此,从CPU写入显示器RAM数据时,不会影响A的显示。这种情况通常在采用双4位显示器时使用。因为两个双四位显示器是相互独立的。为了给其中一个双四位显示器输入数据而又不影响另一个四位显示器,因此必须对另一组的输入实行屏蔽。

BL/A、BL/B(D1、D0)为消隐显示位。用于对两组显示输出消隐。若BL=1时,对应组的显示输出被消隐。当BL=0时,则恢复显示。

7.清除命令

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

1

1

0

CD

CD

CD

CF

CA

其中:

D7D6D5=110清除命令特征位。

CDCDCD(D4D3D2)用来设定清除显示RAM方式。共有四种消除方式,见表6-10-1。

CF(D1)用来置空FIFO存储器,当=1时,执行清除命令后,FIFORAM被置空,使中断输出线复位。同时,传感器RAM的读出地址也被置0。

CA(D0)为总清的特征位。它兼有CD和CF的联合效能。在CD=1时,对显示的清除方式由D3、D2的编码决定。

清除显示RAM约需160S。在此期间FIFO状态时的最高位DU=1,表示显示无效。CPU不能向显示RAM写入数据。

8.结束中断/错误方式设置命令

命令格式:

D7

D6

D5

D4

D3

D2

D1

D0

1

1

1

E

×

×

×

×

其中:

D7D6D5=111为该命令的特征位。此命令有两种不同的作用。

(1)作为结束中断命令。在传感器工作方式中使用。每当传感器状态出现变化时,扫描检测电路将其状态写入传感器RAM,并启动中断逻辑,使IRQ变高,向CPU请求中断,并且禁止写入传感器RAM。此时,若传感器RAM读出地址的自动递增特征没有置位(AI=0),则中断请求IRQ在CPU第一次从传感器RAM读出数据时就被清除。若自动递增特征已置位(AI=1),则CPU对传感器RAM的读出并不能清除IRQ,而必须通过给8279写入结束中断/错误方式设置命令才能使IRQ变低。因此在传感器工作方式中,此命令用来结束传感器RAM的中断请求。

(2)作为特定错误方式设置命令。在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=1),则8279将以一种特定的错误方式工作。这种方式的特点是:在8279的消颤周期内,如果发现多个按键同时按下,则FIFO状态字中的错误特征位S/E将置1,并产生中断请求信号和阻止写入FIFORAM。

上述八种用于确定8279操作方式的命令字皆由D7D6D5特征位确定,输入8279后能自动寻址相应的命令寄存器。因此,写入命令字时唯一的要求是使数据选择信号A0=1。

四、状态格式与状态字

8279的FIFO状态字,主要用于键盘和选通工作方式,以指示FIFORAM中的字符数和有无错误发生。其格式为:

D7

D6

D5

D4

D3

D2

D1

D0

DU

S/E

O

U

F

N

N

N

其中:

DU(D7)为显示无效特征位。当DU=1表示显示无效。当显示RAM由于清除显示或全清命令尚未完成时,DU=1。

表6-10-1

CD位定义的清除方式

D4

D3

D2

清除方式

0

将显示RAM全部清零

1

0

将显示RAM清成20H(A组=0010;B组=0000)

1

1

将显示RAM全部置1

0

不清除(若CA=1,则D3、D2仍有效)

4、芯片8279的技术参数表2-102.2选择芯片LED2.2.1LED在本设计中的作用显示最后得分,共三块,一块用来显示其整数部分的十位,一块用来显示其整数部分个位,另一块用来显示其小数部分(保留一位小数)。2.2.2LED的功能分析LED显示电路较为简单,成本也较低,在功能单一的仪器仪表与机电设备中应用较广。但当设备显示的点或位较多时,就需要采用一定的驱动电路与相应的驱动方式。利用专用接口芯片如8255作为计算机芯片的端口扩展,并通过软件编程加外部驱动实现。数字dpgfedcba二进制编码011000000C0H111111001F9H210100100A4H310110000B0H41001100199H51001001092H61000001082H711111000F8H81000000080H91000011090H表2-2.LED显示管段选码编码表2.2.3LED数码管的显示方式(1)静态:数码管显示过程持续得到信号,与数码管接口的I/O口线为专用。特点是无闪烁,元器件多,占I/O线多,无须扫描,节省CPU时间,编程简单。(2)动态:数码管显示过程轮流得到信号,与各数码管接口的I/O口线为共用。特点是有闪烁,元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂(有多个LED时尤为突出)。2.2.4芯片LED的技术参数PcwIfVrIrIf^p对应型号散射颜色BT235-270255≥1.5≤2.5200SEL-10红色BT1441529100405≥0.5≤2.5565绿色BT1341529100405≥0.5≤2.5585蓝色消耗功率PM=150mW最大工作电流IFM=100mA正常工作电流IF=40mA正向压降VF≤1.8V燃亮电压为5v共阴极LED的PM=300mW,IFM=200mA,IF=60mA,VF≤1.8V,VR≥5V,发红光。LED的技术参数分析LED发光二极管的压降一般为1.5-2.0V,其工作电流一般取10-20Ma,发光二极管可应用于直流驱动电路、交流驱动电路和脉冲驱动电路。共阳极公共端接阳极,低电平有效(灯亮),共阳极数码管内部发光二极管的阳极(正极)都联在一起,此数码管阳极(正极)在外部只有一个引脚

共阴极公共端接阴极,高电平有效(灯亮),共阴极数码管内部发光二极管的阴极(负极)都联在一起,此数码管阴极(负极)在外部只有一个引脚2.3小键盘2.3.1小键盘在本设计中的作用评委通过小键盘置数,输入分数。四个评委各个依次打分,系统读取开关量,再将处理后的数据在LED上显示出来。图2-32.3.2小键盘的逻辑图如右图:2.4选择芯片74LS2402.4.174LS240芯片引脚图2.4.274LS240技术参数表2-1374LS240技术参数2.5芯片比较逻辑开关小键盘连线较简单,以逻辑开关的上下切换来表示,易实现,易观察所输入的是哪8位二进制数据。用时短连线较复杂,实现需编程实现CPU对键盘电路的扫描,察看是否有键按下,是哪个键。扫描占用大量CPU时间,是CPU的效率大大降低。表2-148255芯片74LS240和74LS2448279芯片可编程的并行接口芯片,有多种与外设及CPU的连接方法,来满足不同应用要求,减少器件数量支持字节数据的并行传送,有3个8位I/O端口成本:通用且廉价以锁存器接受和输出数据,不可编程。八缓冲器/线驱动器/线接收器(反码三态输出)通用可编程键盘/显示接口芯片,能同时完成键盘输入和显示控制两种功能。键盘接口电路可最多控制64个按键或传感器组成的阵列,可自动消除开关抖动、自动识别键码并具有多键同时按下保护功能。显示接口电路采用自动扫描方式工作,最多可连接16位LED显示器。采用该芯片设计键盘与显示接口电路可简化程序,从而减少CPU运行时间表2-152.6硬件总逻辑图及其说明图2-5实验硬件原理图说明:由于实验室设备中很多芯片已经集成,故给连线带来很大方便性,使的连线简单了许多。8279的RL0~RL7连接4*4键盘,SL0~SL2三位用来74L138的输入,输出的8位作为LED的段选,OUTA0~OUTA3四位作为芯片4511的输入,输出的7位作为LED的位选,8279的数据DB0~DB7与PCI卡的数据线连接,其中A0连接A0,CS连接CS0,读写信号的连接如图。三、程序流程图3.1主程序流程图:开始开始初始化8279扫描按键KEYCOUNT++KEYCOUNT?=9按键转换为键号CX加1CX?=2SUM=TEMP+ALCX=0TEMP=TEMP*10取最后两位(小数)存入AH将前6位移位(除4)存入AL输出整数部分调用小数部分过程结束NYYNNY处理小数子程序:3.3扫描按键子过程:读入数据后3位为1读FIFORAM读入数据后3位为1读FIFORAMCF=1返回CF=0进入读状态进入设置清除命令进入设置清除命令清除显示RAM清除完毕吗?返回3.5程序清单及注释:.MODELTINYPCIBAR3 EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BIT+RAM板卡上的8237提供基地址)Vendor_IDEQU10EBH;厂商ID号Device_IDEQU8376;设备ID号 .STACK100 .DATAIO_Bit8_BaseAddressDW?msg0 DB 'BIOS不支持访问PCI $'msg1 DB '找不到StarPCI9052板卡$'msg2 DB '读8位I/O空间基地址时出错$'SUMDB0H;分数和TEMP DB0H ;中间变量KEYCOUNTDB ?;按键数目COUNTDB?;乘10的时候,保存AL所用的中间变量LED_TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H;不带小数点的整数DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EHLED_TBB DB 040H,079H,024H,030H,19H,12H,02H,078H;带小数点的整数DB 000H,10H,08H,03H,046H,021H,06H,0EHCMD_8279DW 00B1H ;8279命令字、状态字地址DATA_8279DW 00B0H ;8279读写数据口的地址,由于偏移地址则CS接PCI卡的CS5!!!.CODESTART: MOVAX,@DATA MOVDS,AX NOP CALLInitPCI CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址 CALLINIT8279 ;初始化子程序 MOVKEYCOUNT,0 MOVCX,0 ;;主程序START1: CALLIfExit JZ START11 JMPExitSTART11:CALLSCAN_KEY ;键扫描 JNCSTART1 ;没有按键 XCHGAL,KEYCOUNT INCAL CMPAL,9 JNZSTART2 MOVCX,0;在进入下一个数的输入的时候,由于CX是判断两位输入是一个数,故要清零!! MOVKEYCOUNT,0 CALLINIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示 MOVAL,SUM ;计算部分CMPAL,28HJNENOTSHIMOVAL,01HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,0HLEABX,LED_TBB ;字型码表XLATCALLWRITE_DATAMOVAL,0HCALLXIAOSHUJMPHUANNOTSHI:;上面处理等于10的情况,下面的分支是小于10的情况PUSHAXMOVAL,0HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAPOPAXMOVBL,ALANDAL,00000011B;将小数的两位取出MOVBH,ALMOVAL,BLANDAL,1111100B;将整数的六位取出MOVCL,2SHRAL,CL;AL里保存整数部分MOVAH,BH;AH里保存小数部分MOVCL,00H;主程序需要CL进行循环,所以在计算以后将CL清零ANDAL,3FHLEABX,LED_TBB ;带小数点的字型码表XLATCALLWRITE_DATA MOVAL,AHCALLXIAOSHU;计算部分HUAN: MOVSUM,0 CALLINIT8279_1 JMPSTART1START2: XCHGAL,KEYCOUNT CALLKEY_NUM ;键值转换为键号CMPAL,09H;输入的键值不在0~9范围内,及输入错误,重新输入 JGCHULI INCCLCMPCL,2JNENO10MOVCL,0;主程序需要CL进行循环,所以在计算以后将CL清零ADDTEMP,AL;求TEMP+AL的值MOVAH,TEMPCMPAH,0AH;输入的值大于10的话,重新输入JGCHULI ADDSUM,AH MOVTEMP,0H JMPNO9NO10:MOVCOUNT,AL;求TEMP*10的值MOVAH,0AHMULAHMOVTEMP,ALMOVAL,COUNTNO9: LEABX,LED_TAB ;字型码表 XLAT CALLWRITE_DATA JMPSTART1CHULI:LEABX,LED_TAB ;字型码表 XLAT CALLWRITE_DATACALLINIT8279_1MOVSUM,0MOVKEYCOUNT,0JMPSTART1START_EXIT:JMP$;;处理小数部分XIAOSHUPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXCMPAL,0HJEX0CMPAL,01HJEX1CMPAL,02HJEX2CMPAL,03HJEX3X0:MOVAL,0HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,0JMPX4X1:MOVAL,02HANDAL,3FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HJMPX4X2:MOVAL,05HANDAL,3FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,0HJMPX4X3:MOVAL,07HANDAL,3FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HX4:ANDAL,3FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAXIANSHI:CALLSCAN_KEY ;键扫描 JNCXIANSHI ;键的输入来控制显示结果的时间POPDXPOPCXPOPBXPOPAXXIAOSHUENDP;;8279初始化INIT8279PROCNEARMOVDX,CMD_8279;CMD_8279为写命令地址、读状地址 MOVAL,34H ;可编程时钟设置,设置分频系数(20分频) OUTDX,AL MOVAL,0H ;8位字符显示,左边输入,外部译码键扫描方式,双键互锁,10H右入口 OUTDX,AL CALLINIT8279_1 RETINIT8279ENDPINIT8279_1PROCNEARCALLCLEAR ;清显示 MOVAL,90H ;从第一个数码管开始移位显示,写显示RAM命令 OUTDX,AL RETINIT8279_1ENDP;;清除CLEAR PROCNEARMOVDX,CMD_8279 MOVAL,0DEH ;清除命令,将显示RAM全部置1 OUTDX,ALWAIT1: IN AL,DX TESTAL,80H;10000000B,写显示RAM,初始位为0000 JNZWAIT1 ;显示RAM清除完毕吗? RETCLEAR ENDP;;扫描SCAN_KEYPROCNEARMOVDX,CMD_8279IN AL,DX ;读状态READ_FIFO:ANDAL,7 JZ NO_KEY ;是否有键按下READ: MOVAL,40H OUTDX,AL ;读FIFORAM,初始地址为000H MOVDX,DATA_8279 IN AL,DX STC ;有键SCAN_KEY1:RETNO_KEY: CLC ;无键按下,清CF JMPSCAN_KEY1SCAN_KEYENDP;;键值转换KEY_NUM PROCNEAR ANDAL,3FH;00111111B清除高两位,键值转换为键号 RETKEY_NUM ENDP;;读数据WRITE_DATAPROCNEARMOVDX,DATA_8279;DATA_8279为读写数据口的地址 OUTDX,AL RETWRITE_DATAENDP;PCI卡初始化IfExit PROCNEAR PUSHAXPUSHDX MOVAH,06HMOVDL,0FFH INT21H POPDX POPAX RETIfExit ENDPInitPCIPROC NEARMOV AH,00HMOV AL,03HINT 10H ;清屏MOV AH,0B1HMOV AL,01HINT 1AHCMP AH,0JZInitPCI2LEA DX,msg0InitPCI1:MOV AH,09H INT 21H JMP ExitInitPCI2:MOV AH,0B1H MOV AL,02H MOV CX,Device_ID MOV DX,Vendor_ID MOV SI,0 INT 1AH JNC InitPCI3 ;是否存在StarPCI9052板卡 LEA DX,msg1 JMP InitPCI1InitPCI3: MOV DI,PCIBAR3 MOV AH,0B1H MOV AL,09H INT 1AH ;读取该卡PCI9052基地址 JNC InitPCI4 LEA DX,msg2 JMP InitPCI1InitPCI4: AND CX,0FFFCH MOV IO_Bit8_BaseAddress,CX RETInitPCI ENDPModifyAddressPROCNEAR ADDCMD_8279,CX ADDDATA_8279,CX RETModifyAddressENDPExit: MOVAH,4CHINT21HENDSTART在实验过程中,老师要求将四位评委改成八位评委,并且每位评委分数只占LED显示的一位,程序如下:.MODELTINYPCIBAR3 EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BIT+RAM板卡上的8237提供基地址)Vendor_IDEQU10EBH;厂商ID号Device_IDEQU8376;设备ID号 .STACK100 .DATAIO_Bit8_BaseAddressDW?msg0 DB 'BIOS不支持访问PCI $'msg1 DB '找不到StarPCI9052板卡$'msg2 DB '读8位I/O空间基地址时出错$'SUMDB0H;分数和TEMP DB0H ;中间变量KEYCOUNTDB ?;按键数目COUNTDB?;乘10的时候,保存AL所用的中间变量LED_TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H;不带小数点的整数DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EHLED_TBB DB 040H,079H,024H,030H,19H,12H,02H,078H;带小数点的整数DB 000H,10H,08H,03H,046H,021H,06H,0EHCMD_8279DW 00B1H ;8279命令字、状态字地址DATA_8279DW 00B0H ;8279读写数据口的地址,由于偏移地址则CS接PCI卡的CS5!!!.CODESTART: MOVAX,@DATA MOVDS,AX NOP CALLInitPCI CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址 CALLINIT8279 ;初始化子程序 MOVKEYCOUNT,0 MOVCX,0 ;;主程序START1: CALLIfExit JZ START11 JMPExitSTART11:CALLSCAN_KEY ;键扫描 JNCSTART1 ;没有按键 XCHGAL,KEYCOUNT INCAL CMPAL,9 JNZSTART2 MOVKEYCOUNT,0 CALLINIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示 MOVAL,SUM ;计算部分CMPAL,48HJNENOTSHIMOVAL,09HLEABX,LED_TBB ;字型码表XLATCALLWRITE_DATAMOVAL,0HCALLXIAOSHUJMPHUANNOTSHI:PUSHAXPOPAXMOVBL,ALANDAL,00000111B;将小数的两位取出MOVBH,ALMOVAL,BLANDAL,11111000B;将整数的六位取出MOVCL,3SHRAL,CL;AL里保存整数部分MOVAH,BH;AH里保存小数部分LEABX,LED_TBB ;带小数点的字型码表XLATCALLWRITE_DATA MOVAL,AHCALLXIAOSHU;计算部分HUAN: MOVSUM,0 CALLINIT8279_1 JMPSTART1START2: XCHGAL,KEYCOUNT CALLKEY_NUM ;键值转换为键号CMPAL,09H;输入的键值不在0~9范围内,及输入错误,重新输入 JGCHULI MOVAH,ALCMPAH,09H;输入的值大90的话,重新输入JGCHULI ADDSUM,AH JMPNO9NO9: LEABX,LED_TAB ;字型码表 XLAT CALLWRITE_DATA JMPSTART1CHULI:LEABX,LED_TAB ;字型码表 XLAT CALLWRITE_DATACALLINIT8279_1MOVSUM,0MOVKEYCOUNT,0JMPSTART1START_EXIT:JMP$;;处理小数部分X5:MOVAL,06HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,02HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HJMPX8X6:MOVAL,07HANDAL,1FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,0JMPX8X7:MOVAL,08HANDAL,1FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,07HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HJMPX8XIAOSHUPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXCMPAL,0HJEX0CMPAL,01HJEX1CMPAL,02HJEX2CMPAL,03HJEX3CMPAL,04HJEX4CMPAL,05HJEX5CMPAL,06HJEX6CMPAL,07HJEX7X0:MOVAL,0HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,0HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,0JMPX8X1:MOVAL,01HANDAL,1FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,02HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HJMPX8X2:MOVAL,02HANDAL,1FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,0HJMPX8X3:MOVAL,03HANDAL,1FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,07HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,05HJMPX8X4:MOVAL,05HANDAL,1FHLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,00HLEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAMOVAL,00HJMPX8X8:LEABX,LED_TAB ;字型码表XLATCALLWRITE_DATAXIANSHI:CALLSCAN_KEY ;键扫描 JNCXIANSHI ;键的输入来控制显示结果的时间POPDXPOPCXPOPBXPOPAXXIAOSHUENDP;;8279初始化INIT8279PROCNEARMOVDX,CMD_8279;CMD_8279为写命令地址、读状地址 MOVAL,34H ;可编程时钟设置,设置分频系数(20分频) OUTDX,AL MOVAL,0H ;8位字符显示,左边输入,外部译码键扫描方式,双键互锁,10H右入口 OUTDX,AL CALLINIT8279_1 RETINIT8279ENDPINIT8279_1PROCNEARCALLCLEAR ;清显示 MOVAL,90H ;从第一个数码管开始移位显示,写显示RAM命令 OUTDX,AL RETINIT8279_1ENDP;;清除CLEAR PROCNEARMOVDX,CMD_8279 MOVAL,0DEH ;清除命令,将显示RAM全部置1 OUTDX,ALWAIT1: IN AL,DX TESTAL,80H;10000000B,写显示RAM,初始位为0000 JNZWAIT1 ;显示RAM清除完毕吗? RETCLEAR ENDP;;扫描SCAN_KEYPROCNEARMOVDX,CMD_8279IN AL,DX ;读状态READ_FIFO:ANDAL,7 JZ NO_KEY ;是否有键按下READ: MOVAL,40H OUTDX,AL ;读FIFORAM,初始地址为000H MOVDX,DATA_8279 IN AL,DX STC ;有键SCAN_KEY1:RETNO_KEY: CLC ;无键按下,清CF JMPSCAN_KEY1SCAN_KEYENDP;;键值转换KEY_NUM PROCNEAR ANDAL,3FH;00111111B清除高两位,键值转换为键号 RETKEY_NUM ENDP;;读数据WRITE_DATAPROCNEAR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论