微机原理课程设计报告电子秒表设计.doc

上传人:文库蛋蛋多 文档编号:4149117 上传时间:2023-04-07 格式:DOC 页数:26 大小:140.50KB
返回 下载 相关 举报
微机原理课程设计报告电子秒表设计.doc_第1页
第1页 / 共26页
微机原理课程设计报告电子秒表设计.doc_第2页
第2页 / 共26页
微机原理课程设计报告电子秒表设计.doc_第3页
第3页 / 共26页
微机原理课程设计报告电子秒表设计.doc_第4页
第4页 / 共26页
微机原理课程设计报告电子秒表设计.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《微机原理课程设计报告电子秒表设计.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计报告电子秒表设计.doc(26页珍藏版)》请在三一办公上搜索。

1、湖南文理学院芙蓉学院微机原理课程设计报告课程名称: 电子秒表 专业班级: 学生学号: 学生姓名: 指导教师: 完成时间: 评阅意见:评定成绩: 评阅教师 日期 目 录第1章 总体设计方案11.1 课程设计的内容和要求11.2 课程设计原理11.3 课程设计思路21.4 设计环境2第2章 详细设计方案32.1 实现方法32.2 模块的设计与实现42.2.1主程序模块42.2.2初始化模块52.2.3时钟模块62.2.4秒表模块62.3 程序连线图8第3章 调试及结果分析93.1 调试步骤及方法93.1.1程序的语法错误93.1.2时钟模块调试过程93.1.3秒表模块调试过程113.2 实验结果1

2、1参考文献13附 录(源程序)14第1章 总体设计方案1.1 课程设计的内容和要求一、课程设计内容:设计一个带时间显示的电子秒表,具体内容如下:1. 电子秒表的初始状态为零,分别显示分、秒、毫秒;2. 设计一个按钮,按第一次开始计时,按第二次计时暂停,显示当前记录的时间,按第三次计时停止,回到初始态;3. 有时间显示的功能,当不用电子秒表的功能时,显示当先的时间,分别为时、分、秒形式。二、课程设计要求:1. 独立完成课程设计任务;2. 通过老师当场验收;3. 交出完整的课程设计报告。1.2 课程设计原理题目要求实现电子秒表功能和显示当前时间的功能。这两部分的共同点是都需要实现时间显示和时间运行

3、功能。除此之外,电子秒表还需要有开始计时和停止计时功能。因此电子秒表是本次课程设计的主要部分。在本次设计中主要使用了8255A并行接口芯片,8253定时/计数器,8259A中断控制器,8279键盘/显示芯片。具体原理和功能如下:1. 利用8255A芯片实现时钟和秒表之间的切换。将其连接到一个开关上,读取开关的电位,以此来判断是时钟模式还是秒表模式。2. 利用8253芯片计时。用8253的分频功能使其产生周期为1s和1ms的方波,分别为时钟和秒表计时。3. 利用8259A芯片接收中断。中断分为三种类型,分别是一秒一次的时钟计时中断,一毫秒一次的秒表计时中断和控制秒表开始和停止的中断。4. 利用8

4、279芯片在数码管上显示当前时间或秒表时间。1.3 课程设计思路由于要求实现时钟和秒表两种功能。因此需要设计时钟和秒表两个模式。时钟模式下,以秒为计时单位,计时功能和显示当前时间功能。秒表模式下,以毫秒为计时单位,有开始、停止和显示计时结果的功能。首先,将8255A芯片的PC0接口连接到开关。读C端口的值。判断是0还是1。0代表时钟模式,1代表秒表模式。然后,根据判断结果调用相应模式下的显示功能。这样不停地读8255A芯片,然后判断,最后显示。构成一个死循环。若在这个过程中有中断,则会执行中断服务程序。时间中断由8253芯片产生,周期分别为1s和1ms。时钟的最大时间为23时59分59秒,超过

