基于TPCUSB实验系统的时钟系统设计_第1页
基于TPCUSB实验系统的时钟系统设计_第2页
基于TPCUSB实验系统的时钟系统设计_第3页
基于TPCUSB实验系统的时钟系统设计_第4页
基于TPCUSB实验系统的时钟系统设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、基于基于 tpc-usb 实验系统的时钟系统设计实验系统的时钟系统设计 目录目录 第一部分 概论.2 第二部分 硬件设计.2 1. 硬件基础.2 2. 硬件设计.3 2.1 基于 tpc-usb 实验系统总线与时钟系统的连接 .3 2.2 可编程计数/定时器 8253.5 2.2.1 8253 主要特性.5 2.2.2 8253 的内部结构和引脚.5 2.2.3 8253 的工作方式.6 2.3 可编程并行 i/o 接口 8255a.7 2.3.1 可编程并行输入输出接口 8255a 的结构.7 2.3.2 8255a 有三种基本的工作方式.9 2.4 led 七段显示器.9 2.4.1 共阳

2、极 led 显示器.10 2.4.2 共阴极 led 显示器.10 2.4.3 多位数字静态显示及其接口.10 2.4.4 多位数字动态显示及其接口.10 2.5 硬件测试.10 第三部分 软件设计.11 3.1 8253、8255、8259 的初始化.11 3.1.1 8253 的初始化.11 3.1.28255 的初始化.12 3.1.2.1 设置 8255 的方式字.12 3.1.38259 的初始化.13 3.1.3.1 设置 8259 的方式字.13 3.2 时钟程序设计.14 3.3程序清单.16 第四部分 系统测试与性能分析.23 4.1 系统测试.23 4.2性能分析.25 第

3、五部分 系统展望.25 第六部分 实验过程中的问题与解决方法.25 第七部分 实验感想及对课程的建议.26 第一部分第一部分 概论概论 随着计算机使用的日益普及,计算机已成为了人们日常生活中不可分割的一部分。而时 钟,不仅早已是人们日常生活的必需品,更是计算机系统核心运行中作为中流砥柱的其中一部 分。这点在分时操作系统中尤为体现。 微机系统常需要为处理机和外设提供时间标记,或对外部事件进行技术。例如系统的程 序切换,向外设定是周期性地输出控制信号,外部事件发生次数达到规定值后产生中断,以及 统计外部事件发生的次数等,因此,需要解决系统的定时问题。 定时的本质就是计数。只要把若干小片计时单元累加

4、起来,就可获得一段时间。而微机 系统中的定时分为两类:一类是计算机本身运行的时间基准内部定时,是计算机每种操作 按照严格的时间节拍执行;另一类是外部设备实现某种功能时,在外设与 cpu 之间,或外设 与外设之间的时间配合外部定时。前者,已由 cpu 硬件结构确定,有固定的时许关系, 无法修改;后者,由于外设或被控对象的任务不同,功能各异,没有一定的模式,需要用户自 己设定。而用户在考虑外设和 cpu 连接时,不能脱离计算机的定时要求,应以计算机的时序 关系作为一句,设计外部定时机构,以满足计算机的时序要求,进行时序配合。至于在一个过 程控制中,用户可以按照各个控制对象的性质和规律独立进行设计各

5、自的定时关系。 本文基于 tpc-usb 试验系统,通过可编程计数/定时器 8253、可编程并行 i/o 接口 8255a 及 led 七段显示器进行具有可取当前系统时间、可自定义时间并运行及显示功能的时 钟系统设计。经实验验证,该设计方案是完全可行的。 第二部分第二部分 硬件设计硬件设计 1. 硬件基础硬件基础 1.1 tpc-usb 实验系统简介实验系统简介 tpc-usb 通用微机接口实验系统是清华大学计算机系研制,清华大学科教仪器厂生产的学 生实验系统。该系统由一块 usb 总线接口模块、一个扩展实验台及软件集成实验环境组成。 usb 总线接口模块直接通过 usb 总线电缆与 pc 机

6、相连,模块与实验台之间由一条 50 芯扁平 电缆连接。 (1)50 芯总线信号插座及总线信号插孔 50 芯总线信号插座在实验台左上方,总线插座信号安排如上表。各总线信号采用“自 锁紧”插孔在标有“总线”的区域引出,有数据线 d0-d7、地址线 a19-a0、i/o 读写信号 ior iow、存储器读写信号 memr memw、中断请求 irq、dma 申请 drq、dma 回答 dack、aen 等。 (2)时钟电路 如下图所示,输出 1mhz、2mhz 两种信号,供定时器/计数器、a/d 转换器、串行接口 实验使用。 2. 硬件设计硬件设计 2.1 基于基于 tpc-usb 实验系统总线与时

