《微机接口课程设计可任意启动停止的电子秒表设计.doc》由会员分享,可在线阅读,更多相关《微机接口课程设计可任意启动停止的电子秒表设计.doc(32页珍藏版)》请在三一办公上搜索。
1、徐州工程学院微机原理与接口技术课程设计(报告)可任意启动/停止的电子秒表设计题 目 _王 义指导教师_施军 唐亚军 潘春飞学生姓名_ _20090501169 、71 、73 学生学号_ 学生成绩 09软件1计算机科学与技术信电_院(部)_专业_班 1862012_年 _月 _日- _6_月 _29_日目录1 设计任务与要求11.1设计任务11.2设计要求12系统分析23设计方案33.1 设计任务分析33.2 设计方案论证33.3硬件系统总体方案设计43.4软件系统总体方案设计44硬件电路设计54.1 功能硬件设计54.1.1定时器/计数器825354.1.2 用可编程并行接口芯片8255的P
2、A口以及PB口实现数码管输出,PC口实现按键实现数据显示输出84.1.3锁存器27384.1.4 数据收发器24594.1.5译码器74ls154104.1.6数码管104.2 总电路设计115软件设计135.1 主程序设计135.2 中断程序设计146系统调试19设计总结211 本系统存在的问题及改进措施212 心得体会21参考资料23附录:24附录261 设计任务与要求1.1设计任务设计并制作符合要求的电子秒表。秒表由6位7段LED显示器显示,其中2位显示“min”,4位显示“s”,其中显示分辨率位“0.01S”。具有清零、启动计数、暂停计时及继续计时等控制功能。1.2设计要求同组同学要发
3、扬团队协作精神,积极主动的提出问题、解决问题、讨论问题,互相帮助和启发。在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。在老师的指导下制定好自己各环节的详细设计进程计划,按给定的时间计划保质保量的完成个阶段的设计任务。设计中可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。2系统分析本设计采用了汇编语言编写,汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而
4、且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。汇编语言的特点:(1).面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。(2).保持了机器语言的优点,具有直接和简捷的特点。(3).可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。(4).目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。(5).经常与高级语言配合使用,应用十分广泛。在程序设计过程中,为了有效地完成任务,把所要完成的任务精心的分割成若干个相互独立但相互又仍可有联系的任务模块,这些任务模块使得任务变得相对
5、单纯,对外的数据交换相对简单,容易编写,容易检测,容易阅读和维护。这种程序设计思想称为模块化程序设计思想。模块化结构程序的设计,可以使系统软件便于调试与优化,也使其他人更好地理解和阅读系统的程序设计。程序的主要模块有:主程序、显示程序、定时溢出中断服务程序、外部中断服务程序。3设计方案3.1 设计任务分析可任意启动/停止的电子秒表的实现用按键中断来控制整个程序,当按一下KEY1启动电子秒表,再按一下暂停,按一下KEY2键清零,用六个七段数码管显示时间。整个程序涉及到8255、8253和8259三个芯片。给8253的CLK0提供一个频率为10KHZ的时钟信号, 8253的OUT0连接8259的I
6、RQ7,8253的GATE2连接正5伏电压,采用计数器0每隔0.01秒产生一次中断并且计数,写入以偏移地址4000H开始的6个内存单元,然后利用8255将内存单元的数据输出到七段数码管。由于按键中断优先于8259的7号中断,所以程序只有在按一下KEY1才启动电子秒表,再按一下暂停,按一下KEY2键清零,如果超出了60分,整个程序自动重新开始。3.2 设计方案论证根据课程设计的要求和我们所要增加的功能写好程序流程图,在程序流程图的基础上,结合芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求实现的功能的目的。在微机原理定汇编调试软件上编辑源程序,并进行汇编,在汇编成功
7、无误后,选择端口进行调试,然后装入程序,至此,本次设计的软件工作准备完毕。再根据硬件原理设计图完成各芯片之间的连接,打开实验箱电源开关总体进行调试。在整个实验过程中,在8253可编程定时器CLK端输出管脚处接上一个计数的频率为10KHZ的时钟信号,由8253定时/计数器产生0.01秒的中断并进行计数,可编程并行I/O接口芯片8255A将偏移地址写入内存单元,进中断更新数据,然后将内存数据送给LED数码管显示。定时器中断就是定义初值,然后开中断,剩下的就在中断里写了。保存数据段后,取中断程序入口地址,定义可编程中断控制器8259中断7中断矢量,读8259中断屏蔽字,开8259中断7,六位数码管用
8、动态显示,挨个点亮,六个I/O控制位,十二个I/O控制段码,将8259的定时器设置在0.01秒进入一次中断,交替输出高低电平(形成时钟频率),在计数器输出使用组合逻辑电路连接LED灯的各个控制输入端。3.3硬件系统总体方案设计电子秒表系统主要完成对计时实时的显示,精度达到1/100s,以及通过功能键可以使当前计时暂停或重新计时。系统主要包括晶振电路、复位电路、按键电路以及数码管显示电路。系统的整体框图如图3-1所示:8253定时/计数器晶振电路数码管显示复位电路按键电路 图3-1 系统整体框图3.4软件系统总体方案设计 系统软件由主程序模块、测温程序模块、键盘扫描程序模块以及LED驱动程序模块
9、组成。软件总体框图如图3-2所示。图3-2 软件总体框图4硬件电路设计4.1 功能硬件设计4.1.1定时器/计数器8253 用系统8253定时器提供的55ms定时单位,设计秒表定时程序。 有关系统定时方法:PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号, 频率:f=1.1931816MHz。 定时器0输出方波的频率:fout=1.1931816/65536=18.2Hz。 输出方波的周期Tout=1/18.2=54.945ms。8253A每隔55ms引起一次中断,作为定时信号。可用55945ms作基本计时单位。 用BIOS调用INT 1AH可以取得该定时单位。例:1
10、秒=18.2 (计时单位) 8253的引脚图及硬件连接图如图4-1和4-2所示。图4-1 8253引脚图 图4-2 硬件连接图当A1A0分别为00 01 10 11时分别选中三个通道和控制字寄存器在8088系统中,8088的A1A0分别与8253的A1A0相连在8086系统中,通常将8253的8位数据线与8086的低8位相连,即使用偶地址,所以8086的A2A1分别与8253的A1A0相连。计数器(0 2)即三个计数器/定时器通道。每个通道包括:8位控制字寄存器、16位计数初值寄存器、减一计数器和输出锁存器。作定时器用:其CLK端上的输入脉冲应是标准的、精确的;作计数器用:对其CLK端上的脉冲
11、计数,脉冲宽度可以不等。采用减一计数器,为0时,从OUT端上输出一个脉冲定时时间 = 时钟脉冲周期X预置的计数初值。 控制功能表CSRDWRA1A0功 能0100 0写计数器00100 1写计数器10101 0写计数器20101 1写控制字寄存器0010 0读计数器00010 1读计数器10011 0读计数器20011 1 无操作1XXX X禁止使用011X X无操作每个通道: CLK计数脉冲或标准脉冲输入端GATE允许端,当GATE=1时允许计数UT计数值为0时输出一个脉冲 由于8253的读/写操作对系统时钟没有特殊的要求,因此它几乎可以应用与由任何一种微处理器组成的系统中,可作为可编程的方
12、波频率发生器、分频器、实时时钟、事件计数器和单脉冲发生器等。8253是一片具有三个独立的16位计数器通道的可编程定时器/计数器芯片。每个通道都可以编程设定3种工作方式之一种;8253由以下几个部分组成:(1) 数据总线缓冲器(8位、三态、双向);(2) 读/写控制逻辑;CS:片选信号,低电平有效; RD:读信号,低电平有效; WR:写信号,低电平有效 A1A0:端口选择信号 (3) 三个通道( 0 2),由A0,A1控制选择; (4) 一个控制寄存器;图4-3内部结构及引脚图 4.1.2 用可编程并行接口芯片8255的PA口以及PB口实现数码管输出,PC口实现按键实现数据显示输出 8255 可
13、编程外围接口芯片是 Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU 和接口之间 的数据传送总是并行的,即可以同时传递8 位、16 位、32 位等。用+5V 单电源供电,能在以下三种方式下工作:方式0-基本输入/出方式、方式1-选通输入/出方式、方式2-双向选通工作方式。8255 工作方式控制字和C口按位置位/ 复位控制字格式如图4-3所示。图4-3 8255工作方式图4.1.3锁存器273 74LS273是8位数据/地址锁存器,他是一种带清除功能的8D触发器,下面介绍一下他的管脚图功能表
14、等资料。(1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;(2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)上.如图4-4。图4-4 74LS273 74ls273管脚功能: 1D8D为数据输入端,1Q8Q为数据输出端,正脉
15、冲触发,低电平清除,常用作8位地址锁存器。 4.1.4 数据收发器245 当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)*DIR=“1”,信号由 A 向 B 传输;(发送)当/CE为高电平时,A、B均为高阻态 4.1.5译码器74ls154 74ls154为416线制译码器其引脚图如下图4-5所示 图4-5译码器其引脚图4.1.6数码管 数码管要正常显示,就要来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 静态显示驱动 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口
16、进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要58=40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。 动态显示驱动 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。图4-6所示。图4-6 数码管接线图4.2 总电路设计系统总电路(原理)图如图4-7所示。图4-7 系统总电路图5
17、软件设计5.1 主程序设计本系统程序主要模块由主程序、定时中断服务程序、外部中断0服务程序和外部中断1服务程序组成。其中主程序是整个程序的主体。可以对各个中断程序进行调用。协调各个子程序之间的联系。系统(上电)复位后,进入主程序,主程序流程图如图5-1。首先对系统进行初始化,包括设置各入口地址、中断的开启、对各个数据缓存区清“0”、赋定时器初值,初始化完毕后,就进入数码管显示程序。数码管显示程序对显示缓存区内的数值进行调用并在数码管上进行动态显示。显示一次就对P1.1和P2.5进行一次扫描,查询复位键P1.1是否按下,当复位键按下后,程序返回开始,重新对系统进行初始化。当没有按下复位键时,程序
18、则扫描P2.5是否按下,当P2.5没有按下则返回显示程,不断地调用显示缓存区的数据进行显示。使用户能清楚的看到当前电子秒表所记录的时间。当查询到P2.5按下后则跳转到另外一段显示程序并调用最红缓存区的数据进行显示,此时显示的时间即为上一次计时的时间。与此同时,在P2.5按下后执行显示程序的同时也在对P2.5进行扫描,当P2.5断开后立即跳转回之前的显示程序显示当前的计时时间。在主程序中还进行了赋寄存区的初始值、设置定时器初值以及开启外部中断等操作,当定时时间到后就转去执行定时中断程序。当外部中断有请求则去执行外部中断服务程序。并在执行完后返回主程序。图5-1主程序流程图5.2 中断程序设计现在
19、方案中采用了三个中断,外部中断INT0,INT1和定时中断T0。CPU在响应中断时,先处理高级中断,在处理低级中断,若有多个同级中断时,则按自然优先顺序处理。例如当CPU正在处理一个中断申请时,有出现了另一个优先级比它高的中断请求,这是,CPU就暂停终止对当前优先级较低的中断源的服务,转去响应优先级比它高的中断请求,并为其服务。待服务结束,再继续执行原来较低级的中断服务程序。而当CPU为级别高的终端服务程序服务时,如果级别低的中断发出中断请求,此时CPU是不会响应的,所以为了避免开始和暂停两个按键中的一个出现没有响应的情况,在进行程序编辑时要注意对中断的使用,避免出现中断的嵌套,合理分配中断对
20、本设计的实现是至关重要的。另外由于数字式电子秒表的最小精度位1ms,属于高精度电子秒表。定时器T0的定时周期也为1ms,为了使电子秒表暂停键按下后CPU能马上去响应中断程序,必须将暂停的外部中断级别高于定时计数器的中断级别。避免出现CPU执行完定时溢出中断程序后再响应外部中断程序,影响计时精度。数字式秒表中的两个按键采用了中断实现功能。开始采用外部中断INT0,暂停采用外部中断INT1。另外程序中还用到了定时/计数器0溢出中断进行计时。依据设计要求,暂停的外部中断INT1中断级别最高,计时的定时/计数器0溢出中断次之,开始的外部中断INT0级别最低。(1)外部中断0服务程序:外部中断0服务程序
21、结合外部P3.2停止键实现数字电子秒表的停止功能,具体流程图如图5-2。当按下P3.2停止键按下向CPU发出外部中断请求,CPU转向外部中断0服务程序执行,停止定时器。另外将当前显示的时间进行一次存储,存进中间寄存区。最后中断返回。图5-2 外部中断0服务程序流程图(2)外部中断1服务程序:外部中断1服务程序结合外部P3.3停止键实现数字电子秒表的启动功能,具体流程图如图5-3。当按下P3.3启动键按下向CPU发出外部中断请求,CPU转向外部中断1服务程序执行,启动定时器。另外进行二次存储,将之前进行一次存储的数码管显示数据存入最终缓存区,避免下次计时暂停时一次存储将数据掩盖,从而起到保护数据
22、的作用。二次存储后就中断返回。图5-3 外部中断1服务程序流程图(3)定时中断服务程序当定时/计数器T0器溢出后,向CPU发出中断请求信号。CPU跳转到定时中断程序执行,具体流程如图5-4。定时中断程序是一个进位程序,主要负责对1ms的加一。1ms位没有满十就跳出中断程序,返回显示程序。当1ms位满十后就对1ms位清零,向10ms位加一,同时检测10ms位是否满十,没有满十就跳出中断程序,返回显示程序。如果满十就向100ms位加一,依次类推,最终达到99.99秒后归零,从零开始再次计时。定时/计数器T0工作在方式0下,TH0和TL0组成一个13位的二进制数计数器。单片机开机或复位时,它的值为0
23、0H,当T0启动后,从第一个输入脉冲开始计时,每来一个脉冲计数加一,即从0000000000000开始计数到1111111111111,再计数一个脉冲时TH0和TL0组成的13位计数器将会从13个1变成13个0,并产生溢出,溢出位将被送到TF0标志位,通过溢出标志产生溢出中断请求。显然,T0定时器在方式0下引起一次中断所允许计数的最多脉冲个数为213 个。但如果定时计数器如果每次都固定从0开始计数,到计满后,再向CPU发出溢出中断请求信号那是毫无意义的。为了使定时计数器在规定的计数脉冲个数字之后(此时应小于213 个脉冲),向CPU发出溢出中断请求,可采取预先向TH0和TL0中放入一个初值X的
24、方法,使计数器以X值为起始值开始计数,即X+1,X+2,直至计数器计满,从1全变为0。设需要计数的脉冲个数为Y,则有:X+Y=213 在定时方式下:定时时间间隔位t=(213X)*振荡周期*12现在本设计要求1ms实现一次中断,选择定时器T0工作在方式0。所以需要根据以上条件计算出T0的初值。设T0的初值为X,则 (213X)*12/12*106 =1*10-3 转换位十六进制数X=7192=1110000011000B即TH0=0E0H(取X的高8位)TL0=18H(取X的低5位)由于定时1ms只是一个理想化的时间,其中并没有考虑到中断后单片机执行语句所花的时间。虽然执行语句所花的时间很短只
25、有即微秒,但积少成多,数字秒表一秒中要溢出中断1000次,积累起来误差就能达到毫秒级,这对于精度到达毫秒级的数字电子秒表来说是很大的误差。所以要在后期编程时还要将单片机读程序的时间考虑进去,在对定时器赋初值时将单片机需要执行的语句所花的时间加上,这样就能使数字电子秒表的误差达到最小。图5-4 定时中断服务程序6系统调试程序在Keil uVision4环境下编写,编译通过后生成.hex文件加载到Protuse下可正常运行。程序刚运行前数码管显示初值为0000.00,接通电源后系统开始计时,程序中每0.01s进入一次定时中断,故精度可达到0.01s。在程序运行过程中若按下一次功能键,则系统暂停计时
26、,数码管显示计时截至状态;若再次按下功能键,系统自动清零并重新开始计时,如此重复进行下去。按下暂停键实现暂停功能,图6-1,图6-2.图6-1继续计数后按下清零键实现清零功能图6-2 系统调试状态图设计总结1 本系统存在的问题及改进措施本系统所设计的秒表计时器基本实现了所要求的功能,但经过后期的实验发现,其实本系统的精度还不是特别精确,做过对比后得知,当该系统运行大概450秒时,与标准时间相比相差一秒,这对计时时间所要求高精度还需要进一步矫正。依据个人观点,实现高精度的计时,仅通过单片机内部定时并不能到达要求,因为系统每次进入中断处理函数都会多少消耗些没经预算的时间,长时间积累之后误差就会变明
27、显。希望以后能改正这些误差,是通过外加定时器还是修改参数是在以后的学习中要注意的。2 心得体会 为期两周的课程设计终于结束了,通过这次学习让我明白要将书本上学到的知识应用于实践中,学会使用Proteus仿真软件,虽然在学习过程中遇到了许多困难,但是解决这些困难后也使我有了很大的提高。这次课程设计不仅增强了我在电子设计方面的经验,鼓舞了自己,更是一次兴趣的培养。通过两个星期的学习,使我对微机的理论有了更深的了解,培养了我学以致用的能力,提高了我分析问题和解决问题的能力,增强了与同学合作的能力。在设计实践的过程中,我深深的体会到必须要有扎实的知识基础,熟练地掌握课本上的知识,才能对试验中出现的问题
28、进行分析解决。在整个电路的设计过程中,主要的是利用Proteus 软件仿真,因为以前没有学过这个软件,所以我们要从头学起。我们在各个单元电路的连接上花费了大量时间。设计时曾做出了两套方案以及仿真电路,我们仔细比较分析其原理以及可行的原因,这才确定了我们的电路。实验过程中,我深刻的体会到在设计过程中,要考虑到各个元器件的功能和特性,要翻阅大量资料,参考别人的经验,只有这样才能把自己的电路设计的成功。通过这次对秒表的设计与制作,让我了解了设计电路的程序,也让我了解了关于秒表的原理与设计理念。在此次的秒表设计过程中,我更进一步地熟悉了芯片的结构、管脚图、功能表及掌握了各芯片的工作原理和其具体的使用方
29、法。熟悉常用电子器件的类别、型号、规格、性能及其使用范围,能查找资料,查阅有关的电子器件图书等。而且这些知识是对我们大学生来说十分宝贵的实践经验,是无法在课堂上获得的,是现今社会最重视的同时也是我们最需要提高的部分。总体来说,通过这次课程设计学习让我受益匪浅,培养了我的思维设计,增强了我的合作能力能力,最重要的是让我明白了自学的重要性,掌握了更多自学的方法。这次课程设计的成功,我越发感觉电子设计不是死板的东西,是有很大科学性与艺术性的。不同芯片的使用,不同的接线方法,不同的变量,不同的实现思路,经过组合后几乎可以称之为艺术。这次课程设计使我对各种电路都有了大概的了解,也学会了常用仿真软件的使用
30、,在平时的理论学习中遇到的问题都一一解决,加深了我对专业的了解,培养了我对学习的兴趣,为以后的学习打下了好的开端,我受益匪浅。 参考资料1 刘红玲主编 微机原理与接口技术 北京:中国电力出版社,20072 顾晖等。微机原理与接口技术-基于8086和Proteus仿真M电子工业出版社陈继红等. 微机原理及应用M高等教育出版社,20103戴梅萼等.微型计算机技术及应用M清华大学4沈美明等.IBM-PC汇编语言程序设计M 清华大学出版社5彭虎等. 微机原理与接口技术(第2版) M电子工业出版社,20086 张弥左,王兆月,邢立军等.微型计算机接口技术.北京:机械工业出版社附录: 图4-2 硬件连接图
31、 图4-6 译码器其引脚图图4-8 系统总电路图附录 主程序: PUSH DS ;保存数据段 MOV AX,0000H MOV DS,AX ;数据段清零 MOV AX,OFFSET IRQ7 ;取中断程序入口地址 ADD AX,2000H ;加装时IP2000地址MOV SI,003C ;填8259中断7中断矢量MOV WSI,AX ;填偏移量矢量MOV AX,0000H ;段地址CS0000HMOC SI,003EHMOV WSI,AX ;填段地址矢量POP DS ;弹栈IN AL,21H ;读8259中断屏蔽字AND AL,7FH ;开8259中断7OUT 21H,ALMOV AL,39H
32、 ;8253的计数器0为方式2,采用BCD码计数,先写低8位,后写高8位。方式控制字为00110101OUT 43H,AL ;写入方式控制字到控制字寄存器MOV AL,00H ;计数初值低8位OUT 42H,AL ;写入计数初值低8位到通道0MOV AL,10H ;计数初值高8位OUT 42H,AL ;写入计数初值高8位到通道0MOV AL,81H ;8255的A口位方式0输出,B口为方式0输出,C口下部输入1000 0001OUT 63H,AL ;写方式控制字CALL FIRST ;调用first子程序,赋计数初值BEGI: HLT ; 延时等待STI ;开中断MOV AH,01HINT 1
33、6H ;检测是否按了键JZ BEJIMOV AH,00H ;读键值INT 16HCMP AL,0DH ;是否按了KEY2JNZ A1MOV SI,4000H NOT SI+04H ;偏移地址为4004H的内存单元内容取反JMP BEGIA1:CMP AL,1BH ;是否按了KEY1键JNZ A2CALL FIRST ;重新赋初值,相当于清零A2: JMP BEGI中断程序:IRQ7:CAKK DIS ;调用DISP子程序,用来在数码管显示数据MOV SI 4000HCMP SI+04H,00H ;判断是否按了第2次回车键JE A4CALL ADDN ;调用ADDN子程序,用来计数A4:MOV
34、AL,20HOUT 20H,ALCLI ;关中断IRET ;返回ADDN程序:ADDN:MOV SI,4000HADD SI+05H,01H ;百分之一秒加1CMP SI+05H,0AH ;判断是否大于10JZ A5JMP A11A5:MOV SI+05H,00HADD SI+04H,01H ;十分之一秒加1CMP SI+04H,0AH ;判断是否大于10JZ A6JMP A11A6:MOV SI+04H,00HADD SI+03H,01H ;秒位加1CMP SI+03H,0AH ;判断是否大于10JZ A7JMP A11A7:MOV SI+03H,00HADD SI,01H ;十秒位加1A8
35、:MOV SI+02H,00HADD SI+01H,01H ;分位加1CMP SI+01H,0AH ;判断是否大于10JZ A7JMP A9A9:MOV SI+01H,00HADD SI,01H ;十分位加1CMP SI,06H ;判断是否大于6JZ A8JMP A9A10:MOV SI,00 ;大于60:00重新开始A11: RET显示程序:DSP: PUSH AX;保存AXMOV SI,4000H;指向数据缓冲区MOV DL,F7H;1111 0111 指向数码管MOV AL,DL ;AL=1111 0111AGAIN:OUT 60H,AL;写端口AMOV AL,SIMOV BX,4100
36、H ;指向数码缓冲区 BX=0100 0001 0000 0000AND AX,00FFH ; BX=0000 0000 alADD BX,AX;得到显示代码 BX=0100 0001 alMOV AL,BX OUT 61H,AL ;写端口BCALL DELAY:调用延时程序DELAYINC SIMOV AL,DL TEST AL,01HJZ OUT ROR AL,1;指向下一个数码管MOV DL,ALJMP AGAINOUT: POP AX;弹出AXRETLEDMAP: ;数码管显示代码:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH.07H,7FH,6FHDELAY: PUSH CX;延时程序 PUSH AX MOV CX,0010HT1:MOV AX, 0010HT2 :DEC AXJNZ T2 LOOP T1POP AXPOP CX RET