5、后从零开始重新计时。秒表最大时间为59分59秒999毫秒。当计数大于这个值时,秒表不再更新。对秒表的控制中断由一个手动脉冲产生。将按键次数保存在名为pad的内存空间中。pad只能有0、1、2三个值,分别代表清零、开始计时和停止计时。8259芯片接收中断,并调用相应模式下的中断服务程序。在时钟模式下,直接将时间加一秒。在秒表模式下,或清零(重新开始,pad=0),或将时间加一毫秒(开始计时,pad=1),或不做任何处理(停止计时,pad=2)。 要实现以上分析的功能,可以设计4个模块。模块名和作用见表1.1。表1.1 模块划分及功能描述模块名称功能主程序模块调用初始化模块,判断时间模式,调用相应

6、的显示函数初始化模块初始化各芯片,装入中断向量时钟模块实现时钟计时和显示功能秒表模块实现秒表的计时、显示和控制功能1.4 设计环境硬件环境:AEDK实验箱软件环境:LCT88EA应用软件、WindowXP操作系统、PC机第2章 详细设计方案2.1 实现方法1. 内存分配程序中所需定义的内存单元含义如下:timer0:存放当前时钟的值,共6个字节。时、分、秒各占两个字节;timer1:存放秒表的计数值,共7个字节。分和秒各占两个字节,毫秒占三个字节;pad:存放秒表的按键次数,共1个字节。可以有三种取值,0代表清零,1代表开始计时,2代表停止计时。当计数值大于2时,变为0重新开始计数;tab:存

7、放09在数码管上显示的编码,共10个字节。2. 按键设置秒表有一个按钮,接手动脉冲和8259A芯片的中断引脚。每次按键,pad都做相应改变。按第一次开始计时(pad=1),按第二次计时暂停(pad=2),显示当前记录的时间,按第三次计时停止(pad=0),回到初始态。3. 时钟频率选择CPU的频率为。用8253芯片产生方波。计数器1的接CPU时钟脉冲,计数初值为307,使产生周期为1ms的方波。计数器0的接,计数初值为1000,使产生周期为1s的方波。4. 中断设置8259A芯片的中断引脚、分别接8253芯片的、和手动脉冲。5. 显示设置显示功能由8279芯片和数码管实现。显示分为两种情况。时

8、钟模式下的显示规则是(时-分-秒),即(00-00-00)。秒表模式下的显示规则是(分-秒.毫秒),即(00-00.000)。6. 端口地址分配本次课程设计共使用了4种芯片,他们的端口号设置如表2.1所示。表2.1 端口地址分配表芯片名称端口号含义8255A200H203HA端口、B端口、C端口、控制端口8253210H213H计数器0、计数器1、计数器2、控制端口8259A220H221H偶地址端口、奇地址端口8279230H、232H数据端口、控制端口7. 子程序子程序名称和功能如表2.2所示。表2.2 子函数表名称作用名称作用i8255初始化8255A芯片i8253初始化8253芯片i8

9、259初始化8259A芯片,装中断向量i8279初始化8279芯片int_timer0时钟中断服务程序display0显示时钟int_timer1秒表中断服务程序display1显示秒表int_pad更改按键次数2.2 模块的设计与实现2.2.1主程序模块主程序的主要功能是初始化各芯片,模式选择以及调用显示函数。在初始化结束后,程序进入死循环,不断检测8255A芯片C端口的状态,CUP随时响应中断,更新时钟状态,把应显示的结果送入time0和time1中,以备显示。主程序的流程如图2.1。开始设置数据段关中断初始化各芯片开中断读8255A芯片的C端口值PC=0调用display0,显示时钟调用

10、display1,显示秒表是否图2.1 主程序流程图2.2.2初始化模块初始化模块主要用于初始化各芯片,设定芯片工作方式,以及装入中断向量等。各芯片初始化情况如表2.3所示。表2.3 芯片的初始化芯片名称初始化8255AC口低四位输入,控制字9BH8253计数器1:先送低八位,后高八位,工作方式3,二进制计数,计数初值307;计数器0:先送低八位,后高八位,工作方式3,二进制计数,计数初值10008259AICW1:上升沿触发,单片,写ICW4,控制字13H;ICW2:中断类型号30H,控制字30H;ICW4:正常EOI,8086/8088系统,控制字01H;中断向量:中断类型号30H、31H

