电子钟实验报告_第1页
电子钟实验报告_第2页
电子钟实验报告_第3页
电子钟实验报告_第4页
电子钟实验报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机原理与接口技术课程设计报告姓名:班级:专业:指导教师:2012 年 6 月 目录一、设计题目3二、题目要求3三、设计原理31、8259A中断控制器32、8254定时/计数器53、8255可编程芯片64、七段数码管7四、设计思路81、电子钟基本功能的实现82、电子钟按键功能的实现93、显示的实现10五、设计电路原理图10六、流程图111、主程序流程112、中断处理程序流程123、键盘扫描程序流程13七、程序清单(包括必要的注释)14八、设计最后实现的功能及结果21九、设计过程中的问题及解决方案22十、心得体会22附录一 TD-PIT-B实验系统的硬件环境22一、设计题目电子钟二、题目要求设计

2、一电子时钟,能在数码管上显示时间并计时。根据题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过.由8254定时,数码管显示时间,小键盘控制计时: 图2-11键(清除) 显示初值 00、002键(启动) 电子钟计时3键(停止) 电子钟停止计时4键(终止程序) 熄灭数码管,程序退出5键(设置初始值) 设置分、秒值。同时具有判断错误 的能力,若输入有错,则显示错误提示,此时按5可从输入预置值。前期完成的实验有:8259A中断控制器实验,8254定时计数器实验,8255并行接口实验,LED数码管测试实验。三、设计原理本系统是利用8254定时/计数器产生的固定频率的脉冲

3、作为8255可编程芯片的中断信号,来控制数码管的显示及小键盘的按键处理,从而实现电子钟的计时、按键控制等功能。1、8259A中断控制器8259A中断控制器将中断源优先级排队、辨别中断源以及提供中断向量的电路于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设置。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。8259A的内部结构和管脚如图3-1所示。3-1l 8259A的中断过程,即微机系统响应可屏蔽中断的过程(1)将加到引脚IR0IR7上的中断请求寄存到中断请求寄存

4、器中。(2)在中断屏蔽寄存器的管理下,没有被屏蔽的中断请求被送到优先权电路判优。(3)选中当前级别最高的中断源,然后从引脚INT向CPU发出中断请求信号。(4)CPU满足一定的条件后,向8259A发出两个中断响应信号(负脉冲):1)8259A从引脚INTA收到第1个中断响应信号之后,立即使中断服务寄存器中与被选中的中断源对应的那一位置1,同时把中断请求寄存器中的相应位清0。2)从引脚INTA收到第2个中断响应信号之后,8259A把选中的中断源类型码n通过数据线送往CPU。(5)在实模式下,CPU从4n4n+3单元取出该中断源的中断向量IP,CS,从而引导CPU执行该中断源的中断服务程序。l 8

5、259A编程(1)初始化编程提供了4个(ICW1ICW4)初始化命令字,写入命令寄存器组后,就建立了8259A的基本工作方式。系统8259A的初始化编程在微机启动时,由BIOS自动完成。用户不需再对其初始化,更改它的初始化设置。BIOS对系统8259A初始化为: 中断触发方式采用边沿触发。 中断屏蔽方式采用常规屏蔽方式。 中断优先级的管理采用完全嵌套即固定优先级方式。IR0的请求级别最高,IR7的请求级别最低。 中断结束,采用常规结束方式。(2)操作方式编程将操作命令字OCW1OCW3写入操作命令寄存器组,对中断处理过程实现动态控制。 OCW1 OCW3各命令格式如图3-2所示。 OCW1写中

6、断屏蔽字(对奇地址操作) 某位Mi为1,表示对应的中断源IRQi被屏蔽;Mi为0,IRQi被开放。 OCW2写中断方式命令字(对偶地址操作) 设置优先级是否进行循环,循环的方式及中断结束的方式。 OCW3(对偶地址操作) 用来设置特殊屏蔽方式、查询方式 用来读8259A的中断请求寄存器IRR,中断服务寄存器ISR、中断屏蔽寄存器IMR的当前状态。3-22、8254定时/计数器8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。l 8254具有以下基本功能:(1)有3个独立的16位计数通道;(2)每个计数器可按二进制或十进制(BCD)计数;(3)每个计