7、钟系统的连接实验系统总线与时钟系统的连接 基于 tpc-usb 实验系统总线与时钟系统的连接入下图 2.1: 图图 2.1:系统连接框图:系统连接框图 (1)如图 2.1 所示,频率为 1mhz 的脉冲输入经过 8253 通道 0 的 clk1 ,变成频率为 100hz 的方 波由 out0 输入,再将 out0 输出的脉冲由 clk1 输送给 8253 的通道 1,最后由 out1 输出 1 个 每秒产生一个长度为 1/100 秒长度的低电平的脉冲信号;再将这个信号经过反相输入到 tpc- usb 实验系统的中断口 irq3,从而实现每秒送出一个中断信号给 cpu,cpu 实现计时功能。 c

8、pu 经由 8255 芯片将时间信息输送到 7 段数码管显示。 (2)主要信号线连接论述: d0d7:tpc-usb 实验系统上的 d0d7 是 8088 上的数据线,用来传送数据;而 8255、8253 是 i/o 芯片,它们的数据线是用于 cpu 与芯片间传送数据的,因此可以把 8255、8253 上的数据线直接与 tpc-usb 实验系统上的 d0d7 相连。 rd 与 wr:8255、8253 芯片对于 cpu 来说是 i/o 设备,要使 8255、8253 芯片上的 rd 和 wr 信号有效,必须使 cpu 的 i/o 与 wr、rd 同时有效,而 pc/xt 总线上的 ior 和

9、iow 是 i/o 读和 i/o 写,所以只要把 8255、8253 芯片上的 wr、rd 分别与 pc/xt 总线 上的 ior 和 iow 直接相连就可以了。当 cpu 执行外设写操作时,wr 有效;当 cpu 执 行外设读操作时,rd 有效。 clk:tpc-usb 实验系统上提供了 1mhz 和 2mhz 的时钟,因此,只需把 tpc-usb 系 统板上的 1mhz 直接连接到 8253 的 clk0 信号. a0、a1:a0、a1 是 8255、8253 芯片的控制/与端口选择,分时复用。用来区分当前读/写 的是控制端口还是其他端口(8255 为 a、b、c 口地址;8253 则为选

10、择 3 个通道中的一个)。 将 a0、a1 直接与 8255、8253 芯片相连,通过改变 a0、a1 的值可以实现片内选。 8253 芯片 8255 芯片 pa0pa6:pa0pa6 是 8255 端口 a 的口,与 7 段数码管的 ag 直接相连,输送时间信息. pc0、pc1:pc0、pc1 是 8255 端口 c 的口,与 7 段数码管的 s1、s2 直接相连,其中 s1、s2 是 7 段数码管的端口,系统通过 c 口输送信息到 s1、s2 选通数码管工作. gate0、gate1:门控输入信号控制计数器工作(允许/禁止计数,启动/停止计数) , 可分成电平控制和上升沿控制两种类型。用

11、于系统要求门控信号总为高,因此直接与 5v 相 连 clk1-out0:由于系统要求获得 1hz 的中断频率,tpc-usb 只能提供 1mhz 的脉冲信号, 而 8253 的初始字最大为 65563,不能满足要求.因此需把 1mhz 的脉冲信号降频来满足 8253 对输入频率的要求.因此先将 1mhz 经过 8253 通道 0 降频后由 out0 输出到通道 1 的 clk1,因此直接将 clk1 连接到 out0 上。 out1-非门:由 8253 通道 1 产生的 1mhz 的脉冲信号通过中断 irq3 引起系统中断程序 实现时钟功能。irq3 当有高电平时就向 cpu 发出个中断请求,

12、而通道 1 产生的脉冲信号 为每秒由 out1 发出个长度为 0.01 秒的低电平;因此需要通过非门将信号转换成高电平。 2.2 可编程计数可编程计数/定时器定时器 8253 2.2.1 8253 主要特性主要特性 有 3 个独立的 16 位计数器/定时器,即 3 个独立通道 每个计数器有 6 种工作方式 按二进制或十进制(bcd 码)计数 计数脉冲可以是系统脉冲,也可以是外部事件 触发方式可以是软禁啊出发或硬件触发 2.2.2 8253 的内部结构和引脚的内部结构和引脚 8253 为 24 脚,双列直插式芯片。其引脚排列与内部结构如图所示。和 8255a 一样,其内 部有一个三态数据缓冲器,