11、、32H对应的中断服务程序为int_timer0、int_timer1、int_pad8279清除显示和显示寄存器,控制字0D2H;键盘显示命令,八个字符显示,左端输入方式,控制字00H2.2.3时钟模块时钟模块主要是为了实现时钟的计时和显示功能。时钟的计时功能由int_timer0子程序实现,属于中断服务程序。显示功能由display0程序实现,由主程序调用。1. int_timer0这个中断服务程序的中断类型号为30H。8253芯片产生周期为1s的方波,当其上升沿到达8259A芯片的引脚后,进入中断服务程序int_timer0。进入int_timer0后,首先从内存中读出前一秒的时间的最后

12、一位,即time0的最后一位,然后加1。若有进位,则把当前这一位置零,然后读出前一位再加一,再判断是否有进位。以此类推,直到没有进位或者达到计数最大值为止。把修改后的时间存回内存中,以备显示。2. display0这是时钟模式的显示程序。在时钟模式下会反复被主程序调用。首先设置8279A芯片的显示方式。然后读取time0的最后一位,用XLAT命令查tab表,将得到的结果输出到8279A芯片,然后在数码管上显示。每显示两位数字,就在中间显示一条横线以分隔时分秒。2.2.4秒表模块与时钟模式类似,秒表模式也需要计时和显示功能。除此之外,秒表模式还需要有按键控制功能用于开始、暂停计时和清零。计时功能

13、由int_timer1实现,属于中断服务程序。显示功能由display1子程序实现。按键功能由int_pad实现,属于中断服务程序。1. int_timer1这个中断服务程序的中断类型号为31H。8253芯片产生周期为1ms的方波,当其上升沿到达8259芯片的引脚后,进入中断服务程序int_timer1。进入int_timer1后,首先从内存pad中读出按键次数。若pad中的值为2,说明现在秒表处于停止状态,计时停止,不将秒表的计时值刷新,所以直接中断返回。若pad中的值为1,说明秒表正在计时,应将秒表的计时值加1ms。加1的方法与时钟加1的方法类似。先读出 time1的最低位,加1后判断进位

14、。最后中断返回。若pad中的值为0,说明秒表要重新开始计时,需要将秒表清零。即把time0中的每一位都改为零。最后中断返回。2. display1这是秒表模式的显示程序,在秒表模式下会反复被主程序调用。显示方法与display1类似。不同的是,秒表的显示格式是00-00.000,即在显示秒的最后一位时,需要加一个小数点。实现的方法是,先将这一位查表转化为可在数码管上的编码,由于数码管是否显示小数点是由编码的最高位指示的,所以只需将编码和80H进行或运算即可添加小数点。最后将结果输出到数码管显示。3. int_pad 这个中断服务程序的中断类型号为32H。当手动脉冲被按下的时候,进入这个中断服务

15、程序。将pad中的值加1。pad中的初始值为0,当加到3时,将其变为0。2.3 程序连线图CS=210H8253OUT1CLK0OUT0CS=220H8259AIR1IR0IR3手动脉冲8279CS=230H数码管CLK1CPU时钟脉冲8255APC0 CS=210H开关图2.2 程序连线图第3章 调试及结果分析3.1 调试步骤及方法由于程序比较大,要整体调试会非常困难,不容易找出哪里有问题。所以必须分而治之,将程序拆分开来调试。由于整个程序被化分为了几个模块,所以,调试可以按模块来进行。我将调试分为时钟模块和秒表模块。因为时钟模块相对简单,所以先调试时钟模块,后调试秒表模块。3.1.1程序的

