微机原理与接口技术
- 格式:doc
- 大小:665.00 KB
- 文档页数:13
1 一、 设计要求
利用试验平台提供的硬件资源设计一个数字钟。该数字钟以分、秒的形式实时显示当前时间,且具有校表功能,利用小键盘与标准时间校准。
掌握8255A、8253、8259芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8086微处理器完成了数字钟的小系统的独立设计。同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程。
二、设计所用芯片
8255A:可编程通用并行接口芯片,可作为单片机与各种外部设备连接的接口电路。
8253定时器:用于产生秒脉冲,其输出信号可作为中断请求信号送IRQ2。
8259中断控制器:用于产生中断
LED:六个LED用于显示时:分:秒值。
小键盘:用于控制设置。
三、 设计思想
设计思想
本系统设计的数字钟以8086微处理器作为CPU,用8253做定时计数器产生时钟频率,8255A做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断。在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号。8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号。即每隔20ms,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR3,当中断到50次后,CPU即处理。
其中8259只需初始化ICW1,其功能是向8259表明IRx输入是电平触发方式还是上升沿触发方式,是单片8259还是多片8259。8259接收到信号后,产生
2 中断信号送CPU处理。
设计原理
利用定时器8253和8259以及键盘和数码显示电路,设计一个数字钟,由8253中断定时,小键盘控制数字钟的启停及初始值的设置。
数字钟的显示格式HH:MM:SS由左到右分别为时、分、秒,最大计时为23:59:59:超过这个时间时分秒位都清零从00:00:00重新开始。
设计一个定时显示装置,用6个数码管显示时间,用小键盘控制计时,设置和显示时间,系统一运行就从00时00分00秒开始计时,并在数码管上显示时分、秒当前值,而且可以用小键盘设置当前时间。
四、 系统各个模块设计
系统总体设计
本系统设计的数字钟以8086微处理器作为CPU,用8253做定时计数器产生时钟频率,8255A做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断。在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号。8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号。即每隔20ms,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR3,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化。程序由以下模块组成:系统共有5个功能模块,分别为,主控模块,显示模块,定时模块,中断模块,小键盘模块。
定时模块
定时模块是为8259提供中断请求信号的。由一片8253实现,选用定时器0#,工作在方式3,由于时钟应该1秒走动一次,所以输出值应为1S,其输出信号可作为8259的中断请求信号。
3 中断处理模块
中断模块实现动态显示的,硬件为一片8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果。
中断模块原理图
显示模块和小键盘模块
显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位。硬件上由六个LED构成,软件上由扫描显示的方法实现。
小键盘模块送入主控模块的子功能模块。由软件和硬件实现,硬件上由小键盘和8255A互连,将小键值由8255A送入主控模块。软件上使用行扫描法获得键值并送回主控模块。本课题只考虑去抖动。执行一个约10ms的延时程序后再扫描键盘,若F0=1表示真正有键按下,从而消除了抖动影响。
显示模块原理图
4
五、系统框图
流程图
5
六、心得体会
通过此次课程设计,我对利用微机原理课程所学的知识设计电子表的基本过程的设计方法、步骤、思路、有一定的了解与认识。我更加深刻的理解了微机原理的相关知识。对一些常用芯片有了更深一步的认识,并且能够很好的使用它们。但是感觉自己的动手能力还是不行,刚开始时,由于程序比较大,用的芯片比较多,感觉不知从哪下手,然后经过慢慢研究程序,似乎看懂了一些,可惜最后还是没能够演示出来。以后我会经常试着去制作一些电子小产品,以提高自己的动手能力。
七、程序清单
;*********用两个74LS373进行数码管的动态显示;一个做段(要显示的笔画)选,一个做位选
PORTS EQU 211H ;数码管显示地址(选管)
PORTB EQU 210H ;数码管显示内容控制
;*********在8253的定时中断中,通过8255的8个PA口,3个PB口进行扫描
PA EQU 220H ;8255 CS 选择信号端
TC0 EQU 230H ;8253 CS 选择信号端
;*********数据段
DATA SEGMENT
COUNT1 DB 12 ;扫描键盘中断口标志CM读数码管
COUNT2 DB 13 ;延世13次中断标志
KREP DB 0 ;防止连击标志, krep=0:无键按下
KSHAKE DB 0 ;键盘防抖
KFLAG DB 0 ;功能键标志位kflag=1,2,3--key(A\B\C)pressed,4--key(F)pressed
SYMBL DB 0 ;显示标志位0--display bufer,1--display temp
FIRST DB 0 ;修改标志位check 2 digit 0--hight,1--low
ENTER DB 0 ;在缓冲区里有新的数字?有则为1
TABL DW 57FH,5BFH,5DFH,5EFH,5FEH,5FDH,5FBH,5F7H
DW 67FH,6BFH,6DFH,6EFH,6FEH,6FDH,6FBH,6F7H
DW 37FH,3BFH,3DFH,3EFH,3FEH,3FDH,3FBH,3F7H
;键盘扫描码
ASCI DB "0123456789ABCDEFGMPRWXYS"
;键盘顺序码
MASEG DB "THE KEY_PREESED IS ERROR!",13,10,'$'
;按键出错提示字符串
NUMERR DB 13,10,"THE ENTERED DIGIT IS ERROR,INPUT AGAIN!",13,10,'$'
;无效时间提示字符串
LED8 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
DB 77H,7CH,39H,5EH,79H,71H,80H,76H,38H,05CH
;显示编码表
POINT DW ?
6 ORDER DW 0
BUFER DB 11H,0EH,12H,12H,0H,13H
;hh:mm:ss;'HELLOo'-at start s;LED初始显示状态
TEMP DB 6 DUP(0);时间缓存区
SELECT DB 1,2,4,8,10H,20H
OLDSEG DW 0 ;保持初始中断向量段地址
OLDOFF DW 0 ;保存偏移地址
DATA ENDS
;*********** ***代码段********************
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
MAIN: MOV AX,DATA
MOV DS,AX
MOV DX,PORTB
MOV AL,00
OUT DX,AL ;熄灭所有数码管
MOV AH,35H ;保存原来的中断向量
MOV AL,11
INT 21H
MOV OLDSEG,ES
MOV OLDOFF,BX
MOV AX,SEG KEYLED ;写入新的中断向量
MOV DS,AX
LEA DX,KEYLED ;取偏移地址
MOV AL,11 ;IRQ3中断向量类型号
MOV AH,25H
INT 21H ;写入IRQ3中断向量
STI
MOV AX,DATA ;CSH 数据段
MOV DS,AX
MOV ES,AX ;CSH 堆栈段(in HDY movsb 要重新设定堆栈段)
MOV DX,PA+3 ;8255 控制字
MOV AL,10010000B ;PA口 输入,PB 口输出
OUT DX,AL
MOV POINT,OFFSET TEMP ;输入 HCQ
IN AL,21H ;读8259中断寄存器
AND AL,0F7H ;1111 1011b
OUT 21H,AL ;开IRQ3
MOV DX,TC0+3 ;8253定时寄存器初始化
MOV AL,01010110B ;xuan TD 1,xie yige di ZJ,gongzuo fangshi 3
OUT DX,AL
MOV DX,TC0+1 ;TD1,wei ding shi qi fu chu zhi
MOV AL,5 ;LS393 OUT 8M/8K,T1 OUT 200HZ