13、以保证未选中时内部数据线和系统数据总线是“脱开”的。三个计数 器在使用时是独立的。每一个计数器对外有三个引脚:clk 为计数脉冲输入,gate 为门控 信号(允许禁止计数),out 为输出信号。每一个计数器占用一个 io 端口地址,加上控制 字口,一片 8253 共占用 4 个 io 端口地址。和 8255a 一样,8253 也设置了两个用于端口寻 址的引脚 a1 和 a0。这两个信号与片选信号、cpu 读写信号相配合,实现对 8253 内部端口 的操作。 clk 时钟输入信号在计数过程中,此引脚上每输入一个时钟信号(下降沿) ,计数器的计 数值减 1 gate 门控输入信号控制计数器工作(允

14、许/禁止计数,启动/停止计数) ,可分成电平控制 和上升沿控制两种类型 out 计数器输出信号当一次计数过程结束(计数值减为 0) ,out 引脚上将产生一个输出 信号 2.2.3 8253 的工作方式的工作方式 8253 共有 6 种工作方式,下面分别说明每一种方式的要点。 2.2.3.1 方式方式 0计数到终点输出变为高电平计数到终点输出变为高电平 当将某计数器设置成方式 0 后,其输出 out 变低电平,装入初值后,仍保持低电平。门控 为高电平开始计数。每来一个计数脉冲 clk,计数器的值减 1,当计数到达终点即计数器的值 变为 0 时,out 变为高电平。在计数期间可用门控信号暂停计数

15、(即门控为低电平时,计数暂 停)。 输出端 out 由低变高可以用来作为中断请求信号,也可作为查询信号,也可直接去控 制某个操作,如让某个开关动作。 2.2.3.2方式方式 1可编程单稳可编程单稳 所谓单稳,是指这样的电路,它有两种状态,但只能稳定在一种状态。在一定的外界作用下, 它能从这一种状态进入到另一种状态,但经过一定时间后,又自动恢复到原来的状态。 这个时间参数一般是由外加电阻、电容的值决定的。8253 的方式 1 就是模拟单稳电路,其处 于非稳定状态的时间可通过程序进行设置。 一旦 8253 的某计数器被设置成方式 1 后,其 out 变高电平,装入初值后,仍保持高电平, 等待门控上

16、升沿到来。门控为电平高后的第一个 clk 下降沿时 0ut 变低电平,初值又被重新 装入一次,并开始计数,每来一个计数脉冲,计数器的值减 1。当减到 0 时 out 变高电平。 此后门控的上升沿可再次启动此过程。 门控上升沿的到来使得 out 开始输出负脉冲(这种现象 叫触发),其宽度为 clk 的周期乘以预置值。如果在负脉冲期间,即计数未到达终点,gate 再来一个上升沿,则再次赋初值,重新开始计数。 2.2.3.3 方式方式 2分频脉冲发生器分频脉冲发生器(分频器分频器) 方式 2 用来对输入脉冲(即计数脉冲 clk)n 分频(n 为预置的初值),在输出信号周期中低电 平的时间为一个 cl

17、k 周期。 设置此方式后,out 变高电平,装入初值后便自动开始计数,减到 1 时 out 变低电平。经 过一个 clk 周期,out 恢复高电平,且计数器又自动装入初值,重新开始计数。如此循环下 去。如图 623 所示是工作在方式 2 的示意图。在上述过程中 gate 应一直保持高电平。若 gate 变低电平将禁止计数,并使输出为高电平。在 gate 再次变高电平时,计数器将重新装 入预置的初值,并开始计数。 2.2.3.4 方式方式 3方波发生器方波发生器 方式 3 类似于方式 2,输出是周期性的。不同的是方式 3 输出方波。如果预置的初值 n 为偶数, 则输出周期中高电平和低电平的宽度相

18、等;如果 n 为奇数,则输出周期中高电平比低电平多 一个 clk 周期的时间,当 n 相当大时,也可认为是方波。当然,一般采用方式 3 时,置初值 为偶数。 设置成方式 3 后,out 变高电平,装入初值后便自动开始计数。如初值为偶数,每个 clk 使计数器减 2,计到终点改变电平。如初值为奇数,则输出为高电平时第一个 clk 使计数器 减 1,随后每个 clk 使计数器减 2;输出为低电平时第一个 clk 使计数器减 3,随后每个 clk 使计数器减 2。每当计数到终点都会改变电平,初值又被重新装入,并开始计数。如此循 环下去,如图 624 所示。和方式 2 一样,gate 变低可暂停计数。