16、语法错误 由于对汇编语言还不熟悉,所以出现了较多的语法错误。主要错误有以下一些。程序格式错误。例如,子程序最后应写RET。寄存器寻址方式错误。例如,在装中断向量的时候,应该是寄存器间接寻址,要加中括号。跳转错误。跳转的最大值不能超过一定的限度。而且跳转的标号不能重复。写地址错。例如,在向某个端口送数据的时候,不能直接写地址,而必须将端口地址放入寄存器DX中,再送数据。3.1.2时钟模块调试过程时钟模块又分为显示模块和计数模块。先调试显示模块,再调试计数模块。1. 显示模块调试中的问题及解决方案问题1:数码管没有任何反应问题分析:在初始化8279时,数码管就应该被清除显示,即会不显示任何东西,但

17、是先在数码管上的数并没有被清除,说明了可能是8279工作错误。检查程序后发现,8279的控制端口是231H,但是正确的应该为232H。解决方案:将控制端口号改为232H。问题2:数码管显示乱码问题分析:8279在初始化时已经清除了显示,但是还是显示乱码,说明是后送入的数有错。解决方案:检查程序后发现,在初始化各芯片的时候没有关中断和开中断,8259A可能错误的响应的中断。问题3:显示顺序颠倒问题分析:由于设置的是从左到右的八位显示,所以应该是送显示数的顺序不对。解决方案:将display0中的送显顺序颠倒。2. 计数模块调试中的问题及解决方案问题1:数码管显示结果一直为初始值问题分析:可能的原

18、因是8253芯片没有产生方波或是8259A芯片没有响应中断。解决方案:将8259A和8253断开,然后将手动脉冲接到8259A的中断引脚。用手动脉冲来产生中断。结果显示没有任何改变,说明中断有问题。问题2:中断响应问题,当接手动脉冲时,8259A的表现是不响应中断,时钟值不增加。问题分析:检查中断向量装入是否正确,再检查中断服务程序。最后发现是中断服务程序有错。在使用各寄存器之前,没有对其进行相应的保护,导致结果异常。 解决方案:int_timer0开始时将AX/BX/CX/DX分别压入栈中,在程序结束时弹出。问题3:将8253和8259A相连后,只能响应一次中断。问题分析:在中断没有错误的情

19、况下,只能是8253出错。8259A响应了一次中断是因为8253在启动时,会从低电平变为高电平。在这个上升沿,8259A响应了中断,将时钟加1。但后来就没有响应中断。再将8253接到LED灯上,发现其一直不亮,说明8253产生的波有错误。检查8253的初始化后发现是送的计数初值和送数的方式都有错。解决方案:将计数初值和送数方式改正。问题4:时钟显示错位问题分析:在只送初值的情况下,显示没有问题,但当时钟增加的时候,显示会错位。解决方案:改变显示方式在显示之前将显示方式写为90H3.1.3秒表模块调试过程在时钟模块被调试完后,秒表模块就更容易调试了,因为两个模式的显示和计时都大同小异。因此,调试

20、过程中的主要问题出在秒表的控制上。问题1:按控制按钮秒表没有反应问题分析:可能是控制信号没有得到响应,检查程序发现,int_pad的中断类型号装入有错。解决方案:将中断类型好改正后问题解决了。问题2:在秒表模式下开始计后,若切换到时钟模式,则显示会发生错误。问题分析:肯能是两个模式有冲突的地方。经过检查程序发现,可能是因为没有保护寄存器的原因。解决方案:int_timer1开始时将AX/BX/CX/DX分别压入栈中,在程序结束时弹出。问题3:时钟模拟计时误差大。在时钟计时显示的时候,有时会停顿有时又加的比较快。问题分析:可能是因为CPU响应中断需要一定的时间,也可能是程序安排不恰当解决方案:优

21、化程序的结构,适当改变8253的计数初值。3.2 实验结果本程序能够满足题目的所有要求,其测试结果如下:1. 将开关置于低电平,进入时钟模式。数码管显示当前时间,并每秒加1。20-13-592. 将开关置于高电平,进入秒表模式。数码管显示计数初值。00-00.0003. 在秒表模式下,按一下秒表控制按钮,开始计时,数码管不断刷新秒表计时。00-00.1984. 在秒表开始计数后,切换到时钟模式,时钟仍然在正常计时。20-14-115. 切换回秒表模式下第二次按下按钮,计时停止,显示最后计时结果。00-51.7156. 在秒表模式下第三次按下按钮,计时停止,结果清零。00-00.0007. 将时

