资源描述
合肥学院
电子信息与电气工程系
微型计算机原理与接
口技术课程设计报告
2012~2013学年第一学期
课程
微型计算机原理与接口技术
课程设计名称
流水线的工件计数报警
学生姓名
张利
学号
1005071023
专业班级
通信(1)班
指导教师
1、题义分析及解决方案
1.1、课程设计名称及内容:
用STAR ES598PCI单板开发机,设计一款流水线的工件计数报警
设计要求:
8086系统中应用8253的通道0来对流水线的工件计数,当计满500个从OUT0端产生一个高电平中断请求信号。CPU响应中断就使通道1的OUT1端产生频率为1000Hz的方波推动扬声器发声,时间为5s,GATE1通过I/O端口接到DB总线D0位地址为88H,8253各端口的地址为80---86H,CLK1接2MHz信号,Delay为延时程序,中断类型码为N
1.2、题意需求分析
根据本设计给定的内容和要求,分析得出初步的设计思路:本设计中需要用到的主要有两种芯片(8253和8259A),一种用来计数并产生中断,另一种则用来对中断信号做出响应,并驱动扬声器。
其中最核心的是实现计数和响应中断。这里我们考虑到要用到可编程计数器8253的方式0和方式1,8253中方式0时一次中断计数,方式1是可编程触发器,我们用方式的OUT0的输出高电平来触发中断。中断服务程序用方式3产生1000Hz的方波。由于8253的方式0只是实现一次计数,如果不重新装入初值就不会再次触发,所以要实现循环只需要每次都循环装入初值就可以了。
1.3、解决问题的思路及方法
1.3.1、硬件部分:
2.1.2 8253A的功能分析
8253A是一种可编程的定时器/计数器芯片,它可用于计数、分频、定时器等的方面。
8253的主要性能为:内有三个独立的16位计数器,最大计数范围为0~65535;工作方式可编程控制,可编程6种不同的工作方式;所有输入和输出都与TTL兼容。计数脉冲频率为0MHZ-2.6MHZ,可以按二进制或BCD码计数,使用单一+5V电源
2.1.3 8253的内部结构
8253的内部结构如图一所示,由数据总线缓冲器、控制寄存器、读/写控制逻辑和计数器等部分组成。
图一
(1)、数据总线缓冲器:三态,双向的8位缓冲器,用于将8253与系统数据总线连接。CPU执行I/O指令时,缓冲器发送或者接收数据,用于写入8253控制字,装入计数初值或读出当前计数值。
(2)、读/写逻辑:决定三个计数器和控制字寄存器中哪一个能进行工作,并控制内部总线上数据传送的方向。
①CS片选信号:低电平有效(此时CPU才能对 8253进行读写操作),由地址总线经I/O端口译码电路产生。
②RD读信号:低电平有效,表示CPU正在读取所选定的计数器通道中的内容。
③WR写信号:低电平有效,此时表示CPU正在将计数初值写入所选中的计数通道中或将控制字写入控制寄存器中。
④A1A0端口选择信号:8253内部有3个计数器通道和一个控制寄存器端口。A1A0=00,01,10表示分别选中计数器通道0,1,2,当A1A0=11时选中控制寄存器端口。
(3)、控制寄存器:接收从CPU来的控制字,并由控制字的D7、D6位的编码决定该控制字写入哪个计数器的控制寄存器,控制寄存器只能写入,不能读出。
(4)、计数器0-2:当8253用作计数器时,加在CLK引脚上脉冲的间隔可以是不相等的;当它用作定时器时,则在CLK引脚应输入精确的时钟脉冲,8253所能实现的定时时间,取决于计数脉冲的频率和计数器的初值,即:定时时间=时钟脉冲周期Tc×预置的计数初值n。对8253来讲,外部输入到CLK引脚上的时钟脉冲频率不能大于2MHZ,否则需分频后才能送到CLK端。
2.1.4 8253内部引脚功能
8253是一片具有3个独立通道的16位计数器/定时器芯片,使用单一+5V电源,24引脚双列直插式封装,如图二所示。
图二
2.1.4.1、与CPU的接口信号
(1)D0~D7——三态双向数据线。与CPU数据总线相连,用于传递CPU与8253之间的数据信息、控制信息和状态信息;
(2)CS——片选信号(Chip Select),输入,低电平有效;
(3)WR——写信号,输入,低电平有效,用于控制CPU对8253的写操作,可与A1,A0信号配合以决定是写入控制字还是计数初值;
(4)RD——读信号,输入,低电平有效。用于控制CPU对8253的读操作,可与A1,A0信号配合读取某个计数器的当前计数值;
(5)A0,A1——地址输入线。用于8253内部寻址的4个端口,即3个计数器和一个控制字寄存器。一般与CPU低位的地址线相连。
2.1.4.2、与外部设备的接口信号
(1)CLK0(CLK1,CLK2)——时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。CLK可以是系统时钟脉冲,也可以是由其他脉冲源提供。8253规定加在CLK引脚的输入时钟周期不得小于380ns;
(2)GATE0(GATE1,GATE2)——门控输入端,用于外部控制计数器的启动或停止计数的操作。当GATE为高电平时,允许计数器工作,当GATE为低电平时,禁止计数器工作;
(3)OUT0(OUT1,OUT2)——计数输出端。在不同工作方式中,当计数器计数到0时,OUT引脚上必输出相应的信号。
2.1.5 8253的工作方式
方式0——计数结束中断方式 (Interrupt on Terminal Count)
方式1 —— 可编程的单稳态触发器(Programmable One Short)
方式2-----比率发生器、分频器 (Rate Generator) 方式2用门控信达到同步计数的目的。
方式3----方波发生器 (Square Wave Generator)方式3的工作过程同方式2,只是输出的脉宽不同。
方式4 —— 软件触发选通方式 (Software Triggered Strobe) 用方式4工作时,GATE门控信号只是用来允许或不允许定时操作的,定时的执行过程由装入的初值决定。
方式5 —— 硬件触发选通方式 (Hardware Triggered Strobe)方式5为硬件触发选通方式,完全由GATE端引入的触发信号控制定时和计数。
2.1.6 8253芯片可编程外围信号状态表
表3
2.1.7 所选用8253的工作方式
本实验要求产生频率初值,并且根据步进值来调节频率和占空比,这样我们想到了8253的工作方式0,每次都装入初值。而要调节占空比的时候要考虑到高电平的输入,这样在周期固定的情况下就必须使用方式1,可编程触发器,即可编程单稳态触发器,此时GATE具有控制装入的功能。下面我就介绍一下这两种工作方式的原理以及时序图。
(1) 首先是方式0----计数结束产生中断
在这种工作方式下,当GATE为1时,写入控制字和计数值后,需要一个CLK脉冲周期计数初值才能被送到计数器减一部件。OUT是在写入控制字后变成低电平,直到计数器减到0才变成高电平。OUT端输出信号可以作为中断请求信号。计数器在外部时钟作用下,每个时钟周期减一。当GATE为0时,每次写入数值可以获得一个负脉冲,计数停止。
图1.5.1 正常计数
图1.5.2GATE信号的作用
图1.5.3方式2时计数过程中改变计数值
(2)、方式1---可编程触发器
在这种工作方式下,写入控制字和计数初值后,计数开始是以GATE的上升沿触发。之后,OUT输出低电平,次低电平一直维持到计数器减到0。这样就可以从OUT输出一个负脉冲,该负脉冲由GATE上升沿之后的下一个CLK脉冲的下降沿开始,负脉冲的宽带为计数值乘时钟脉冲时间长度。若想再次获得同样宽度的负脉冲,只要GATE上升沿再触发一次即可。可见,这种方式下,装入计数值后可以多次触发。
图1.5.4 正常计数
图1.5.5 GATE信号的作用
图1.5.6改变初值
2.1.8 8253的控制字与初始化编程
D7 D6 D5 D4 D3 D2 D1 D0
计数器
读写格式
工作方式
数制
D7、D6:00-----选择通道0 01-----选择通道1
10-----选择通道 11-----无效
D5、D4:00-----计数器锁存 01-----只读写计数器低字节
10-----只读写计数器高字节
11-----先读写计数器低字节,再读写计数器高字节
D3、D2、D1:000------方式0 001------方式1
*10------方式2 *11------方式3
100------方式4 101------方式5
D0:1-----BCD码计数 0------二进制计数
2.1.9 8253A的技术参数
表4
参数名称
符号
测试条件
最大规范值
最小规范值
输入低电平电压
VIL
0.8V
-0.5V
输入高电平电压
VIA
Vcc+0.5 V
2.2V
输出低电平电压
VOL
Vin=Vcc-0V
0.45 V
输出高电平电压
VOH
Vout=Vcc-0.45V
2.4V
输入负载电流
IIL
+/-10 V
输出浮动漏电流
IOFL
+/-10 V
电源电流
Icc
140 V
8253A主要参数分析:输入低电压的范围是-0.5 V~0.8 V,输出低电压的范围0.45 V~2.4 V,输入高电压的范围是2.2 V~Vcc+0.5 V。而测试条件均为Vin=Vcc-0V,Vout=Vcc-0.45V。
2.2 、选择8259芯片
1)芯片8259A在本设计中的作用
本设计中用于中断源的判断
2)芯片8259A的功能分析
1.8259A的主要特性
微机系统中,可以使用8259A 扩展外部中断,Intel 8259A 可编程中断控制器,主要有以下功能:
⑴1片8259A 能管理8级中断,通过级联用9片8259A可以构成64 级主从式中断系统。
⑵每一级中断可以屏蔽或允许。
⑶中断响应周期,8259A 可提供相应的中断类型号。
⑷编程使8259A 工作在多种不同的方式。
2.8259A 的内部结构与引脚信号
⑴数据总线缓冲器
8位、双向、三态,是8259A与 CPU 之间的数据接口。
D0~D7直接与CPU 数据总线的低8位连结。
⑵读/写控制逻辑
CS 接高位地址的译码输出
A0:常常与地址信号线A0相连。
RD,WR与CPU的RD,WR相连,低平有效。
CPU 通常利用:
OUT 指令,WR与A0配合写入有关的控制字
IN 指令,RD与CS,A0配合读出8259A内部有关寄存器的内容。
⑶中断请求寄存器 IRR
8 位,若IRi 有效(“1”,),对应位置“1”,直到IRi 得到响应。 因此,IRR记录外中断源IRi的请求信息。
⑷中断服务寄存器 ISR
8位,当IRi得到响应时,对应位置“1”。ISR 记录正在处理的IRi,当中断嵌套时,可能多位置“1”。 因此,ISR记录CPU对IRi的响应情况。
⑸中断屏蔽寄存器 IMR
8位,某位置“ 1”,对应IRi 禁止产生中断。因此,IMR控制是否对IRi进行屏蔽操作。
⑹优先权电路
实现优先权的判断与处理,采用编码器和比较器电路,如下图所示。
图2-7 中断优先权电路
⑺控制逻辑
由IRR 和PR 的情况,向8259A 其它部件发出控制信息。向CPU 发出INT 信号,接收CPU信号
⑻级联缓冲/比较器
可以实现8259A的级联,扩展外中断。
3.8259A 的中断处理过程
下面以8259A单片使用为例,说明其中断处理过程。
⑴当一条或多条中断请求线IR0 ~IR7变高时,设置相应的IRR位。
⑵PR对中断优先权和中断屏蔽寄存器的状态进行判断之后,如某中断优先权最高且为允许中断状态,就向CPU发高电平信号INT,请求中断服务。
⑶CPU响应中断时,送回应答信号 INTA 。
⑷8259A接到来自CPU的第一个信号INTA时,当前中断服务寄存器(ISR)中相应位置位,并把IRR中相应位复位。同时,8259A准备向数据总线发送中断类型号。
⑸在8259A发送中断类型号的后一个INTA 脉冲期间,如果是在AEOI(自动结束中断)方式下,在这个 INTA 脉冲结束时复位ISR的相应位。在非自动中断结束方式下,ISR相应位要由中断服务程序结束时发出的EOI命令来复位。
4.8259A 的工作方式
8259A有多种工作方式,这些工作方式可以通过初始化命令字(ICW1~ICW4)和操作命令字(OCW1~OCW3)来设置。
⑴引入中断请求的方式
边沿触发方式。以上跳沿向8259A请求中断,上跳沿后可一直维持高电平,不会再产生中断。
电平触发方式。以高电平申请中断,但在响应中断后必须及时清除高电平,以免引起第二次误中断。
中断查询方式。外设通过8259A申请中断,但8259A却不使用INT信号向CPU申请中断,CPU用软件查询确定中断源,并为其服务
⑵连接系统总线的方式
在大系统中,要求数据总线有总线缓冲器。8259A与这种带总线缓冲器的系统总线连接的方式称缓冲器方式。
在小系统中,则8259A不需要总线缓冲器而是将其直接接至数据总线。8259A与这种不需总线缓冲器而直接连到系统总线的方式称非缓冲器方式。
⑶屏蔽中断源的方式
普通屏蔽方式。利用操作命令字OCW1,使屏蔽寄存器IMR中的一位或几位置1来屏蔽一个或几个中断源的中断请求。若要开放某一个中断源的中断请求,则将IMR中相应的位置0。
特殊屏蔽方式。在某些场合,在执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式。它可通过OCW3的D6D5=11来设定。
⑷优先级排队的方式
全嵌套方式。在此种方式下中断优先级按0 ~ 7顺序进行排队,只允许中断级别高的中断源去中断中断级别低的中断服务程序。
特殊全嵌套方式。它和全嵌套方式基本相同,所不同的是在特殊全嵌套方式下,当执行某一级中断服务程序时,可响应同级的中断请求,从而实现对同级中断请求的特殊嵌套(8259A级联使用时,某从片的8个中断源对主片来说,可以认为是同级的)。特殊全嵌套方式用于多片级联。
优先级自动循环方式。在这种方式下,优先级顺序不是固定不变的,一个设备得到中断服务后,其优先级自动降为最低。其初始的优先级顺序规定为IR0,IR1,…,IR7。该方式用在系统中多个中断源优先级相等的场合。
优先级特殊循环方式。这种方式与优先级自动循环方式唯一的区别是,其初始的优先级顺序不是固定IR0为最高,然后开始循环,而是由程序指定IR0 ~ IR7中任意一个为最高优先级,然后再按顺序自动循环,决定优先级。
⑸结束中断的处理方式
自动中断结束方式。在中断服务程序中,中断返回之前,不需发中断结束命令就会自动清除该中断源所对应的ISR位(实际上在CPU发第二个信号时,8259即自动消除ISR中的对应位)。这种方式用在多个中断不会嵌套的系统中。
非自动中断结束方式。在中断服务程序返回之前,必须发中断结束命令才能使ISR中的当前服务位清除。
5.8259A 的初始化命令字
8259A 初始化编程时,有四个初始化命令字ICW(Initialiation Command Word),即ICW1~ICW4 ;8259A工作期间,有三个操作命令字OCW(Operation Command Word),即OCW1~OCW3。
8259A 只有两个端口地址 ,A0=0 偶地址端口/A0=1 奇地址端口 。因此,对8259A读/写操作时,要注意控制字:写入的端口地址,写入的顺序,有关的标志位
⑴ICW1
(IRi 触发方式,是否单片使用,是否写入ICW4)
A0 D7 D6 D5 D4 D3 D2 D1 D0
0
X
X
X
1标记位
LTIM
X
SNG
ICW4
是否写入ICW4
IC4=1,要写入ICW4
IC4=0,不写入ICW4,即ICW4规定的位全为0
⑵ICW2
(中断类型号的高5位)
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
T7
T6
T5
T4
T3
X
X
X
IRi对应中断类型号的高5位
(中断类型号的低3位由8259A 自动编码产生)
设置中断向量号
T7~T3为中断向量号的高5位
低3位由8259A自动确定:
IR0为000、IR1为001、……、IR7为111
⑶ICW3
(级联时,主从芯片的级联引脚)
若ICW1 中SNGL=1 不写入ICW3
=0 写入ICW3
D7 D6 D5 D4 D3 D2 D1 D0
S7 /
ID7
S6 /
ID6
S5 /
ID5
S4 /
ID4
S3 /
ID43
S2/
ID2
S1/
ID1
S0/
ID0
级连命令字
主片8259A:Si=1对应IRi接有从片;否则IRi没有连接从片
从片8259A:ID0~ID2编码说明从片INT引脚接到主片哪个IR引脚
(1) 写给主片的ICW3
⑷ICW4
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
0
0
0
SFNM
BUF
M/S
AEOI
1
D7,D6,D5为标志位,D0为1表示用于8088/8086系统
SFNM: 规定8259A中断的嵌套方式
SFNM=0 正常的完全嵌套方式 =1 特殊的完全嵌套方式
(单片使用时,两种方式一样。)
6.8259A 的操作命令字
⑴OCW1(中断屏蔽操作命令字)
设置或清除IMR 的各个位。
D7 D6 D5 D4 D3 D2 D1 D0
M7
M6
M5
M4
M3
M2
M1
M0
屏蔽命令字
内容写入中断屏蔽寄存器IMR
Di=Mi对应IRi,为1禁止IRi中断;
为0允许IRi中断。各位互相独立。
⑵OCW2 (优先权循环方式和中断结束方式操作命令字)
D7 D6 D5 D4 D3 D2 D1 D0
R
SL
EOR
0
0
L2
L1
L0
R、SL和EOI配合使用产生中断结束EOI命令和改变优先权顺序
L2~L0的3位编码指定IR引脚
⑶OCW3
(特殊屏蔽方式和中断查询方式操作命令字)
D7 D6 D5 D4 D3 D2 D1 D0
0
ESMM
SMM
0
1
P
RR
RIS
ESMM、SMM设置中断屏蔽方式
P、RR和RIS规定随后读取的状态字含义
7.8259A 查询字
D7 D6 D5 D4 D3 D2 D1 D0
1
-
-
-
-
W2
W1
W0
中断位I位为1,有外设请求中断
W2~W0的编码当前中断请求的最高优先级
3、控制程序设计
3.1. 控制程序设计思路
实验代码:
.MODEL TINY
COM_ADDR EQU 0086H
T0_ADDR EQU 0080H
T1_ADDR EQU 0081H
.STACK 100
.CODE
START: MOV DX,COM_ADDR
MOV AL,31H
OUT DX,AL ;计数器T0设置在模式0状态,BCD码计数
MOV DX,T0_ADDR
MOV AL,00
OUT DX,AL
MOV AL,05
OUT DX,AL ;写入初值500
CALL Init8259
Init8259 PROC NEAR
MOV DX,IO8259_0
MOV AL,1BH
OUT DX,AL ;向偶地址端口写入ICW1=13H,单片,写入
ICW4,高电平触发
MOV DX,IO8259_1
MOV AL,08H
OUT DX,AL ;向奇地址端口写入ICW2=08H,中断类型号
从08H-0FH
MOV AL,09H
OUT DX,AL ;向奇地址端口写入ICW4=09H,正常的嵌套
方式, 缓冲方式,从片,非自动中断结束方式,16位8086
MOV AL,0FEH
OUT DX,AL ;向奇地址端口写入OCW1=0FEH屏蔽寄存器
,允许IR0产生中断,其他中断请求被屏蔽
RET
Init8259 ENDP ZHONGDUAN: MOV DX,COM_ADDR ;中断服务程序
MOV AL,77H
OUT DX,AL;计数器T1为模式3状态,输出方波,BCD码计数 MOV DX,T1_ADDR
MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL ;CLK1/1000
JMP $ ;OUT1输出频率为1000HZ的方波 END START
3、程序设计流程图及原理图
3.1、程序流程图
Y
N
结束
初始化8253,产生预置方波,驱动扬声器
OUT0为高电平?
开始
初始化PCI板卡,将偏移地址转化为实地址
初始化8253
初始化8259
3.2、程序原理图
4、上机调试过程
4.1调试分析
主要是对两个芯片的调试,即8253芯片,8259芯片。首先, 8253芯片主要是计数作用并引发中断。
4.2 设计遇到的问题
如何解决时延问题?
如果用到方式1和方式2结果又如何呢?
5、设计结果分析以及心得体会
5.1.总结
在作课程设计之前,由于查阅了各种资料,了解到很多功能相似的芯片性能,通过比较选出最适合本设计的硬件搭配,拓宽了知识面。
在设计的过程中,程序的设计出现了很多问题,几乎都是是逻辑上出现的问题而且具有很强的隐蔽性,不易被发觉,这需要反复进行单步调试细心观察每一步各个寄存器的变化。
通过本次的课程设计,强化了汇编语言的编程能力,了解到各个部件之间的连接及协调工作。学到了关于微机原理课程的更多相关内容。
完成这次课程设计,不仅要掌握这些硬件,还要有一定汇编语言基础,熟练汇编编程,此次课程设计需构建多个子程序,把每个功能分成一个一个得小子程序来实现,使程序最优化,让读者看起来一目了然,同时增加程序的可读性,提高运行速度,要充分掌握调用子程序。在程序调试时单步调试非常重要,往往在程序正确的情况下得到的结果不对,通过单步调试可以一步一步的检查找出问题。这次实验中我就出现了一个这样的问题,检查了程序几篇都没发现错,还让别人帮我检查了也没有查出,最后通过单步调试才解决了这个问题。还有就是关于波形不规范的问题,8253的方式0和方式1由于每次都装入初值,所以肯定会产生时延。老师要求我们尝试使用方式1和方式2,我们会在下次尝试。
5.2.体会
课程设计已经完成。我想我们在当中学到的不仅仅是编写一个简单的设计一套装置,而是学会如何将所学知识去解决具体问题。这是一种能力的培养,这是我们每个学生都应认识到的。对于我们的课程设计,我想提以下两点建议:
(1)注重平时学习中动手实践能力的培养。在课程设计中,我们觉得自身的动 手实践能力差,刚开始根本无处下手。因为微机原理的课程设计是将编程知识与硬件设计紧密的联系在一起。这与我们之前简单的编程类课程设计有所不同。分析原因看来,我们平时没能利用好实验课时间了解机器。我们的实验课多半只是预习实验要求,然后按照实验指导书进行连线,并没有真正掌握实验知识。因此,希望老师在平时实验中,结合具体的实验内容讲解些动手实践中的注意事项。
(2)在实验中,我们经常会遇到一些问题。如何及时的咨询这些问题也成为了我们课程设计的一个重点。我觉得大家在遇到问题时可以先通过网络(百度、GOOGLE等)寻求解决方法。即便找不到答案,我们也可以根据其提供相关知识,加深对该问题的认识。
当然以上仅仅是我个人对课程设计提出的一些建议,肯定还有很多不成熟的地方需要老师指正。总的来说,通过这次课程设计,我学会了很多,也感知了很多。结束的已然结束,接下来将会是我们更坚定学习这门课的决心。
在此次课程设计中让我了解和认识了8253,8259两个芯片,让我通过动手自己亲身经历去完成了流水线的工件计数报警,在实验中有过烦恼,也有过喜悦。每解决一个问题心里就十分舒坦,但想想又有好多新的问题需要努力,在解决问题的时候往往你的想法会得不到你想要的结果,但又找不到原因就会陷入苦恼,只有再一次的探索才能解决,解决后得到的是快乐。任何一次的课程设计都是对自己所学进行的一次的测试,必须以一个正确的态度去面对他,认真做好每一步的工作。做好一个功能稍微复杂一些的课程设计,都是从最基本的功能开始做起的,在基本功能完成的基础上逐渐扩展与提升,先订好程序框架,然后在其中加入新功能,这样才不会让自己在拿到任务后感到不知所措。在遇到问题时要将其记录下来,通过课后时间及时的解决问题,不要把问题拖到第二天。一天结束后要对这一天的收获进行总结,只有这样才能不断的提高和完善自己,从中也可以得到快乐!
展开阅读全文