19、 2.2.3.5 方式方式 4软件触发选通软件触发选通 设置成方式 4 后,out 变高电平,写入计数值后自动开始计数(所以称之为软件触发),计数 到终点输出一个 clk 周期的低电平脉冲。gate 变低可暂停计数,用 gate 的上升沿可重新 赋初值,并开始计数。 2.2.3.6 方式方式 5硬件触发选通硬件触发选通 设置成该方式后,out 变高电平,写入计数值后需等待 gate 上升沿的到来才开始计数(所 以称之为硬件触发)。计数到终点也输出一个 clk 周期的低电平脉冲。计数过程中不受 gate 电平的影响。此后,用 gate 的上升沿可重新赋初值,并开始计数。 在本时钟系统设计中,分别

20、使用了在本时钟系统设计中,分别使用了 8253 的方式的方式 3 和方式和方式 2 作为系统工作的方式。作为系统工作的方式。 2.3 可编程并行可编程并行 i/o 接口接口 8255a 2.3.1 可编程并行输入输出接口可编程并行输入输出接口 8255a 的结构的结构 intel 8255a 是一种可编程并行输入输出接口。所谓并行,是指数据的各位同时传送。 8255a 只支持字节数据的并行传送。 8255a 为 40 引脚、双列直插封装。其引脚排列及内部结构示意图如图所示。 由图可看出,它由数据端口、组控制电路、数据总线缓冲器、读写控制逻辑等组成。 2.3.1.1数据端口数据端口 8255a

21、有 3 个 8 位数据端口:端口 a、端口 b 和端口 c,分别简称为 a 口、b 口和 c 口。它 们对外的引线分别是 pa7pa0、pb7pb0 和 pc7pc0。每一个端口都可由程序设定为输 入或输出。c 口可分成两个 4 位的端口:c 高 4 位口(pc7pc4)和 c 低 4 位口(pc3pc0)。 2.3.1.2 a 组、组、b 组控制电路组控制电路 在 8255a 内部,3 个端口分成两组来管理。a 口及 c 高 4 位口为 a 组,b 口及 c 低 4 位 口为 b 组。两组分别设有控制电路,控制电路根据“控制字”进行相应的控制。 2.3.1.3 数据总线缓冲器数据总线缓冲器

22、这是一个 8 位三态双向缓冲器,作为 8255a 与系统总线的接口。对于和系统数据总线直接相 连的接口芯片来说,一般都应具有三态缓冲器,以保证在芯片未被选中时和系统总线处于“脱 开”状态。数据总线缓冲器还有抑制噪音、增强驱动能力的功能。 2.3.1.4 读写控制逻辑读写控制逻辑 该电路根据 cpu 读、写等有关信号对 8255a 内部进行读、写控制,用于管理所有的数据、 控制字和状态字的传送。对 8255a 进行控制的信号有: cs(上划线)片选信号,低电平有效。为低时,8255a 被选中。 rd(上划线)读信号,低电平有效。该信号为低且 cs(上划线)有效时,8255a 送指 定端口的数据或

23、状态至 cpu。 wr(上划线)写信号,低电平有效。该信号为低且 cs(上划线)有效时,将数据总线 上的数据写到指定的数据端口或控制字寄存器。 reset复位信号,高电平有效。该信号用来清除所有的内部寄存器,并将 a 口、b 口和 c 口均置成输入状态。 a1、a0端口寻址信号。8255a 含有 3 个数据端口和一个控制字端口,需要有两个输 入端来进行端口选择,这就是 a1 和 a0。 一般情况下,a1 和 a0 分别接系统地址总线的最低两位(a1 和 a0)。但在 8086 系统中由于地 址的最低位 a0 兼作低 8 位的数据传送控制信号,不能再参与 8255a 内部端口的寻址,所以端 口寻

24、址引脚 al、a0 一般接系统地址总线的 a2 和 a1。当确定了端口寻址引脚的接法,8255a 的各个端口的地址也就确定下来。一片 8255a 要占用 4 个 io 端口地址,a 口的地址可作为 其他端口地址的基准,因此 a 口的地址被称为基地址(简称基址)。和存储器芯片片选信号的产 生相类似,8255a 的片选信号由用于片内端口寻址以外的地址(高位地址)译码产生。 2.3.2 8255a 有三种基本的工作方式有三种基本的工作方式: 2.3.2.1 方式方式 0 方式 0 为基本的输入输出方式,传送数据时不需要联络信号。a 口、b 口和 c 口(或 c 高 4 位口及 c 低 4 位口)均可