22、钟的初值设定为23时59分40秒,30秒后观察结果。00-00-108. 将秒表的初值设定为59分40秒000毫秒,30秒后观察结果。59-59.999参考文献1 龚尚福.微机原理与接口技术M.西安:西安电子科技大学出版社,20032 王忠民.微型计算机原理M. 西安:西安电子科技大学出版社,20033 沈美明,温冬婵.IBM-PC汇编语言程序设计M.北京:清华大学出版社,20014 郑初华.汇编语言、微机原理及接口技术M. 西安:西安电子科技大学出版社,20035 仇玉章.32位微型计算机原理与接口技术M. 北京:清华大学出版社,20006 王富荣.微机原理与汇编语言实用教程M. 北京:清华

23、大学出版社,20097 白中英.计算机组成原理M. 北京:科学出版社,20008 罗云彬. Windows环境下32位汇编语言程序设计M. 北京:电子工业出版社,2002附 录(源程序)C8255 EQU 203HD8255C EQU 202HC8253 EQU 213HD82530 EQU 210HD82531 EQU 211HD82532 EQU 212HC82590 EQU 220HC82591 EQU 221HC8279 EQU 232HD8279 EQU 230Htime0 EQU 1000time1 EQU 307CODE SEGMENTASSUME CS:CODESTART: J

24、MP Ytimer0 DB 2,0,1,3,5,9timer1 DB 7 DUP(0)pad DB 0tabDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;09Y: ;初始化各芯片MOV AX,8100H MOV DS,AX CLICALL i8279CALL i8259CALL i8253CALL i8255STIbig_lp:MOV DX,202H;读8255 C口IN AL,DXCMP AL,01H;判断是什么模式JE mode1CALL display0;时间模式,显示时间JMP big_lpmode1:CALL display1;秒表模式,显示秒表

25、JMP big_lpi8253: ;210,211,212,213分别为:计数器0/计数器1/计数器2/控制端口;CPU时钟频率为307200HZ;初始化计数器1,先送低八位,后送高八位,工作方式3,二进制计数MOV DX,C8253MOV AL,76HOUT DX,AL;使OUT1产生周期为1ms的方波MOV DX,D82531MOV AX,time1OUT DX,ALMOV AL,AHOUT DX,AL;初始化计数器0,先送低八位,后送高八位,工作方式3,二进制计数MOV DX,C8253MOV AL,36HOUT DX,AL;CLK0接OUT1,OUT0产生周期为1s的方波MOV DX,

26、D82530MOV AX,time0OUT DX,ALMOV AL,AHOUT DX,ALPOP BX POP CX POP DX POP AXRETi8259: ;端口地址为220H和221H;ICW1,上升沿触发,单片,写ICW4 PUSH AX PUSH DX PUSH CX PUSH BXMOV DX,C82590MOV AL,13H;(00010011)OUT DX,AL;ICW2,中断类型号为30H,31H,32HMOV DX,C82591MOV AL,30HOUT DX,AL;ICW4,正常EOI,8086/8088系统MOV AL,01HOUT DX,AL PUSH DS MO

27、V AX,0 MOV DS,AX MOV BX,30H*4MOV AX,OFFSET int_timer0MOV DS:BX,AXMOV AX,CSMOV BX,30H*4+2MOV DS:BX,AXMOV BX,31H*4MOV AX,OFFSET int_timer1MOV DS:BX,AXMOV AX,CSMOV BX,31H*4+2MOV DS:BX,AXMOV BX,32H*4MOV AX,OFFSET int_padMOV DS:BX,AXMOV AX,CSMOV BX,32H*4+2MOV DS:BX,AXPOP DSPOP BX POP CX POP DX POP AXRETi