7、数器可编程工作在6种不同工作方式;(4)每个计数器允许的最高计数频率为10MNZ(8253为2MHZ);(5)有读回命令(8253没有),可以读出当前计数单元的内容和状态寄存器内容;图3-3图3-3是8254的内部结构框图和管脚图。它是由与CPU的接口、内部控制电路和三个计数器组成。l 8254的工作方式:方式0计数结束输出正跃变信号(可作为中断请求信号),方式1单脉冲发生器(形成负脉冲,宽度=NCLK脉冲周期)方式2分频器(输出固定频率的脉冲)方式3方波发生器方式4软件触发的单脉冲发生器(输出负脉冲,宽度为一个CLK周期)方式5硬件触发的单脉冲发生器(输出负脉冲,宽度为一个CLK周期)l 8

8、254的方式控制字格式,如图3-4: 图3-43、8255可编程芯片8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,具有A、B、C三个并行接口,用+5V单电源供电,其内部结构及管脚,如图3-5:图3-5l 8255的工作方式:方式0基本输入/输出方式,其工作特点为:1) 即为无条件输入/输出方式,端口与外设之间不需要联络信号。2) A口、B口、C口可由控制字规定为输入/输出。方式1选通型输入/输出方式方式2双向选通方式l 8255工作方式控制字和C口按位置位/复位控制字格式如图3-6所示:图3-64、七段数码管数码的显示方式中最常应用的是分段式,主要器件是七段发光二极管

9、(LED)显示器。它可以分为两种,一种是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一种是共阴极显示器(发光二极管的阴极都接在一个公共点上,使用时公共点接地)。我们的电子钟是由4个“七段数码管”排列组成,分别显示对应数字,如“00.00”。七段数码管a、b、c、d、e、f、g如图3-7所示:图3-7当显示“1”时b、c段亮,“2”时a、b、g、e、d亮,依次推导。下面是数码转换图3-8,其中包括七段码中共阴部分对应关系。汇编中显示0、1、2、3、4、5、6、7、8、9对应编码依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H。3-8四、设计思路本系统

10、所要完成的是电子钟的计时等功能,其中最基本的就是实现计时功能,并把相应的数值送到数码管上显示出来。1、电子钟基本功能的实现:在本系统中,用到的8254的功能只是相当于一个定时计,采用计数器0,工作于方式2,使8254的OUT0端输出周期性的负脉冲信号。我们给定时器输入10KHz频率的脉冲,这样每隔一秒就会在OUT0端产生0到1的跃变,作为中断IRQ的请求信号。当然,时钟的计数也有其特定的规则,那就是秒、分的个位逢十进一,十位逢六进一,所以,我们可以通过中断处理程序来控制其进位。这样我们便完成了计时功能。然而,如果仅仅将计时得到的相应数据送入数码管,我们会发现,四个数码管同时显示,无法完成其时钟

11、的显示功能。但是,我们知道,四个数码管的亮灭与小键盘X1,X2,X3,X4各列是否为低电平是相对应的(即:X1,X2,X3,X4依次对应从左到右的四个数码管,若X1为低电平,则数码管1亮;若X2为低电平,则数码管2亮;),于是,我们就可以将低电平输出到相应的键盘上,来实现对应数码管的显示。通过以上分析,我们可以用四位二进制码分别对应表示X4X3X2X1的逻辑值(1-高电平,0-低电平),这样要实现时钟的显示功能,便可以按照以下方法来进行:首先将秒的个位数据通过8255的B端口送给数码管,同时将二进制码“0111”通过8255的A端口送给小键盘X4X3X2X1,这样通过计算机的扫描后,就会在数码

12、管4上显示秒的个位值;接着将秒的十位数据送给数码管,同时将二进制码“1011”送给小键盘X4X3X2X1,这样就会在数码管3上显示相应的数值;同样的道理,分别将分的个位、十位送给数码管,“1101” 、“1110”送给小键盘X4X3X2X1,就会依次在数码管2、1上显示分的个位、十位数值。另外,必须注意的一点就是,显示的时间应该是:XX.XX,中间的一点显示在分的个位上,也就是说在数码管2上显示那一点,以区分分与秒。所以,我们将显示分个位的数码管的二进制码最高位置“1”,其他数码管置“0”,便达到了显示点的功能。从上面的方法我们可以看出,电子钟分秒各位的显示并不是同时进行的,而是按顺序依次循环

