微机原理课程设计报告
一、课程实际目的及意义
通过本次课程设计要掌握此三种芯片使用的方法,灵活运用课本知识, 加深所学的知识,对所学的相关芯片的原理、内部结构、使用方法等有 更加深刻的了解,学会利用课本知识联系实际应用及编程。同时并了解 综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的 设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
三、设计所用芯片结构
1、8259A芯片的内部结构及引脚 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。 它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片 中。因此无需附加任何电路,只需对8259A编程,就可以管理8级中断,
并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。 在MD微机系统中,8259芯片工作于单片方式。
二、开发环境及设备
①设计环境 PC机一台、windows XP系统、实验箱、导线若干。
②设计所用设备 8254定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送 IRQ2。 8255并口:用做接口芯片,和小键盘相连。 8259中断控制器:用于产生中断。 LED:六个LED用于显示时:分:秒值。 小键盘:用于控制设置。
8259引脚图如图3.3,各引脚功能如下。 D7~D0——八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0——地址信号; INT——中断请求信号; INTA(低电平有效)——中断响应信号; CAS0~CAS2——级联信号,形成一条专用8259A总线,以便多片8259A的 级联; SP/EN——从编程/允许级联。在缓冲方式中,可用做输出信号以控制总
2、8255端口地址
表3.2 8255端口地址表
信号线 IOY3
寄存器 A口 B口 C口 控制寄存器
编址 60H 61H 62H 63H
3、8254芯片的内部结构及引脚 8254可编程定时/计数器是Intel公司生产的通用外围芯片之一,有3个独 立的十六位计数器,技术频率范围为0~2MHZ,它所有的技术方式和操 作方式都通过编程控制。
中断序 0
1
2
3
4
5
6
7
号
功能调 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 用
矢量地 20H 24H 28H 2CH 30H 34H 38H 3CH
址
~
~
~
~
~~Leabharlann ~~23H 27H 2BH 2FH 33H 37H 3BH 3FH
说明 时钟 键盘 可用 可用 串行 可用 可用 可用 口
线缓冲器的接收和发送。在非缓冲方式中,作为输入信号用于表示主片 还是从片;
图3.1 8259A引脚图
IR0~IR7——外部中断请求输入线。要求输入的中断请求信号是由低电 平到高电平的上升沿(并保持高电平到CPU响应时为止)或者是高电 平。 8259中断矢量地址与中断信号之间的关系如表3.1所示:
表3.1 8259A中断矢量表
从00:00:00重新开始。 基本工作原理:每百分之一秒对百分之一秒寄存器的内容加一,并依次 对秒、分、小时寄存器的内容加一,六个数码管动态显示时、分、秒的 当前值。 1、内容 利用实验台上提供的定时器8254和扩展板上提供的8259以及键盘和数码 显示电路,设计一个电子时钟,由8254中断定时,小键盘控制电子时钟 的启停及初始值的预置。 电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,最大 记时59:59:59超过这个时间时分秒位都清零从00:00:00重新开始。 2、要求 本实验要求设计一个定时显示装置,用六个数码管显示时间,用小键盘 控制计时,设置和显示时间。系统一运行就从00点00分00秒开始计时, 并在数码管上显示时、分、秒当前值,而且,可以用键盘设置当前时 间。 基本工作原理:每百分之一秒对百分之一秒寄存器的内容加一,并依次 对秒、分、小时寄存器的内容加一;六个数码管动态显示时、分、秒的 当前值。 C键:置初值,显示00:00:00 G键:显示动态变化(启动表); D键:显示静态不变(表停止); E键:终止程序,返回DOS; P键:设置时:分:秒的值 3、设计环境 PC机一台、windows XP系统、实验箱,导线若干。 4、设计所用设备 8254定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送 IRQ2。 8255并口:用做接口芯片,和小键盘相连。 8259中断控制器:用于产生中断。 LED:六个LED用于显示时:分:秒值。 小键盘:用于控制设置。
keyn: push ax mov dx,pb55
relea: in al,dx or al,0f8h cmp al,0ffh jnz relea pop ax not ax
mov si,offset table mov di,offset char mov cx,24 tt: cmp ax,[si] jz nn dec cx jz kst add si,02 inc di jmp tt nn: mov dl,[di] mov [char1],dl mov ah,02h int 21h pop cx jmp yang delay: call disply
2、8255芯片的内部结构及引脚 8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具 有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式 下工作:
方式0—基本输入/输出方式 图3.2 8255引脚图
方式1—选通输入/输出方式
方式2—双向选通输入/输出方式 8255引脚图如图3.2示,各引脚功能如下。 D7~D0——与CPU侧连接的八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0、A1——片内寄存器选择输入信号; PA7~PA0——A口外设双向数据线; PB7~PB0——B口外设双向数据线; PC7~PC0——C口外设双向数据线; RESET——复位输入信号
jmp kst yang: ret key endp
4、显示模块 显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区 是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位, 秒钟的高位和低位。硬件上由六个LED构成,软件上由扫描显示的方法 实现。 实现代码如下:
display proc near delay1: dec bx
(6)方式5:硬件触发的选通信号 8254引脚图如图3.3示,各引脚功能如下。 D7~D0——八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0、A1——片内寄存器地址输入信号;
CLK——计数输入,用于输入定时基准脉冲或计数脉冲; OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲波形; GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以 使计数器和计测对象同步。 2、8254端口地址
jnz delay1
cmp cl,20h
jz disup2
inc di
shl cl,1
jmp disup1
disup2: pop cx
ret
display endp
mov cx,77ffh led52: call disup
loop led52 disup: push cx
mov di,offset min1 mov cl,01 disup1: mov al,0 mov dx,portbit out dx,al mov al,[di] mov bx,offset led xlat mov dx,portseg out dx,al mov al,cl mov dx,portbit out dx,al mov bx,35h
8254的功能用途是: (1) 延时中断 (2) 可编程频率发生器 (3) 事件计数器 (4) 二进倍频器 (5) 实时时钟 (6) 数字单稳 (7) 复杂的电机控制器
8254有六种工作方式: (1) 方式0:计数结束中断 (2) 方式1:可编程频率发生器 (3) 方式2:频率发生器 (4) 方式3:方波频率发生器 (5) 方式4:软件触发的选通信号
key roc near push cx
kst: mov al,82h mov dx,p55ctl out dx,al mov al,00h mov dx,pa55 out dx,al mov dx,pb55 in al,dx or al,0f8h cmp al,0ffh jz delay mov cx,0300h
显示缓冲的值
秒脉冲
显示模块
主控模块
中断模块
定时模块
小键盘模块
六个LED
小键盘
8255A
8254
8259
图一 系统框图
2、主程序模块 主控模块是系的核心模块,对8254、8255A进行初始化,设置中断向 量,扫描键盘根据按键值作相应的处理。主要由软件实现。它的主要功 能是调用其它模块对系统工作进行协调,它的主要功能是读小键盘输入 键值并执行要做的工作,如果键值为C则将显示初始值00:00:00置入 显示缓冲,并调用显示模块显示。如果键值为G则开中断,(中断程序 为秒最低位加一)。如果键值为D则关中断,停止动态显示。如健值为 P则连续六次调用小键盘模块,将键值依次存入显示缓冲。并调用显示 模块显示。如果健值为E,则终止程序,返回DOS。 3、小键盘模块 小键盘模块送入主控模块的子功能模块。由软件和硬件实现,硬件上由 小键盘和8255互连,将小键值由8255送入主控模块。软件上使用行扫描 法获得键值并送回主控模块。本课题只考虑去抖动。执行一个约10ms的 延时程序后再扫描键盘,若F0=1表示真正有键按下,从而消除了抖动影 响。 实现代码如下:
dly: loop dly mov cl,08h mov ah,0feh