微机原理与接口技术综合实验电子钟实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理综合实验:电子钟
实验要求
8253每1s产生中断请求给8259,中断服务程序利用8255控制数码管,构建一个电子钟。
一、实验原理(相关芯片大致介绍)
1.8254
8254 是Intel 公司生产的可编程间隔定时器,是8253 的改进型,比8253 具有更优良的性能。8254 具有以下基本功能:
(1)有3 个独立的16 位计数器。
(2)每个计数器可按二进制或十进制(BCD)计数。
(3)每个计数器可编程工作于6 种不同工作方式。
(4)8254 每个计数器允许的最高计数频率为10MHz(8253 为2MHz)。
(5)8254 有读回命令(8253 没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为:n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。
2.8259
Intel公司专为控制优先级中断而设计开发的芯片,包括中断源优先级排队、辨别中断源以及提供中断矢量的电路,无需附加任何电路,用户只需对8259 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式。同时,在不需增加其他电路的情况下,通过多片8259 的级连,能构成多达64 级的矢量中断系统。管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU 传送中断类型号。
3.8255
并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU 和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。8255 可编程外围接口芯片是Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,用+5V 单电源供电,能在以下三种方式下工作:
方式0--基本输入/输出方式、
方式1--选通输入/输出方式、
方式2--双向选通工作方式。
二、设计方案
①:初始化各芯片,选定工作方式。
②:使用功能调用获取当前时间,作为初值装入。
③:8254芯片开始计数,每隔1s产生一个中断信号。
④:8259芯片接受到中断信号,并传给cpu,cpu响应中断。
⑤:返回到③循环执行。
⑥:添加子程序,判断当有按键按下时,终止计时。
三、接线设计
8255 PA0~PA7,PB0~PB7……………………数码管显示
8259IQ1……………………8253OUT
18.432KHZ……………………853CLK
+5V……………………8253GATE
四、源代码
CS0 EQU 3000H ;片选CS0对应的端口始地址
CS2 EQU 3040H ;片选CS2对应的端口始地址
MY8255_A EQU CS0+00H ;8255的A口地址
MY8255_B EQU CS0+01H ;8255的B口地址
MY8255_C EQU CS0+02H ;8255的C口地址
MY8255_MODE EQU CS0+03H ;8255的控制寄存器地址
MY8254_COUNT0 EQU CS2+00H ;8254计数器0端口地址
MY8254_MODE EQU CS2+03H ;8254控制寄存器端口地址
IRQ_IVADD EQU 01C8H ;IRQ10对应的中断矢量地址
IRQ_OCW1 EQU 0A1H ;IRQ10对应PC机内部8259的OCW1地址
IRQ_OCW2 EQU 0A0H ;IRQ10对应PC机内部8259的OCW2地址
IRQ_IM EQU 0FBH ;IRQ10对应的中断屏蔽字
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
CS_CHUSHI DW ? ;保存IRQ10原中断处理程序入口段地址的变量
IP_CHUSHI DW ? ;保存IRQ10原中断处理程序入口偏移地址的变量
IM_CHUSHI DB ? ;保存IRQ10原中断屏蔽字的变量
HOUR DB 0
MINUTE DB 0
SECOND DB 0
DTABLE
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS ;键值表,0~F对应的7段数码管的段位值
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CLI ;清除中断标志位
MOV AX,0000H ;替换IRQ10的中断矢量
MOV ES,AX
MOV DI,IRQ_IVADD
MOV AX,ES:[DI]
MOV IP_CHUSHI,AX ;保存IRQ10原中断处理程序入口偏移地址 MOV AX,OFFSET MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_CHUSHI,AX ;保存IRQ10原中断处理程序入口段地址 MOV AX,SEG MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口段地址
MOV DX,IRQ_OCW1 ;设置中断屏蔽寄存器,打开IRQ10的屏蔽位 IN AL,DX
MOV IM_CHUSHI,AL ;保存IRQ10原中断屏蔽字
AND AL,IRQ_IM
OUT DX,AL
MOV AH,2CH ;获取现在的时间
INT 21H
MOV second,DH
MOV MINUTE,CL
MOV HOUR,CH
STI
MOV SI,3000H ;建立缓冲区,存放要显示的键值
MOV AL,00H ;先初始化键值为0
MOV [SI],AL
MOV [SI+1],AL
MOV [SI+2],AL
MOV [SI+3],AL
MOV [SI+4],AL
MOV [SI+5],AL
MOV DI,3005H
MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,81H ;方式0,A口、B口输出,C口低4位输入 OUT DX,AL
MOV DX,MY8254_MODE ;初始化8254工作方式
MOV AL,34H ;计数器0,方式2
OUT DX,AL