13、显示的,它利用的就是人的视觉暂留现象来欺骗人们的眼睛,造成一种“四位数值同时显示”的假象。2、电子钟按键功能的实现:观察小键盘,我们会发现它其实有两行(对应Y1、Y2)四列(对应X1、X2、X3、X4)共八个键,前面我们在实现时钟的显示功能时,就是分别将相应的二进制编码送到小键盘,来实现对应数码管的显示。其实,它是一个循环扫描的过程,当它扫描到对应的X列为低电平时就显示相应的数码管,同时把Y1、Y2的逻辑值读回。所以,我们就可以利用这点,仅仅判断Y1、Y2的逻辑值就可以辨别究竟按下了哪个键,并通过相应的编程来完成不同键的按键功能。具体实现过程是这样的,我们将Y1、Y2的逻辑值送到8255的C端

14、口,通过清零仅留下最低两位来实现Y2Y1的逻辑值判别。假如Y2Y1的逻辑值是“01” ,说明是Y2行的键被按下,假如是“10”,则Y1行的键被按下。在判别了哪行键被按下后,我们将X4X3X2X1列的逻辑值前面增加一位作为按键的二进制编码,就可以用来判别究竟是哪个键被按下了,其中“0”- Y1行,“1”- Y2行。我们按照从左到右、从上到下的顺序将小键盘的各键定义为1-8键,具体编码如下:1-4键在Y1行:011100110101011001115-8键在Y2行:11110111011101110111l 1键清除功能的设置:在判别了按键的逻辑值为01110后,将存储时间的每一个内存单元赋0,这

15、样在数码管显示的就是00.00,便达到了清除功能的目的。l 2键启动、3键停止计时功能的设置:在进行2键和3键功能设置之前,我们必须定义一个暂停标志位:PAUSE,它用标准的逻辑值(0、1)来表示,假如PAUSE=0,在进行计时设置的时候,让其自动加1,依次显示时间的各位;假如PAUSE=1,我们就将其返回,停止加1,即暂停计时。接着,假如我们判别的是2键被按下,就令PAUSE=0,让计数器计时,自动加1;假如我们按下的是3键,就令PAUSE=1,让计数器暂停计时,即停止加1。l 4键终止程序功能的设置:从上面的分析,我们已经知道,只有同时将对应键盘X列的低电平送到相应的数码管才会使得数码管亮

16、,所以我们在判别了是4键被按下后,只要将键盘对应的二进制码全部赋高电平,并送到数码管,同时结束程序,就可以实现熄灭数码管、退出程序的功能。l 5键重置初始值功能的设置:在这里我们设置了两个标志位:调整位标志ADJUST和闪烁标志FLASH。它们的具体设置如下:ADJUST初始设置为00H,表示非调整状态,01H表示调整秒的个位,02H表示调整秒的十位,03H表示调整分的个位,04H表示调整分的十位。FLASH设置为逻辑值,初始设置为00H,表示非闪烁状态,0FFH表示闪烁,其闪烁功能实现的过程为:假如FLASH=0FFH,则将00H送给数码管,让数码管不显示。然后,在中断计时程序里面,加入FL

17、ASH取反语句,由于计时程序每秒加1循环一次,这样FLASH也实现了每秒改变逻辑值一次。也就是说,数码管闪烁的周期是1秒。当然,闪烁标志位只是在有对应位需要调整的时候才用的着。要实现5键设置初始时间的功能,我们就必须增加一个键(6键)来控制时间的增加。l 6键时间位加1功能的设置这里,我们再引进一个标志位:按键标志KEYMARK。其设置为逻辑值,初始设置为0,表示允许响应此次按键,并在响应过后,将其置1;KEMARK为1时,表示不响应此次按键。之所以要设置此标志位,是因为键盘扫描的速度非常快,假如我按下6键需要调整时间加1,我按下的时间再怎么短,计算机一定已经扫描了无数次,这样一来,我只按了一

18、次,时间位就会响应无数次,实现了无数次的加1,从而无法实现6键的功能。 3、显示的实现:使用8259控制,用数码管的显示功能来设计,显示部分用四只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。通过在这八只发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。电子时钟用到的是0-9十个数字,它们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。五、设计电路原理图系统的连线图主要由五个部分构成。8259中断控制器、8255并口控制器、8254定时计数器、键盘及数码管显示单元、开关及LED

19、显示单元构成。如图5-1所示:图5-1六、流程图1、主程序流程(图5-2):主程序的流程图是对整个程序的逻辑的图象表示。首先是设置8254、8255、8259的各个端口地址。接着初始化各个芯片,开始计时,并通过8259中断控制时间的正确显示。在整个过程中都在检测是否有铵键响应。有则停止,没有则返回继续执行。如图5-2。 图5-22、中断处理程序流程(图5-3):图5-33、键盘扫描程序流程(图5-4):图5-4七、程序清单(包括必要的注释) INTCSR_BYTE0 EQU 0D838H ;设置PC机内部8259的端口地址 INTCSR_BYTE1 EQU 0D839H INTCSR_BYTE