25、独立设置成方式 0 输入口或方式 0 输出口。 2.3.2.2 方式方式 1 方式 l 为选通输入输出方式,即需要进行联络的输入输出。a 组、b 组的 8 位口(a 口或 b 口)可被设置为方式 1 输人口或方式 1 输出口,而这时要用相应 c 口的 3 根线作联络线。 2.3.2.3 方式方式 2 方式 2 为双向传送。该方式要使用 c 口的 5 根线作联络线。由于 c 口只有 8 根线,因 此只能有一组使用方式 2 确定为 a 组。当 a 组被设置成方式 2 时,a 口被设置成双向端口, 即既可以输入数据,也可以输出数据,c 口的 5 根线被指定为联络线。 2.3.2.4 方式方式 1、2

26、 用到的联络信号用到的联络信号 当将 8255a 设置为方式 1 或方式 2 时,要使用 c 口中的一些线传输联络信号。这些信 号可 归结为五种(方式 1 仅使用其中的三种): (1)stb(上划线)(strobe) 选通,输入信号,由外设提供,低电平有效。该信号将外设提供的数据送人端口的输入缓冲 器。 (2)ibf(input buffer full) 输入缓冲器满,输出信号,高电平有效。该信号有效表示来自外设的数据已经进入输入缓冲 器,但 cpij 尚未取走,外设暂时不要送新的数据。 (3)obf(上划线)(output buffer full) 输出缓冲器满,输出信号,低电平有效。为低时

27、表示 cpu 已把数据送到指定端口,该端口外 围引线上的数据有效,外设可以利用了。 (4)ack(上划线)(acknowledge) 来自外设的回答,输入信号。为低时表示输出的数据已被外设接收,cpu 可以输出下一个数 据。 (5)intr 中断请求,送往 cpu。输入和输出都可以引起中断。对于输入,外设的数据进入输入缓冲 器后 8255a 产生 intr,请求 cpu 取走数据;对于输出,当外设利用完输出缓冲器中的数据 之后会发出一个回答信号 ack(上划线) ,8255a 在 ack(上划线)后沿的作用下产生 intr,请求 cpu 输出下一个数据。 本时钟系统设计中选用本时钟系统设计中选

28、用 8255a 作为作为 8 位位 led 接口电路,端口方式接口电路,端口方式 a 和和 b 都工作于方式都工作于方式 0,端,端 口口 b 作为作为 8 个显示器共用的字型码输出线。端口个显示器共用的字型码输出线。端口 a 提供位选码,任何时候只有一位输出提供位选码,任何时候只有一位输出 0,即,即 低电平,经反相,只有一个显示器阳极高电平,只有一个显示器能显示其代码。低电平,经反相,只有一个显示器阳极高电平,只有一个显示器能显示其代码。 2.4 led 七段显示器七段显示器 七段显示器是有七段 led 适当地排列并封装在一起而构成的。在常用的七段显示器内, 各个 led 可按共阳极或共阴

29、极连接。他们分别用不同的驱动电路来驱动。 2.4.1 共阳极共阳极 led 显示器显示器 对于共阳极显示器,其段驱动电路的输出位低电平时,改段的 led 导通并点亮,段驱动电路 应能吸收额定的段导通电流。 2.4.2 共阴极共阴极 led 显示器显示器 在共阴极显示器情况下,其段驱动电路的输出为高电平时,该段的 led 导通并点亮,段驱动 电路能供给额定的段导通电流。 2.4.3 多位数字静态显示及其接口多位数字静态显示及其接口 在多为数字静态显示系统中,每位数字显示器分别都应有各自的锁存、译码和驱动器。用它们 分别缩唇每位待显数字的 bcd 码,经各自的译码器将 4 位 bcd 数码变换为

30、7 位段码,供段驱 动电路去连续地驱动相应数字显示器的每个显示段。 2.4.4 多位数字动态显示及其接口多位数字动态显示及其接口 由软件译码、硬件驱动:选用 8255a 作为 8 位 led 接口电路,端口方式 a 和 b 都工作于方式 0,端口 b 作为 8 个显示器共用的字型码输出线。端口 a 提供位选码,任何时候只有一位输出 0,即低电平,经反相,只有一个显示器阳极高电平,只有一个显示器能显示其代码。 由硬件译码、驱动:各数字显示器公用一个公共的锁存、译码和驱动器。在锁存器仲,待显数 字的 bcd 数码经译码驱动器,驱动各个数字显示器并联着的每个显示段。能被驱动点亮的数 字显示器,能分显

