《微机原理与接口技术》课程设计课题:电子表的设计与实现姓名:朱佩班级:11级通信一班学号:1116303040第一章设计部分1.1 设计目的1、熟练掌握TND86/88教学系统的基本操作和调试程序的各种指令。
2、熟悉编程及调试程序的方法。
3、掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法。
4、掌握8255的各种工作方式及其应用编程。
5、掌握8253定时/计数器的工作原理、工作方式及其应用编程。
6、练习LED-KEYBOARD UNIT的使用方法和数码管的显示编程方法。
1.2 设计要求1、用微机原理实验箱提供的数码管和按键做。
2、电子表具有二十四小时循环记时功能,走时要准。
要有时钟对时功能并方便操作1.3 设计思路电子表主要由显示模块、对时模块和时钟运算模块三大部分组成。
其中对时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒计算到60时,要自己清零并向分进1;分计算到60时,要自己清零并向时进1;时计算到24时,要清零。
这样,才能循环记时。
第二章实现部分2.1 分析论证1、显示模块利用数码管的显示功能来设计。
数码管是由八个条形发光二极管组成的,这些发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。
通过在这八个发光二极管的阳极加+5 V或0 V的电压使不同的二极管发光,形成不同的字符和数字。
电子表用到的是0到9十个数字,他们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
该模块主要是将时钟运算模块和对时模块运算出来并存放在内存单元里的十六进制表示的时位和分位数据转化为十进制,并通过四个数码管显示出来。
该模块实现的硬件是TND86/88的LED-KEYBOARD UNIT。
2、时钟运算模块该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。
该模块可以细分为秒定时模块和运算模块。
秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现,可以选择TND86/88实验箱中的8253定时/计数器来提供,但又因为8253所能提供的信号的周期时毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。
中断信号是8253的通道2工作方式为方式3时,产生一个40ms的脉冲信号。
运算模块负责时、分、秒的计算,该模块主要通过8259的IRQ7号中断来实现,首先将秒定时模块提供的中断信号为8259的IRQ7中断请求信号。
但由于每40ms一次中断请求。
所以在中断服务程序必须利用已申请内存单元count来统计中断请求的次数,只有当count的值为25时,才能让秒单元内的数值加1。
另外,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1 、秒清零;当分加到60时,时加1、分清零。
当时加到24啊,直接清零。
3、对时模块该模块主要功能是修改时、分内存单元的数值。
在对时的时候,秒应停止不变,并且在对分进行调整的时,时单元内的数值不变。
由以上分析可见,对时、分的调整用两个优先级高于IRQ7的中断来完成。
因此,可以用8259的IRQ2中断来实现,两个中断源的中断请求信号只需直接接在两个按键即可起到对时作用。
2.2设计电路图电子表的完整电路图如下:2.3 原理说明电子表主要由8259A中断控制器、8253定时/计数器、8255A接口芯片、LED数码显示管和两个按键组成。
主要用8259A 的IRQ7的中断服务程序完成秒、分、时的运算即计时功能,IRQ6的中断服务程序完成调时、调分功能。
8253用来产生50ms 的脉冲信号作为IRQ7的中断请求信号。
按键KK1+和KK2+分别作为IRQ2和IRQ6的中断请求信号。
按键KK1+启动/关闭对时功能。
它决定是否屏蔽IRQ7和IRQ6中断源。
8255A 负责将内存里的时位和分位值输出到数码管2.4 元件功能说明8259A 的主要功能:(1)每片8259A 可管理8级优先级中断源,通过开关,最多可管理64级优先权的中断源。
(2)对任何一个级别的中断源都可单独进行屏蔽,使该级中断请求暂时被挂起,直到取消屏蔽时为止。
(3)能向CPU 提供可编程的标识码。
(4)具有多种中断优先权管理方式。
有完全嵌套方式、自动循环方式、特殊循环方式、特殊屏蔽方式和查询方式五种。
这些管理方式均可通过程序动态地进行变化。
在本设计中用到了这四种功能,电子表的灵活调时功能就是通过对级别的屏蔽或开启来实现的。
8255A 的主要功能:可编程外设接口芯片可由程序改变其功能,通用性强、使用灵活。
通过8255A ,CPU 可直接同外设相连接,其负责CPU 和外设之间的数据传送。
8253的主要功能:可编程定时器/计数器,其定时与计数功能可由程序灵活地设定,设定后与CPU 并行工作,不占用CPU 的时间。
通道2工作在3方式下,提供计算一秒的中断请求信号。
2.5 程序框图时、分转化为十进制,存到内存单元计算时、分的各位数值在TABLE 中对应编码 结束开始 依次在61H 段输出到LED 显显示模块程序图Yes Yes IRQ6中断M=M+1M=60M=0IRET中断服务程序IRQ6OFF=1? No OFF=2H=H+1 H=24? Yes H=0 YesNo NoNo2.6 调试结果分析将编写好的源程序输入,编译后出现很多错误,经过反复修改直到程序运行通过。
将生成的可执行程序装入TND86/88的内存里,在监控状态下运行程序,可是数码管显示的数字并不与理论计算值相符合,并且显示的数字不停地闪动,经过反复分析源程序发现问题出现在内存单元里时位和分位在转化为十进制时,存储转化的结果的地址空间的顺序弄混了。
数字闪动的原因应该出在显示子程序里,经过分析问题出在显示子程序里OFF=1?IRETOFF=0 屏蔽IRQ6中断,开IRQ2和IRQ7中断OFF=3?中断服务程序IRQ2IRQ2中断OFF=OFF+1OFF=2?NoNoNoYesOFF=0 屏蔽IRQ7中断,开IRQ2和IRQ6中断YesYesYes NoNoNoNoYes 中断服务程序IRQ7Yes YesIRQ7中断 COUNT=25?S=S+1 COUNT=0S=60?M=M+1 S=0 M=60?H=H+1 M=0H=24?H=0 IRETCOUNT=COUNT+1缺少延时程序。
编写延时子程序,并在显示子程序调用它;编译源程序,装入生成的可执行文件,并运行。
数码管显示的数字与理论值相符合,并能正常计时,但当按动KK1+键时,却不能启动对时功能,按动KK2+时,也不能调时、调分。
问题很可能出在两键控制的中断源上,检查源程序也找不出错误,当把IRQ5换成IRQ2后,在进行调试,结果成功。
2.7 程序清单STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDA TA SEGMENTH DW 000CHM DW 0000HS DW 0000HCOUNT DW 0000HOFF DW 0000HTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START: MOV AX,DATAM OV DS,AXP USH DSMOV AL,81HO UT 63H,ALMOV AX,0000HMOV DS,AXMOV AX,OFFSET IRQ2ADD AX,2000HMOV SI,0028HMOV [SI],AXMOV AX,0000HMOV SI,002AHMOV [SI],AXMOV AX,OFFSET IRQ6ADD AX,2000HMOV SI,0038HMOV [SI],AXMOV AX,0000HMOV SI,003AHMOV [SI],AXMOV AX,OFFSET IRQ7ADD AX,2000HMOV SI,003CHMOV [SI],AXMOV AX,0000HMOV SI,003EHMOV [SI],AXMOV AL,0B6HOUT 43H,ALMOV AL,68HOUT 42H,ALMOV AL,0BAHOUT 42H,ALPOP DSMOV AL,7BHOUT 21H,AL BEGIN:CALL DISSTIJ MP BEGINIRQ7: INC COUNTCMP COUNT,25JNZ RETURNMOV AX,0MOV COUNT,AXMOV AX,SINC AXMOV S,AXCMP AX,003CHJNZ RETURNMOV AX,0MOV S,AXMOV BX,MINC BXMOV M,BXCMP BX,003CHJNZ RETURNMOV BX,0MOV M ,BXMOV DX,HINC DXMOV H,DXCMP DX,0018HJNZ RETURNMOV DX,0MOV H,DX RETURN:MOV AL,7BHOUT 21H,ALMOV AL,20HOUT 20H,ALIRETIRQ6: MOV AX,OFFCMP AX,0001HJNZ HRMOV BX,MINC BXMOV M,BXCMP BX,003CHJNZ R0MOV BX,0MOV M ,BXJMP R0HR: CMP AX,0002HJNZ R0MOV BX,HINC BXMOV H,BXCMP BX,0018HJNZ R0MOV BX,0MOV H ,BXR0: MOV AL,0BBHOUT 21H,ALMOV AL,20HOUT 20H,ALIRETIRQ2: INC OFFMOV BX,OFFCMP BX,0003HJZ R1CMP BX,0001HJZ R2CMP BX,0002HJZ R2R1: MOV BX,0000HMOV OFF,BXMOV AL,7BHOUT 21H,ALMOV AL,20HOUT 20H,ALIRETR2:MOV AL,0BBHOUT 21H,ALMOV AL,20HOUT 20H,ALIRETDIS: PUSH AXMOV SI,3000HMOV AX,MMOV BL,10DIV BLMOV [SI],AHMOV [SI+1],ALMOV AX,HMOV BL,10DIV BLMOV [SI+2],AHMOV [SI+3],AL M OV DL,0F7HM OV AL,DLAGAIN: OUT 60H,ALMOV AL,[SI]M OV BX,OFFSET TABLE A ND AX,00FFHA DD BX,AXM OV AL,[BX]O UT 61H,ALC ALL DALL YI NC SIM OV AL,DLT EST AL,01HJ Z OUTR OR AL,1M OV DL,ALJ MP AGAINOUT: POP AXR ETDALL Y: PUSH CXMOV CX,000FH T1: MOV AX,0020H T2: DEC AXJNZ T2LOOP T1POP CXRETCODE ENDSEND START 第三章电子表使用说明本电子表可以24小时循环计时,并且具有调时功能,操作方法如下:开机运行后,即显示初始时间12:00整。