28、8279: ;数据端口230H,控制端口232H;清除显示和显示寄存器MOV DX,C8279MOV AL,0D2HOUT DX,AL;键盘显示命令,八个字符显示,左端输入方式MOV AL,0OUT DX,ALRETi8255: ;200,201,202,203分别为:A口/B口/C口/控制端口;只用到PC0,输入MOV DX,C8255MOV AL,9BHOUT DX,ALRETint_timer0 PROC;1秒产生一次中断,每次中断时间加1秒 PUSH AX PUSH DX PUSH CX PUSH BX PUSH DILEA DI,timer0MOV BL,BYTE PTRDI+5CM

29、P BL,9JE c0;有进位INC BL;1s位加1MOV BYTE PTRDI+5,BLJMP addend0 c0: MOV BYTE PTRDI+5,0MOV BL,BYTE PTRDI+4;处理下一位CMP BL,5JE c1;有进位INC BL;10s位加1MOV BYTE PTRDI+4,BLJMP addend0 c1: MOV BYTE PTRDI+4,0MOV BL,BYTE PTRDI+3;处理下一位CMP BL,9JE c2;有进位INC BL;1min位加1MOV BYTE PTRDI+3,BLJMP addend0 c2: MOV BYTE PTRDI+3,0MOV

30、 BL,BYTE PTRDI+2;处理下一位CMP BL,5JE c3;有进位INC BL;10min位加1MOV BYTE PTRDI+2,BLJMP addend0 c3: MOV BYTE PTRDI+2,0MOV BL,BYTE PTRDI+1MOV BH,BYTE PTRDI;CMP BH,2JNE c4CMP BL,3JE c5;23h的情况INC BL;21h位加1MOV BYTE PTRDI+1,BLJMP addend0 c5: MOV BYTE PTRDI,0;新的一天MOV BYTE PTRDI+1,0JMP addend0 c4:CMP BL,9JE c6;有进位INC

31、 BL;01h位加1MOV BYTE PTRDI+1,BLJMP addend0 c6: INC BHMOV BYTE PTRDI,BH;10h位加1JMP addend0addend0:MOV AL,20HMOV DX,C82590OUT DX,ALPOP DIPOP BX POP CX POP DX POP AXIRETint_timer0 ENDPdisplay0:;显示时间PUSH DILEA BX,tabMOV AL,90H MOV DX,232H OUT DX,ALMOV DX,D8279LEA DI,timer0MOV AL,BYTE PTRDI+5XLATOUT DX,ALMO

32、V AL,BYTE PTRDI+4XLATOUT DX,ALMOV AL,40HOUT DX,ALMOV AL,BYTE PTRDI+3XLATOUT DX,ALMOV AL,BYTE PTRDI+2XLATOUT DX,ALMOV AL,40HOUT DX,ALMOV AL,BYTE PTRDI+1XLATOUT DX,ALMOV AL,BYTE PTRDIXLATOUT DX,ALPOP DIRETint_timer1 PROC PUSH AX PUSH DX PUSH CX PUSH BX PUSH DI MOV BL,pad CMP BL,0;复位 JE t0 CMP BL,1;第一次

33、按键 JE t1;第二次按键MOV AL,20HMOV DX,C82590OUT DX,ALPOP DIPOP BX POP CX POP DX POP AXIRET t0:;初始状态或第三次按键,秒表归零LEA DI,timer1 MOV BYTE PTRDI,0MOV BYTE PTRDI+1,0MOV BYTE PTRDI+2,0MOV BYTE PTRDI+3,0MOV BYTE PTRDI+4,0MOV BYTE PTRDI+5,0MOV BYTE PTRDI+6,0MOV AL,20HMOV DX,C82590OUT DX,ALPOP DIPOP BX POP CX POP DX

34、POP AXIRET t1:;第一次按键,开始计时或增加1毫秒LEA DI,timer1MOV BL,BYTE PTRDI+6CMP BL,9JE r0;有进位INC BL;0.001s位加1MOV BYTE PTRDI+6,BLJMP addend r0:MOV BYTE PTRDI+6,0;上一位清零MOV BL,BYTE PTRDI+5;处理下一位CMP BL,9JE r1;有进位INC BL;0.01s位加1MOV BYTE PTRDI+5,BLJMP addend r1:MOV BYTE PTRDI+5,0MOV BL,BYTE PTRDI+4;处理下一位CMP BL,9JE r2;