31、示出相应的 bcd 数码,取决于其相应的公共极被选通 本时钟系统设计选用多位数字动态显示的软件译码、硬件驱动方式。本时钟系统设计选用多位数字动态显示的软件译码、硬件驱动方式。 2.5 硬件测试硬件测试 硬件测试主要有两种:静态测试和动态测试。 静态测试:查看硬件的连接是否正确 动态测试:测试系统的时钟显示功能 第三部分第三部分 软件设计软件设计 在软件设计中我们要实现 7 段数码管的显示时间信息,cpu 与接口之间可按查询方式 或中断方式进行数据传送,本设计采用中断方式。cpu 与时钟系统之间用中断方式来交互.通 过硬件中断,实现时钟的计时功能.每次中断就秒数增 1.主程序将时间信息送到寄存器

32、,将寄存 器作为显示子程序的程序入口,通过压栈保护寄存器内容,循环调用子程序输出时间信息到 7 段 数码管.通过 dos 功能调用,监视键盘输入,选择相应的功能. 3.1 8253、8255、8259 的初始化的初始化 3.1.1 8253 的初始化的初始化 时钟系统最基本的要求就是时间变化 的正确时钟系统的,要能准确的反映时间的变 化,系统要及时的处理计时到达的信号.因此我 们的时钟系统采用的是中断方式.8253 有 6 种 工作方式,通过比较 8253 芯片的方式 2 输出 的信号经过非门后能满足中断方式的要求。 时钟的正确性,对于方式确定好后, 8253 的初始化字的选择是至关重要。由于

33、 tpc- usb 系统只能提供 1mhz 的脉冲, 系统要求 中断频率为每秒 1 次,即是要求初始化字为 1000000,远大于 8253 初始字的范围(065553)。 因此我们将使用 8253 的通道 0(工作于方式 3)与通道 1(工作于方式 2) 。 3.1.1.1 设置设置 8253 方式选择控制字方式选择控制字 对于通道 0,采用的是方式 3:方波频 率发生器。选择通道 0,d7d6=00;采用 16 位读写,d5d411;选择工作方式 3,d3d2d1=011;初始字采用 2 进制,d0=0。即 d7d00011011036h 初始化代码:mov al,36h mov dx,2

34、83h out dx,al 对于通道 1,采用的是方式 2:频率发生器。选择通道 0,d7d6=01;采用 16 位读写, d5d411;选择工作方式 2,d3d2d1=010;初始字采用 2 进制,d0=0。即 d7d00111010074h 初始化代码:mov al,74 h mov dx,283h out dx,al 3.1.1.2 设置初始化字设置初始化字 基于本时钟系统与实验环境的客观要求,我们需要将 1mhz 的脉冲信号转换成 1hz 的脉 冲信号。 因此我们对通道 0 的初始字置为 100002710h, 代码为:mov ax,2710h mov dx,280h out dx,a

35、l mov al,ah out dx,al 通道 1 的初始字置为 10064h,代码为: mov ax,64h mov dx,281h out dx,al mov al,ah out dx,al 3.1.2 8255 的初始化的初始化 由于本时钟系统是通过 7 段数码管显示时间信息,不需要 8255 芯片控制,只需要有信号 到,就直接输送到数码管,所以可以用 8255 芯片的方式 0 直接输送信号到 7 段数码管.所以 8255 的初始化相对比较简单。 3.1.2.1 设置设置 8255 的方式字的方式字 本系统使用 8255 工作在方式 0 只完成简单的并行输入输出。故 8255 的初始化

36、为最高 3 位是 100,a、c 低 4 位口负责 输出,故 d4、d3、d0 为 0,其 他位置任意。我们设置为 80h 代码为: mov al,80h mov dx,288h out dx,al 3.1.3 8259 的初始化的初始化 3.1.3.1 设置设置 8259 的方式字的方式字 在本系统中,由于 tpc-usb 实验环境集成了 8259 芯片并已初始化。tpc-usb 实验板上, 固定的接到了 3 号中断 irq3 上,即进行中断实验时,所用中断类型号为 0bh。 只需要在程序中设置中断矢量, 代码为: mov ax,seg int_timer mov ds,ax lea dx,

37、int_timer mov ax,250bh int 21h in al,21h and al,0f7h out 21h,al 3.2 时钟程序设计时钟程序设计 本系统在 8253 芯片保证计时准确的前提下,通过 8253 芯片发送的信号进入中断处理程 序,实现时钟的准确性。 在程序运行过程中,可以从键盘接收指令,从而实现功能的多样化。系统的主程序流程 图,见图图 3.213.21 开始 设置中断 调用 init 子程序 started=1 显示 hour:minute mode=1 clkstop=esc 显示 second mode=1 clkstop=esc 循环显示 hour:minu