20、2 EQU 0D83AH INTCSR_BYTE3 EQU 0D83BH IMB4_BYTE3 EQU 0D81FH MY8254_COUNT0 EQU 0E040H ;8254计数器0端口地址 MY8254_COUNT1 EQU 0E041H ;8254计数器1端口地址 MY8254_COUNT2 EQU 0E042H ;8254计数器2端口地址 MY8254_MODE EQU 0E043H ;8254控制寄存器端口地址 MY8255_A EQU 0E060H ;8255的A口地址 MY8255_B EQU 0E061H ;8255的B口地址 MY8255_C EQU 0E062H ;825

21、5的C口地址 MY8255_MODE EQU 0E063H ;8255的控制寄存器地址 IRQ EQU 01CCH DATA SEGMENT CSBAK DW ? ;保存INTR原中断处理程序入口段地址的变量 IPBAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量 MKBAK DB ? ;保存INTR原中断屏蔽字的变量 ADJUST DB 00H ; 调整位标志 FLASH DB 00H ; 闪烁标志位 PAUSE DB 0B ;暂停标志位 KEYMARK DB 0B ;按键标志位 INKEY DB 00H ;按键 SECONDA DB 00H ;秒个位 SECONDB DB 0

22、0H ;秒十位 MINUTEA DB 00H ;分个位 MINUTEB DB 00H ;分十位 LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管显示“0-9”编码 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: CLI MOV AX,DATA MOV DS,AX MOV DX,INTCSR_BYTE0 ;初始化PCI卡中断控制寄存器 MOV AL,00H ;向PCI卡中断控制寄存器中写入003F1F00H OUT DX,AL MOV DX,INTCSR_BYTE1 MOV AL,1F

23、H OUT DX,AL MOV DX,INTCSR_BYTE2 MOV AL,3FH OUT DX,AL MOV DX,INTCSR_BYTE3 MOV AL,00H OUT DX,AL MOV AX,0000H ;替换INTR的中断矢量 MOV ES,AX MOV DI,01CCH MOV AX,ES:DI MOV IPBAK,AX ;保存INTR原中断处理程序入口偏移地址 MOV AX,OFFSET MYINT CLD STOSW MOV AX,ES:DI MOV CSBAK,AX MOV AX,SEG MYINT ;设置中断矢量 STOSW IN AL,0A1H MOV MKBAK,AL

24、 AND AL,0F7H OUT 0A1H,AL STI MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,17H OUT DX,AL MOV DX,MY8254_COUNT0 ;装入计数初值 MOV AL,0 OUT DX,AL MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,81H ;A口,B口均为方式0,输出;C口:低四位输入,高四位输出。其实只用到了最低两位来判断Y1、Y2的逻辑值。 OUT DX,AL A1: NOP ;等待 MOV CX,32H A2: MOV DX, MY8255_B MOV AX,DATA MOV DS,

25、AX MOV BX,OFFSET LED MOV AL,SECONDA XLAT LED CMP ADJUST,01H ;是否调整秒的个位 JNE DIS_SECONDA CMP FLASH,0FFH ;是否闪烁 JNE DIS_SECONDA AND AL,00H ;熄灭数码管 DIS_SECONDA: OUT DX, AL ;显示秒的个位 MOV DX,MY8255_A MOV AL,0111B OUT DX,AL CALL KEYCTR ;调用按键处理程序 CALL DELAY ;调用延迟程序 MOV DX,MY8255_B MOV AX,DATA MOV DS,AX MOV BX,OF

26、FSET LED MOV AL,SECONDB XLAT LED CMP ADJUST,02H ;是否调整秒的十位 JNE DIS_SECONDB CMP FLASH,0FFH JNE DIS_SECONDB AND AL,00H DIS_SECONDB: ;显示秒的十位 OUT DX,AL MOV DX,MY8255_A MOV AL,1011B OUT DX,AL CALL KEYCTR CALL DELAY MOV DX,MY8255_B MOV AX,DATA MOV DS,AX MOV BX,OFFSET LED MOV AL,MINUTEA XLAT LED CMP ADJUST,