35、有进位INC BL;0.1s位加1MOV BYTE PTRDI+4,BLJMP addend r2: MOV BYTE PTRDI+4,0MOV BL,BYTE PTRDI+3;处理下一位CMP BL,9JE r3;有进位INC BL;1s位加1MOV BYTE PTRDI+3,BLJMP addend r3: MOV BYTE PTRDI+3,0MOV BL,BYTE PTRDI+2;处理下一位CMP BL,5JE r4;有进位INC BL;10s位加1MOV BYTE PTRDI+2,BLJMP addend r4: MOV BYTE PTRDI+2,0MOV BL,BYTE PTRDI+

36、1;处理下一位CMP BL,9JE r5;有进位INC BL;1min位加1MOV BYTE PTRDI+1,BLJMP addend r5: MOV BYTE PTRDI+1,0MOV BL,BYTE PTRDI;处理下一位CMP BL,5JE addend;有进位,但已经超出了可表示的范围INC BL;1min位加1MOV BYTE PTRDI,BLaddend:MOV AL,20HMOV DX,C82590OUT DX,ALPOP DIPOP BX POP CX POP DX POP AXIRETint_timer1ENDPdisplay1:;显示秒表PUSH DILEA BX,tabM

37、OV AL,90H MOV DX,232H OUT DX,ALMOV DX,D8279LEA DI,timer1MOV AL,BYTE PTRDI+6XLATOUT DX,ALMOV AL,BYTE PTRDI+5XLATOUT DX,ALMOV AL,BYTE PTRDI+4XLATOUT DX,ALMOV AL,BYTE PTRDI+3XLATOR AL,80H;添加小数点OUT DX,ALMOV AL,BYTE PTRDI+2XLATOUT DX,ALMOV AL,40HOUT DX,ALMOV AL,BYTE PTRDI+1XLATOUT DX,ALMOV AL,BYTE PTRDIX

38、LATOUT DX,ALPOP DIRETint_pad:;有键按下,pad加1,若是第三下按键,则归零 PUSH AX PUSH DX PUSH CX PUSH BXMOV BL,padINC BLCMP BL,3JNE pMOV BL,0 p: MOV pad,BLMOV AL,20HMOV DX,C82590OUT DX,AL POP BX POP CX POP DX POP AXIRETCODE ENDSEND START课程设计总结:在这次课程设计中,我遇到了很多问题,看到了自己的不足。但是经过努力,我克服了困难,最终顺利完成了课程设计任务。首先,我分析了课程设计题目的要求,将要求具

39、体化,选择芯片。然后,又用了较短时间就将程序写出来了。但这还远远不够,因为在上机调试的时候,真正的问题才来了。我把语法错误修改完后,将芯片连接起来,但是运行的结果却是错误的。于是我又回过头检查程序是否有逻辑错误。但是由于程序很大,错误找起来很困难。虽然找到了一些错误,但问题却没有得到解决。因为错误不是因为一个单一的逻辑错误造成的。所以我用了计算机编程常用的“分治法”,将一个大问题细化,化为很多小的、简单的问题。单独调试了所有芯片和模块。从时间显示、脉冲产生、手动中断到自动中断,再到相对完整的时钟模块,最后到功能最复杂的秒表模块。我找出每个模块的错误,在保证每个模块都正确无误后再把它们组合起来。这样,所有问题就都解决了。虽然这次课程设计中,我使用的芯片都是学过并做过实验的芯片,但是我仍然遇到这么多问题。虽然程序很快就写出来了,但是调试却用了很长时间。机器运行的结果总是与预想的有区别。这些都说明了我的的动手实践能力还需要提高,并且还要不断积累经验,避免犯同样的错误。 最后,还要感谢老师的指点,让我少走弯路,顺利完成课程设计。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号