38、te 循环显示 hour:minute 返回初始界面 n y y n n 图图 3.21 主程序流程图主程序流程图 中断处理程序采用比较的方式实现时钟计时功能与时钟的数制(逢 60 进 1 归 0 或逢 24 归 0) ,中断程序流程图见图图 3.223.22 关闭中断 second+ second60 second=0 minute+ minute60 minute=0 hour+ hourclock mode(default:local computer),0dh,0ah db 2-set time,0dh,0ah db esc-exit,0dh,0ah,$ mesg2 db input

39、hour(00-23;q to exit):,$ mesg3 db 0ah,0dh,input minute(00-59;q to exit):,$ mesgerr db 0dh,0ah,input error!,0dh,0ah,input again:,$ max db 0 counter db 0 buff db 4 dup(4,?,0,?) started db 0 ;判断是否已初始化. settime db 0 ;判断是否已设置过时间 mode db 0 hour db 00 second db 00 minute db 00 tmp db 0;返回程序界面控制字 al=1bh 则返回

40、 data ends ;= ; 代码段 ;= code segment assume cs:code,ds:data start: mov ax,cs ;设置中断 mov ds,ax mov ax,seg int_timer mov ds,ax lea dx,int_timer mov ax,250bh;中断矢量为 0bh int 21h in al,21h and al,0f7h;开中断 irq3 out 21h,al mov ax,data mov ds,ax startclock: call interface mov tmp,0 cmp started,1 ;检查程序是否已初始化,是则

41、跳过 je rec call init;初始化程序 mov started,1 ;设置为已初始化 rec: mov mode,0 mov bl,hour;显示 hour:minute call disptime ;disptime 子程序,入口为 bl cmp tmp,1bh je startclock mov bl,minute call disptime cmp tmp,1bh je startclock mov bl,0aah ;送入 bl0aah,使 led 灯全黑 call disptime cmp tmp,1bh je startclock cmp mode,1;mode=1 则跳

42、转显示 second je dispsec jmp rec dispsec: mov mode,0;mode=0,不跳转 mov bl,second;显示 second call disptime cmp tmp,1bh je startclock cmp mode,1;跳转至显示 hour:minute je rec jmp dispsec exit:mov ah,4ch;程序结束,返回 dos int 21h ;= ;子程序,初始界面 ;= interface proc beginclk: lea dx,mesg1;初始个比较友好的界面 mov ah,09h int 21h mov ah,

43、07h;无回显输入,功能选择 int 21h cmp al,1 je jmpout cmp al,2 je setting cmp al,1bh jne exit jmp beginclk setting:;设置时间 lea dx,mesg2 mov ah,09h int 21h mov max,23h;限制输入范围 call getinput cmp ah,q je beginclk mov hour,al;得到输入的小时 lea dx,mesg3 mov ah,09h int 21h mov max,59h call getinput cmp ah,q je beginclk mov mi

44、nute,al;得到输入的分钟 mov settime,1 jmpout:ret interface endp ;= ;子程序;功能为输出 7 段 led 显示 bl 为入口 ;= disptime proc mov cx,0f0h;设置时延 recycle: mov al,0;灭灯 mov dx,io8255a out dx,al push cx push bx mov cl,bl;以下显示个位数 and cl,0fh ;屏蔽高 4 位,bl 为要显示的数的个位数 mov ch,0 lea si,led ;置 led 数码表偏移地址为 si add si,cx ;求出对应的 led 数码 m

45、ov al,byte ptr si mov dx,io8255c ;自 8255a 的口输出 out dx,al mov al,1 ;使相应的数码管亮 mov dx,io8255a out dx,al mov cx,3000 delay3:loop delay3 mov al,0;以下显示十位数 mov dx,io8255a out dx,al pop bx mov cl,bl ;bl 为要显示的数 shr cl,4 ;bl 为要显示的数的十位数 mov ch,0 lea si,led ;置 led 数码表偏移地址为 si add si,cx ;求出对应的 led 段码 mov al,byte

46、 ptr si mov dx,io8255c ;自 8255a 的口输出 out dx,al mov al,2 ;使相应的数码管亮 mov dx,io8255a out dx,al mov dx,0ffh;有键按下则置位 mode、tmp mov ah,06 ;无则循环显示 int 21h je dispend mov mode,01 mov tmp,al dispend: pop cx loop recycle ret disptime endp ;= ;中断处理程序;功能为每中断 10 次 second 增 1 ;= int_timer proc ;中断处理程序 push ax push

