接口与通信
报告
学 号:
姓 名:
提交日期:
2010-12-9
成 绩:
东北大学秦皇岛分校
一、设计目的
1. 通过本次课程设计要掌握此三种芯片使用的方法,灵活运用课本知识,加深
所学的知识,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了
解,学会利用课本知识联系 实际应用及编程。同时并了解综合问题的程序设计
掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后
搞设计时逻辑更加清晰。
2. 熟悉掌握 8086/88 指令系统,以及理解掌握定时/计数器和中断的使用方法。
3. 掌握微机原理实验系统的使用,掌握控制数码管显示的程序。
4. 掌握一定的汇编语言知识,培养自己的动手操作能力。
二、设计要求
能够设定当前的日期及时间,能够显示当前的日期及时间,时间显示到秒。键盘
识别定时器、中断、数码显示,汇编语言编程。利用 8253 可编程定时/计数器、
8259 中断控制器、8255 可编程并行接口芯片和七段数码管设计一个电子钟的电
路,并编制一段程序使的该电子钟能正常运行。并且能用手动控制输入的方法修
改电子时钟的时间
三、设计环境(用到的仪器和设备,例如各种芯片)
8253 定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送 IRQ2。8255
并口:用做接口芯片,和小键盘相连。8259 中断控制器:用于产生中断。
LED:六个 LED 用于显示时、分、秒值。
四、设计思想
本系统设计的电子时钟以 8088 微处理器作为 CPU,用 8253 做定时计数器产生时
钟频率,8255 做可编程并行接口显示时钟和键盘电路,8259 做中断控制器产生
中断。在此系统中,8253 可编程定时器/计数器,其定时与计数功能可由程序灵
活地设定,设定后与 CPU 并行工作,不占用 CPU 的时间。通道 2 工作在 3 方式下,
提供计算一秒的中断请求信号。此信号接 8259 的 IR2,当中断到 50 次数后,CPU
即处理,使液晶显示器上的时间发生变化。其中 8259 只需初始化 ICW1,其功能
是向 8259 表明 IRx 输入是电瓶触发方式还是上升沿触发方式,是单片 8259 还是
多片 8259。8259 接收到信号后,产生中断信号送 CPU 处理。
具体方法
1.先在数据段开辟 6 个存储单元,用来存放时、分、秒的信息。这 6 个存储单元
分别对应时、分、秒的十位和个位。调用子程序的清屏部分。
2. 在主程序中分别对 8253、8259、8255 进行初始化编程。8253 的计数器 0 工作
在方式 3 下,CLK0 接 19.2K 的脉冲频率,经过 19200 次分频,在 OUT0 端口输
出频率为 1Hz 的方波,产生秒脉冲。
3. 8255 的 A 口工作在方式 0 输入,B 口工作在方式 0 输出,为基本的输入输出
方式。这部分为手动修改时间部分。
4. 在中断服务程序中对中断次数进行统计。当产生 1 次中断时,将秒的个位加 1,
判断是否到 10,如到了则十位加 1,个位清零;再判断十位是否到 6,如到了则
十位清零,分的个位加 1,同理对分、时做相应的处理。该电子钟为 12 进制的。
5. 八段数码管显示程序做为主程序。调用延时程序并不断将时、分、秒对应存
储单元的内容分别取出,送到相应的数码管显示出来。
8259 芯片:
8259 引脚图如下:
8259 一共有 28 条引脚,其中
D7~D0——八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0——地址信号;
INT——中断请求信号;
INTA(低电平有效)——中断响应信号;
CAS0~CAS2——级联信号,形成一条专用 8259A 总线,以便多片 8259A 的级联;
SP/EN——从编程/允许级联。在缓冲方式中,可用做输出信号以控制总线缓冲器
的接收和发送。在非缓冲方式中,作为输入信号用于表示主片还是从片;
IR0~IR7——外部中断请求输入线。要求输入的中断请求信号是由低电平到高电
平的上升沿(并保持高电平到 CPU 响应时为止)或者是高电平。
8259 中断矢量地址与中断信号之间的关系如表所示:
中断序号
0
1
2
3
4
5
6
7
功能调用
20H
24H
28H
2CH
30H
34H
38H
3CH
矢量地址
20H--
24H--
28H--
2CH--
30H--
34H--
38H--
3CH--
23H
27H
2BH
2FH
33H
37H
3BH
3FH
说明
时钟 键盘 可用 可用 串行口 可用 可用 可用
8255 芯片:
方式 0—基本输入/输出方式
方式 1—选通输入/输出方式
方式 2—双向选通输入/输出方式
8255 一共有 40 条引脚,其中
D7~D0——与 CPU 侧连接的八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0、A1——片内寄存器选择输入信号;
PA7~PA0——A 口外设双向数据线;
PB7~PB0——B 口外设双向数据线;
PC7~PC0——C 口外设双向数据线;
RESET——复位输入信号
8255 端口地址
信号线
IOY3
寄存器
A 口
B 口
C 口
控制寄存器
编址
60H
61H
62H
63H
五、设计内容(必须包括一些硬件原理图,汇编程序代码,设计的结
果截屏,设计流程图等图)
开始
8253A 作为中断源产生 20MS 脉冲
设置堆栈
显示提示信息
用 INT21H35H 号功能保存系统中 8259A 原中断向量
用 INT21H35H 号功能设置 0A 中断新的中断向量,指向年,月,日加 1
的中断处理程序
置 8259A 的 IMR 第 2 位为 0,允许 IRQ2 中断
调用键扫描子程序(KEY),键号的 ASCII 码在[CHAR1]单元中
Y
Y
Y
Y
调用 C 键处理子程序
调用 G 键处理子程序
调用 D 键处理子程序
调用 P 键处理子程序
是 C 键码?
N
是 G 键码?
N
是 D 键码?
N
是 P 键码?
N
是 E 键码?
Y
N
用 INT21H35H 号功能恢复原中断向量
开中断
返回 DOS
图一
主程序流程图
键盘扫描程序流程图:
开始
置 8255A 控制字,A 口为输出,B 口为输入
A 口全输出低电平,从 B 口读入数据
Y
列线全为高电平吗
N
保存列值,延时取抖动
置 8255 控制字,A 口为输入,B 口为输出
往 B 口输出保存的列值
N
从A口读入行值
和键表比较
是否找到匹配键
Y
显示输入的字符
置 8255A 控制字,A 口为输出,B 口为输入
A 口全输出低电平,从 B 口读入
N
键释放了吗?
Y
返回
汇编程序代码
code segment
assume cs:code,ds:code
org 100h
start:
push cs
pop ds
mov ax,3
int 10h
mov ax,0b800h
mov es,ax
cld
Q0:lea dx,Tips ;提示输入时间
mov ah,9
int 21h
;输入当前时、分、秒值
call input_bcd
mov HH,al
mov ax,0e3ah ;':'
int 10h
call input_bcd
mov MM,al
mov ax,0e3ah ;':'
int 10h
call input_bcd
mov dh,al
mov ch,HH
cmp ch,23H
ja Q1
mov cl,MM
cmp cl,59H
ja Q1
cmp dh,59H
jbe Q2
Q1:lea dx,Err
mov ah,9
int 21h
jmp Q0
Q2:mov ah,3
int 1ah