27、03H ;是否调整分的个位 JNE DIS_MINUTEA CMP FLASH,0FFH JNE DIS_MINUTEA AND AL,00H DIS_MINUTEA: ADD AL,80H ;显示分的个位 OUT DX,AL ;显示“XX.XX”中的“.” MOV DX,MY8255_A MOV AL,1101B OUT DX,AL CALL KEYCTR CALL DELAY MOV DX,MY8255_B MOV AX,DATA MOV DS,AX MOV BX , OFFSET LED MOV AL, MINUTEB XLAT LED CMP ADJUST,04H ;是否调整分的十位

28、JNE DIS_MINUTEB CMP FLASH,0FFH JNE DIS_MINUTEB AND AL,00H DIS_MINUTEB: ;显示分的十位 OUT DX,AL MOV DX,MY8255_A MOV AL , 1110B OUT DX,AL CALL KEYCTR CALL DELAY LOOP SK1 JMP SK2 SK1: JMP A2 SK2: JMP A1 MYINT: PUSH DS PUSH AX PUSH DX MOV DX,IMB4_BYTE3 IN AL,DX MOV DX,INTCSR_BYTE2 MOV AL,3FH OUT DX,AL ;清8259中

29、断标志 MOV AL,63H ; 根据中断号修改 OUT 0A0H,AL MOV AL,62H OUT 20H,AL MOV AX,DATA MOV DS,AX NOT FLASH ;中断处理程序 MOV KEYMARK,0B CMP PAUSE,0B JNE L1 INC SECONDA CMP SECONDA,0AH ;秒的个位与10比较 JC L1 MOV SECONDA,00H ;如果大于等于10,则清零 INC SECONDB CMP SECONDB,06H ;秒的十位与6比较 JC L1 MOV SECONDB,00H ;秒的十位清零 INC MINUTEA CMP MINUTEA

30、,0AH JC L1 INC MINUTEB MOV MINUTEA,00H CMP MINUTEB,06H JC L1 MOV MINUTEB,00H L1: POP DS POP AX POP DX IRET KEYCTR PROC NEAR ;键盘扫描子程序 MOV INKEY,AL MOV DX,MY8255_C IN AL,DX AND AL,03H ;是否高6位清零 CMP AL,10B ;是否按下Y1行 JNE INY2 ADD INKEY,00H JMP JUDGKEY INY2: CMP AL,01B ;是否按下Y2行 JNE SKIP ADD INKEY,10000B JU

31、DGKEY: CMP INKEY,01110B ;是否按下1键 JNE KEY2 AND SECONDA,00H ;时间清零 AND SECONDB,00H AND MINUTEA,00H AND MINUTEB,00H SKIP: JMP BACK KEY2: CMP INKEY,01101B ;是否按下2键 JNE KEY3 AND PAUSE,0B ;启动计时 JMP BACK KEY3: CMP INKEY,01011B ;是否按下3键 JNE KEY4 MOV PAUSE,1B ;暂停计时 JMP BACK KEY4: CMP INKEY,00111B ;是否按下4键 JNE KEY

32、5 MOV DX,MY8255_A ;熄灭数码管,程序退出 MOV AL,0FFH OUT DX,AL CALL DELAY MOV AX,4C00H INT 21H JMP BACK KEY5: CMP INKEY,11110B ;是否按下5键 JNE KEY6 CMP KEYMARK,0B JNE KEY6 MOV KEYMARK,1B MOV PAUSE,1B CMP ADJUST,04H ;是否调整完分的十位 JE TL INC ADJUST JMP BACK TL: AND ADJUST,00H JMP BACK KEY6: CMP INKEY,11101B ;是否按下6键 JNE

33、BACK CMP KEYMARK,0B JNE BACK MOV KEYMARK,1B CMP ADJUST,01H ;是否调整秒的个位 JNE AD1 INC SECONDA ;秒的个位加一 CALL OUTCLEAR ;判断溢出 JMP BACK AD1: CMP ADJUST,02H ;是否调整秒的十位 JNE AD2 INC SECONDB CALL OUTCLEAR JMP BACK AD2: CMP ADJUST,03H ;是否调整分的个位 JNE AD3 INC MINUTEA CALL OUTCLEAR JMP BACK AD3: CMP ADJUST,04H ;是否调整分的十位 JNE BACK INC MINUTEB CALL OUTCLEAR BACK: RET KEYCTR ENDP OUTCLEAR PROC NEAR ;溢出清零程序 CMP SECONDA,0AH JC Q1 AND SECONDA,00H Q1: CMP SECONDB,06H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论