47、bx push cx push dx push si push di cli;关中断 mov ax,data mov ds,ax mov al,20h out 20h,al mov al,second inc al call hextodec mov second,al cmp second,60h jb intoff mov second,0 mov al,minute inc al call hextodec mov minute,al cmp minute,60h jb intoff mov minute,0 mov al,hour inc al call hextodec mov ho

48、ur,al cmp hour,24h jb intoff mov hour,0 sti;开中断 intoff: pop di pop si pop dx pop cx pop bx pop ax iret int_timer endp ;= ;子程序,功能为获取输入的数字并转化,出口为 al ;= getinput proc reinput: lea dx,buff;dos 10 号功能,获取输入字符串,首位=buff+2 mov ah,0ah int 21h lea si,buff mov al,si+1 cmp al,02h ;限制输入字数 jg disperr mov ah,si+2 c

49、mp ah,q;检查是否 q 退出 je return cmp ah,0;检查输入数字范围是否 0-9 jl disperr cmp ah,9 jg disperr mov al,si+3 cmp al,0 jl disperr cmp al,9 jg disperr and al,0fh ;屏蔽高 4 位 shl ah,04h ;ah 左移 4 位 add al,ah ;al=输入的数 cmp al,0h jl disperr cmp al,max;max= 23 or 59 jg disperr jmp return disperr:;输入错误处理,警告并提示重新输入 mov dx,off

50、set mesgerr mov ah,09h int 21h jmp reinput return:ret getinput endp ;= ;子程序,初始化,设置外部硬件工作方式,并判断是否需初始化时间 ;= init proc cmp settime,1 ;检查是否已设置过时间;否则获取系统时间显示 je kk mov ah,2ch;dos 2ch 号功能,获取系统时间 int 21h;hour-ch,minute-cl,second-dh mov al,ch call hextodec;hextodec 子程序,入出口皆为 al mov hour,al mov al,cl call he

51、xtodec mov minute,al mov al,dh call hextodec mov second,al kk: mov al,36h ;设置通道 0 工作方式为 3. mov dx,contr ;00110111h 通道 0,16 位读写,方式 3,bcd 码 out dx,al mov ax,2710h ;计数初值为 10000,bcd 码 mov dx,chan1 out dx,al mov al,ah out dx,al mov al,74h ;设置通道 1 工作方式为 2 mov dx,contr ;01110100h 通道 1,16 位读写,方式 2,2 进制 out

52、dx,al mov ax,64h;初始值为 100 mov dx,chan2 out dx,al mov al,ah out dx,al mov dx,io8255b ;将 8255 设为 a 口输出 mov al,80h;1000000 方式控制字 a、b 组方式 0,a、b、c 口都是输出 out dx,al ret init endp ;= ;子程序,将 16 进制转换成 10 进制,入出口都为 al,ax 受影响 ;= hextodec proc push bx mov ah,0 mov bl,10d;十进制 10 div bl shl al,04h add al,ah pop bx

53、ret hextodec endp code ends end start 第四部分第四部分 系统测试与性能分析系统测试与性能分析 4.1 系统测试系统测试 系统测试包括硬件和软件两方面的测试,主要是对正确性和性能指标的测试。测试原则: 先硬件后软件,先测试其正确性,后测试其性能指标。 1)硬件测试 电源连接正确性测试 测试 8253 的各个时钟是否正确(用示波器测 clk0、clk1、 out1 并观察波形) 测试 8259 能否正常发送中断(将 irq3 接到 tpc-usb 上的单脉冲,通过手动送个高电 平到 irq3 测试其是否正常工作) 测试 7 段数码管是否正常工作(通电是否点亮)

54、 2)软件测试 运行自检程序,检测硬件链接。自检程序设计为自发自收程序,分别检测 8253 芯片 和试验系统的硬件连接、8255 与 7 段数码管是否正确连通。 测试 8253 工作情况的程序如下: ;* ;* 8253 分频 * ;* io8253a equ 280h io8253b equ 281h io8253c equ 283h code segment assume cs:code start:mov dx,io8253c ;向 8253 写控制字 mov al,36h ;使 0 通道为工作方式 3 out dx,al mov ax,10000 ;写入循环计数初值 1000 mov dx,io8253a out dx,al ;先写入低字节 mov al,ah out dx,al ;后写入高字节 mov dx,io8253c mov al,76h ;设 8253 通道 1 工作方式 2 out dx,al mov ax,100 ;写入循环计数初值 1000 mov dx,io8253b out dx,al ;先写低字节 mov al,ah

温馨提示

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

评论

0/150

提交评论