微机原理与接口技术课程设计报告电子钟

  • 格式:doc
  • 大小:121.50 KB
  • 文档页数:15

微机原理与接口技术课程设计报告

——电子钟实验

学院: 计算机学院

指导教师:***

一 实验任务及要求

任务:

1、掌握综合使用基本输入输出设备、通用接口芯片、专用接

口芯片的方法;

2、掌握实时处理程序的编制和调试方法。

要求

设计一个定时显示装置,用实验仪左侧的六个LED数码管显示时间,时间显示格式为24小时制。分秒值为59分55秒时开始报时,每秒钟蜂鸣器鸣叫一声,到整点报时停止。

用小键盘控制时钟的启停和时钟的设置,键的定义参见上图

键值具体定义如下:

G键(启停键)—— 程序启动后,按下该键时钟启动; 再次按下该键,暂停计时,显示当前时间。

S键(设置键)—— 按下S键后,为时钟设置时、分、秒初始值。

二 硬件连线

键盘的控制、LED显示模块:采用74系列模块控制

键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、0 1 2

3 4 5

6 7 8

9 G S

Q1、Q2、Q3相连,键盘的列信号P_0、P_1、P_2和开放的输出信号P0、P1、P2相连。74芯片的片选信号CS1接地址译码信号340H, CS2接地址译码信号360H。

时间的精确定时:用8254定时器0产生25ms的中断信号;

8254的片选CS连地址输出端320H,A0,A1分别连地址总线A2,A3,GATE0连+5V,CLK0连74LS393分频输出的47K输出端,OUT0连接到8259的IRQ0

整点报时控制:由8255模块控制;

PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4

中断处理模块:由8259控制

8259的片选CS-1连地址输出300H, INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V, 8259的IRQ0连接到8254的 OUT0。

三、程序流程图

主程序

初始化各阶段寄存器及相关变量

初始化8254、8259、8255芯片

设置中断向量、开放8259中断屏蔽

开放处理器中断

扫描键盘

G键 S键 其他键

中断服务程序

Stop值取反 Stop置0FF

调用键盘扫描程序设置当前时分秒值

Stop置为0

保护现场

判断时间是否不小于59分55秒

报时

扫描键盘

G键?

调用启停子程序

S键?

调用设置时间子程序

COUNT加1

COUNT=40?

修改时间,调用ADDONE子程序

COUNT清0

显示时间,调用显示时间子程序

结束中断(发EOI命令)

恢复现场

中断返回

四、实验源代码

.486p

DATA SEGMENT AT 0 USE16

ORG 1000H

HOUR DW ? Y N

Y N

Y

Y N

MIN DW ?

SEC DW ?

SLL DB ?

COUNT DB ?

DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA

ORG 1500H

BEG:JMP START

TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H ;0~F的共阴极七段译码表 00H表示不显示任何东西

KEYCOD DB

0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H ;行列编码值

KEYVAL DB 0,1,2,3,4,5,6,7,8,9,0AH,0BH ;所有键的键面值

PORT1 EQU 340H ;数码管段选端口

PORT2 EQU 360H ;数码管位选端口,键盘矩阵的行列端口

START: MOV EAX,60000000H

MOV CR0,EAX

MOV AX,DATA

MOV DS,AX

MOV HOUR,0203H ;小时分钟以及秒的初始化

MOV MIN,0509H

MOV SEC,0502H

LEA BX,TAB

MOV SLL,0 ;开始暂停标志位置0

MOV COUNT ,0 ;中断次数计数初始值为0

;8255初始化 ,用于产生报时的脉冲

MOV EAX,80808080H;控制字

MOV DX,20CH ;后面的是4个8255的控制端口20C-20F (这个地址由实验台决定)

OUT DX,EAX ;初始化8255,A、B、C口均为方式0输出

MOV DX,20BH

MOV AL,0FFH

OUT DX,AL

;8254初始化,用于产生周期为25ms的中断

MOV AL,00110110B ;计数器0,先低后高,方式三,二进制

MOV DX,32cH ;写往控制口

OUT DX,AL

MOV DX,320H ;计数器0写初值:47KHz*25ms

MOV AX,1175

OUT DX,AL

MOV AL,AH

OUT DX,AL

;8259初始化

CLI :关中断

MOV DX,300H ;ICW1

MOV AL,00010011B

OUT DX,AL

MOV DX,308H ;ICW2

MOV AL,08H ;IR0中断类型号为08H

OUT DX,AL

MOV AL,00000001B ;ICW4

OUT DX,AL

MOV AL,0FEH ;IR0开屏蔽

OUT DX,AL

XOR AX,AX ;装载中断向量

MOV ES,AX

MOV DI,08H*4

MOV AX,OFFSET INTSR

MOV ES:[DI],AX

MOV AX,SEG INTSR

MOV ES:[DI+2],AX

STI ;开中断

JMP $

INTSR PROC ;中断服务程序

CMP MIN,0509H ;比较当前时间是否在59分55秒~00分00秒之间

JL NEXT1

CMP SEC,0505H

JL NEXT1

MOV DX,20BH

MOV AL,00H ;蜂鸣器低有效,报时

OUT DX,AL

JMP NEXT2

NEXT1: CMP MIN,0

JNE NEXT3

CMP SEC,0

JNE NEXT3

MOV DX,20BH

MOV AL,00H ;蜂鸣器低有效,报时

OUT DX,AL

JMP NEXT2

NEXT3: MOV DX,20BH

MOV AL,0FFH

OUT DX,AL

NEXT2: CMP COUNT,20 ;用8255产生0.5ms的蜂鸣

JLE NEXT4

MOV DX,20BH

MOV AL,0FFH

OUT DX,AL

NEXT4:CMP SLL,0

JZ LOB

CALL TSTART

LOB: CALL KEYCHECK ;检测有无键按下

CMP AL,0AH ;启停键按下,调用启停程序

JNZ NEXT5

CALL TSTART

JMP NEXT6

NEXT5: CMP AL,0BH ;设置键按下,调用设置时间程序

JNZ NEXT6

CALL SETTIME

NEXT6: INC COUNT ;当COUNT直为40时,加一秒,之后置0

CMP COUNT,40 ;25ms*40=1s

JB NEXT7

CALL ADDONE

MOV COUNT,0

NEXT7: CALL SHOW ;显示时间

MOV AL,20H ;发EOI命令,结束中断

MOV DX,300H

OUT DX,AL

IRET

INTSR ENDP

TSTART PROC ;控制时间暂停和开始。

CMP SLL,0

JNZ R1

DEC SLL

R1: CALL KEYCHECK

CMP AL,0AH

JZ R2