0#计数器 IOY2 1#计数器 2#计数器 控制寄存器 40H 41H 42H 43H 四、具体模块设计
1、概述
本系统设计的电子钟以8088微处理器作为CPU,用8254做定时计数器产生时钟频率,8255做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断。在此系统中,8254的功能是定时,接入8254的CLK信号为周期性时钟信号。8254采用计数器0,工作于方式2,使8254的OUT0端输出周期性的负脉冲信号。即每隔20ms,8254的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化。程序由以下模块组成:系统共有5个功能模块,分别为,主控模块,显示模块,定时模块,中断模块,小键盘模块。 系统框图如下:
显示模块 六个LED 小键盘模块 小键盘 8255A 显示缓冲的值主控模块 键盘读入的数中断模块 8259 2、主程序模块
主控模块是系的核心模块,对8254、8255A进行初始化,设置中断向量,扫
秒脉冲 定时模块 8254 图一 系统框图
描键盘根据按键值作相应的处理。主要由软件实现。它的主要功能是调用其它模块对系统工作进行协调,它的主要功能是读小键盘输入键值并执行要做的工作,如果键值为C则将显示初始值00:00:00置入显示缓冲,并调用显示模块显示。如果键值为G则开中断,(中断程序为秒最低位加一)。如果键值为D则关中断,停止动态显示。如健值为P则连续六次调用小键盘模块,将键值依次存入显示缓冲。并调用显示模块显示。如果健值为E,则终止程序,返回DOS。 3、小键盘模块
小键盘模块送入主控模块的子功能模块。由软件和硬件实现,硬件上由小键盘和8255互连,将小键值由8255送入主控模块。软件上使用行扫描法获得键值并送回主控模块。本课题只考虑去抖动。执行一个约10ms的延时程序后再扫描键盘,若F0=1表示真正有键按下,从而消除了抖动影响。 实现代码如下:
KEY ROC NEAR PUSH CX KST: MOV AL,82H
MOV DX,P55CTL OUT DX,AL MOV AL,00H MOV DX,PA55
DEC CL JNZ SCAN1 JMP KST 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
OUT DX,AL MOV DX,PB55 IN AL,DX OR AL,0F8H CMP AL,0FFH JZ DELAY
MOV CX,0300H DLY: LOOP DLY MOV CL,08H MOV AH,0FEH SCAN1: MOV DX,PA55 MOV AL,AH OUT DX,AL MOV DX,PB55 IN AL,DX OR AL,0F8H CMP AL,0FFH JNZ KEYN ROL AH,1
JMP YANG DELAY: CALL DISPLY JMP KST
YANG: RET KEY ENDP
4、显示模块
显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位。硬件上由六个LED构成,软件上由扫描显示的方法实现。 实现代码如下:
DISPLAY PROC NEAR 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 DELAY1: DEC BX JNZ DELAY1 CMP CL,20H
JZ DISUP2 INC DI SHL CL,1 JMP DISUP1
DISUP2: POP CX RET
DISPLAY ENDP
5、定时模块
定时模块是为8259提供中断请求信号的。由一片8254实现,选用定时器0#,工作在方式3,由4时钟应该1秒走动一次,所以输出值应为1S,其输出信号可作为8259的中断请求信号。 6、中断处理模块
中断模块实现动态显示的,硬件为一片8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果。
7、按如下接线图连接好试验箱上的芯片引脚, 主要用到器件有8255,8254,LED,8259,小键盘。8254的片选接地址208-20F,OUT1,OUT0接灯(测试用),GATE0,GATE1接+5V,CLK1接8259的IRQ2,CLK0接Q12(12分频)。
8255的片选接地址218-21F,实验箱已将其和小键盘相连。
LED的片选接地址210-217。
8259 IR2 8254 CLK1 CLK0 CS OUT1 OUT0 GATE1 GATE0 +5V 8MHz 208-20F 210-217 218-21F A LS393 B CS 6个LED Q4 8 2 5 5 CS PB2 小键盘 。。。。。。。PA0 图二 试验接线图
五、程序流程图
主程序流程图:
开始 8254A作为中断源产生20MS脉冲 设置堆栈 显示提示信息 用INT21H35H号功能保存系统中8259A原中断向量 用INT21H35H号功能设置0A中断新的中断向量,指向年,月,日加1的中断处理程序 置8259A的IMR第2位为0,允许IRQ2中断 调用键扫描子程序(KEY),键号的ASCII码在[CHAR1]单元中 是C键码? N 是G键码? N 是D键码? N 是P键码? N N 是E键码? Y Y 调用C键处理子程序 Y 调用G键处理子程序 Y 调用D键处理子程序 Y 调用P键处理子程序 用INT21H35H号功能恢复原中断向量 开中断 返回DOS 图一 主程序流程图
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库8253+8255+8259 电子时钟(2)在线全文阅读。
相关推荐: