微机原理与接口技术电子表设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
…
微机原理与接口技术
课程设计报告
、
设计名称:电子表设计
专业:计算机原理与接口技术
班级:
姓名:
学号:
指导教师:
|
2014年 11 月 27 日
目录
摘要 (2)
一、设计目的及要求 (3)
设计任务 (3)
设计功能 (3)
课程设计方式及基本要求 (3)
实验方式 (3)
*
基本要求 (3)
设计所用元件 (4)
二、设计题目及思想 (4)
设计原理 (4)
主要模块 (5)
芯片初始化 (7)
程序流程图 (9)
硬件接线图 (11)
|
三、调试结果 (13)
四、课程设计总结 (16)
遇到问题及解决方案 (16)
课程设计心得体会 (16)
参考文献
附录
`
摘要
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间的要求很高的场合,汇编语言的应用是必不可少的。
至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可了。
随着科学技术迅速发展,理工科大学生不仅需要掌握计算机方面的基本理论知识,而且还需要掌握基本的实验技能及一定的科学研究能力。
通过课程设计,使学生巩固和加深微型计算机原理理论知识,通过实践进一步加强学生独立分析问题和解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事求是、严肃认真的科学作风和良好的实验习惯,为今后工作打下良好的基础。
鉴于汇编语言的广泛用途及其在当代计算机界的重要作用,本人利用学的知识,在同学门的帮助下,花费大量时间,完成了关于电子表的系统设计。
这个系统是应用于电脑中的小应用程序,可是显示电脑中的时间。
很多地方都会有个时钟显示,其中大多是应用了类似这样的方法。
关键词:汇编语言微机原理接口技术时钟显示
一、设计目的及要求
1.1设计任务:
随着科学技术迅速发展,理工科大学生不仅需要掌握计算机方面的基本理论知识,而且还需要掌握基本的实验技能及一定的科学研究能力。
通过课程设计,使学生巩固和加深微型计算机原理理论知识,通过实践进一步加强学生独立分析问题和解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事求是、严肃认真的科学作风和良好的实验习惯,为今后工作打下良好的基础。
计算机原理与接口课程课程设计结合教学内容,从应用的角度出发,进行三类课程设计,分别分为:汇编语言程序设计、微机标准接口课程设计和接口技术课程设计。
(1)通过设计电子表,掌握中断的使用方法。
(2)掌握基本的显存读写技术。
(3)学会在屏幕上以七段数码管的形式显示本机时间的方法。
(4)学会用汇编语言编写一个完整的程序,提高自己的动手操作能力。
(5)学习程序设计的基本思路和方法,培养分析问题、解决问题的能力。
1.2"
1.3设计功能:
1.电子表,具有时、分、秒24小时制的运行,并可以在8位数码管上显示。
2电子表具有启动键、停止键、初始化、蜂鸣、按点报时、暂停跳转CSU--CSU。
课程设计方式与基本要求
实验方式:
微机原理与接口技术课程设计共2周,要求学生做出设计方案(硬件线路图、程序框图)并提交指导教师检查确认。
然后进行硬件连接、软件调试、得出结果,由指导教师检查是否达到设计要求,最后撰写报告。
根据通信工程专业学生的实际情况,课程设计的指导思想是:对于学习成绩好、动手能力强的学生,让他们有充分发挥的余地;对于大多数学生务必完成设计要求;对于少数学习稍差的学生只需完成基本要求。
基于这一原则给出了3~5个题目,每一个题目的大小、难易可以伸缩,由学生自选。
!
基本要求:
电子表以时、分、秒的形式实时显示当前时间。
掌握 8255、8259、8253 芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中
采用 8088 微处理器完成了电子钟的小系统的独立设计。
同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
1.熟练掌握汇编语言的程序设计;
2.熟练掌握各种编程接口芯片的编程应用
3. 通过实验方法掌握各种电路综合分析与设计方法。
设计所用元件
设备是武汉恒科电子教学仪器有限公司的超想—3000TB综合实验/仿真系统。
配合PC机构成实验环境。
…
8253 定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送 IRQ2。
8279 接口芯片:实现键盘输入和显示输出。
8259 中断控制器:用于产生中断。
8255 并行控制器:触发LED灯闪烁和蜂鸣器扬声。
数码管:六个 LED 用于显示时:分:秒值。
发光二极管:闪烁报时。
蜂鸣器:扬声报时。
)
二、设计题目及思想
设计原理:
计算机原理与接口技术是通信工程专业的一门专业基础课程,学生需要掌握RAM扩充、8253计数器/定时器、8255并行口、8251串行口、8259中断控制器、D/A数模转换、A/D模数转换、DMA、LED显示等各个器件的性能和使用方法。
课程设计的目地是综合这些基础知识,就具体问题让学生做出软、硬件解决方案并付诸实施,以培养解决实际问题的能力。
本程序的主要设计原理是用主程序完成键盘按键的扫描,实现计时结果的数码管显示,实现秒与分之间的转换。
通过判断键盘按键调用相应功能程序段以实现相应功能,即实现了启动、暂停、复位功能,以及通过键盘进行十分、分、十秒、秒时间的手动设置功能。
利用8253的定时器功能。
8253的四个端口地址为48H,49H,4AH,4BH,本实验采用8253的通道2,工作在方式3(方波发生器方式)输入CLK2为1MHZ。
先给8253的初始值0C350H,循环记数。
即一次记数完后,自动装入初始值。
输出OUT2作为8259的输入脉冲。
8259有两个口地址,本实验为20H和21H,其中20H用来写ICW1,21H用来写ICW2、ICW4,本实验中8259为单片,边沿触发,采用3号中断源,即IR3和8253输出口OUT2相连,每过1/20秒接收到一个中断,向8259发出中断请求信号,如果电平信号不符合要求,则自动转到7号中断,显示"ERR",CPU响应后,在中断处理程序中,
对中断次数进行记数,记满20次,把时间缓冲区中的时间加1,并将其输入到显示缓冲区,以便显示器显示更新后的时间。
计数初值的计算:1/1000000*X=1/20 X=50000D=0C350H(用1MHZ信号产生1/20秒方波)。
、
主要模块
系统各个模块设计
1、系统总体设计
本系统设计的电子钟以 8088 微处理器作为 CPU, 8253 做定时计数器产生时用钟频率,8279 做可编程并行接口显示时钟和键盘电路,8259 做中断控制器产生中断。
在此系统中,8253 的功能是定时,接入 8253 的CLK 信号为周期性时钟信号。
8253 采用计数器 0,工作于方式 2,使 8253 的 OUT0 端输出周期性的负脉冲信号。
即每隔 20ms, 8253 的 OUT0 端就会输出一个负脉冲的信号,此信号接 8259 的 IR2,当中断到 50 次数后,CPU 即处理,使液晶显示器上的时间发生变化。
8255接受CS片选信号,计时到点数产生输出。
程序由以下模块组成:系统共有 5 个功能模块,分别为,主控模块,显示模块,定时模块,并行接口模块,中断模块。
2、主控模块
主控模块是系的核心模块,对 8253、8279 进行初始化,设置中断向量,扫描键盘根据按键值作相应的处理。
主要由软件实现。
它的主要功能是调用其它模块对系统工作进行协调,它的主要功能是读小键盘输入键值并执行要做的工作,如果键值为 C 则将显示初始值 00:00:00 置入显示缓冲,并调用显示模块显示。
如果键值为 G 则开中断,(中断程序为秒最低位加一)。
如果键值为 D 则关中断,停止动态显示。
如健值为 P 则连续六次调用小键盘模块,将键值依次存入显示缓冲。
并调用显示模块显示。
如果健值为 E,则终止程序,
返回 DOS。
}
3. 定时模块
定时模块是为 8259 提供中断请求信号的。
由一片 8253 实现,选用定时器0#,工作在方式 3,由于时钟应该 1 秒走动一次,所以输出值应为 1S,其输出信号可作为 8259 的中断请求信号。
4. 中断处理模块
中断模块实现动态显示的,硬件为一片 8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果。
5 . 并行模块
并行模块是8255是数据在多根传输线上一次以8位为单位进行传输。
8255由数据总线缓冲器,读/写控制逻辑、A组和B 组控制电路以及3个数据端口(A 口、B 口和C口)等组成。
:
6. 显示模块
显示模块是将显示缓冲区的数值送到 LED 显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位。
硬件上由六个 LED 构成,软件上由扫描显示的方法实现。
芯片初始化
定时/计数
8253 A既可作定时器又可作计数器:
(1) 计数:计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK 脉冲对计数值进行减1 计数,每来一个脉冲减1,当计数值减至0时,由OUT 端输出一个标志信号。
(2) 定时:计数器装入初值后,当GATE为高电平时,由CLK 脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。
除上述典型应用外,8253A还可作频率发生器、分频器、实时钟、单脉冲发生器等。
8253A控制字
@
单级中断控制
8259A编程及初始化
写初始化命令字
写初始化命令字ICW1(A0=0),以确定中断请求信号类型,清除中断屏蔽寄存器,中断优先级排队和确定系统用单片还是多片。
@
中断优先级排队和确定系统用单片还是多片。
"
3. 8279显示接口
8279A的控制命令
(1) 键盘显示器方式设置命令
* RESET后,设定为该种方式。
(2) 扫描频率控制命令
\
并行
8255A控制字
(1) 方式选择控制字
:
:
PC3~0:1=输入, 0=输出
PB口: 1=输入,0=输出 B组
方式选择:0=方式0,1=方式1
PC7~4:1=输入, 0=输出
PA口:1=输入,0=输出
01×=方式2
7 6;
5
4 3 2 1 0
程序流程图1.主程序流程图
~
$
¥
【
!
方式标志:1=有效
开中断
关中断
中断次数+1
把DATAPORT存放的数码管对应的状
态显示到数码管
是否IRQ3
中断次数20
是否=59秒
开中断,读中断
秒数+1
~
…
2.电子表处理程序
)
(。
数码管状态数据库初始化
8279初始化
8253初始化
放初始值0C350H
`
分=00
时=00
是否=59分
"
是否=24时
分数+1
时数+1
在DATA2中,通过将DATA2起始地址加上当位数码
管数字,找到对应的地址,取出对应的值放到
0520~0527H地址中
(
硬件接线图
实验线路连接
芯片的CLK2引出插孔连分频输出插孔T1(1MHZ)。
2. 8259A的IRQ3插孔和8253A的OUT2插孔相连。
3.将8279接口模块上的插座DU(JB51)(a-h)用8芯线连接至数码管模块插座DU (a-h),8279接口模块上插座BIT(JB53)连接至数码管模块插座BIT。
4. 8255 的片选CS插孔和8253A的Y2插孔相连,PC0-7和发光二极管相连,PC0和蜂鸣器相连。
|
5. 1MHz和开关K1 相连,开关K2 和8259A 的IR7相连。
三、调试结果
打开汇编软件DVCC实验系统,设置正确的接口并且联机进入程序汇编界面。
按照电子表设计的硬件把线路一一连接正确。
8253计数器接线情况
8255并行接口接线情况
)
8259单级中断接线情况
数码管位选与段选接线情况
~
K开关接线情况
按照正确接线之后,再把程序通过DVCC汇编写进去,编译再次链接,然后调试无误,点击运行。
数码管会显示初始时间00-59-40,8个发光二极管保持常亮,然后时间开始往下运行,到01-00-00时,发光二极管同时闪烁并且蜂鸣器扬声,该状态持续一分钟后自动停止;此外,拨动K 开关,会调出CSU—CSU,并且时间暂停,重新拨回去,则继续运行时间。
程序正确无误,实验效果良好,需要多次在不同的机子尝试。
四、课程设计总结
遇到问题及解决方案
在设计中遇到不少的难题:
!
在一开始按照指导书接线后没有得到相应的效果让我十分的疑惑,也认真检查了硬件的接线线路,后来得知是不一定每一个的仪器都能顺利与主机链接上,后来经过多次的多部机子调试后得到能成功运行代码的平台。
在改进设计方案中,考虑过加入数字键盘进行时间校对,但从仪器的内部接线方法上我暂时得不到可行的计划,或许键盘确实能实现时间的校对;此外,我发现8279有RESET的功能,不过从电路原理图上找不到接线,没法简单得实现时间重置。
为了解决时间暂停,我想到简单的硬件操作,就是直接给脉冲接上低电平,使8253A的计数功能无法继续进行,当脉冲接回高电平则继续计数。
当数码管暂停后,为了让效果更好,我加入了IRQ7中断,本来该中断是触发错误电平,数码管显示Err,然后我把中断屏蔽取消,并且给DATA1本是存储IRQ7的缓存数据改为新的代码,让其显示CSU—CSU。
>
在整点报时上,融入了8255,8255由DATA8的数值决定跳转哪种状态,当分钟大于等于1分钟,则是二极管常亮,当分钟小于等于0分钟,则是二极管闪烁和蜂鸣器扬声。
课程设计心得体会
在设计刚开始时,我们只是知道要用8253A完成计数,用8259与数码管单元完成显示功能,但是具体怎么实现的还不是很清楚。
在接下来的一小段时间里,我们觉得无从下手,但通过自己耐心搜集资料,向老师和同学请教,慢慢理出了头绪,也有了自己的设计思想和设计框架,并有了一定的实现方法。
对于设计题目来说,并非那么得复杂,但要设计者将所学转换成相应的实际应用却并非一件容易的事情。
本设计题目的设计思想是简单的,只需要使用8255A完成计数,用8259与8279A数码管单元完成显示功能,并通过自己的理解附加一些功能片段来完成电子表的人性化功能设计,如电子表的校准、电子表的开始、停止、清零等功能。
在课程设计过程中,我深刻地体会到:《微机原理与接口技术》这门课程对于我们的要求不仅限于对书本知识的理解,更重要的是对书本知识的运用。
除此之外,我们应该在学习过程中充分发挥自己的想象力和创新意识,将对书本知识的理解与我们的创新意识相结合,设计出实用且功能良好的实物。
通过本次课程
设计,也提高了我们的编程能力、协作能力和创新能力,为以后的学习打下了良好的基础。
参考文献
)
[1]梁健武,《微机原理与接口技术》中国水利水电出版社
[2] 宋杰汪志宏江敏,《微机原理与接口技术课程设计》机械工业出版社
[3]范会敏李晋惠,《微型计算机原理及接口技术应用》科学出版社
附录:电子表软件代码
CODE SEGMENT
ASSUME CS:CODE //指定代码段为CS
:
INTPORT1 EQU 0020H //8259端口地址,EQU符号常量INTPORT2 EQU 0021H //把地址定义为符号名
INTQ3 EQU INTERUPT3
INTQ7 EQU INTERUPT7
CONTPORT EQU 00DFH //8279端口地址
.
DATAPORT EQU 00DEH
DATA1 EQU 0500H //数据段
DATA2 EQU 0508H
DATA3 EQU 0518H
DATA4 EQU 0520H
DATA5 EQU 0528H
DATA6 EQU 0529H
'
DATA7 EQU 052AH //时
DATA8 EQU 052BH //分
DATA9 EQU 052CH //秒
DATA10 EQU 052EH
IOCONPT EQU 0073H //8255端口,控制寄存器端口地址IOCPT EQU 0072H //C口
IOBPT EQU 0071H //B口
IOAPT EQU 0070H //A口
ORG 1000H //目标程序第一字节的入口地址,1000H为数据段划分区间START: CALL FORMAT //CALL调用子程序
CLD //方向标志位,DF复位,程序往下执行
MOV DX,CONTPORT //8279初始化
(
MOV AL,00H //000为标志位,键盘互锁
OUT DX,AL ;KEYBORD DISPLY MODE
MOV AL,2AH //001为标志位,分频系数是10D OUT DX,AL ;8279 CLOCK
MOV AL,0d0h //110为标志位,清除FIFO状态字OUT DX,AL ;8279 CLEAR
MOV AL,90h //100为标志位,显示RAM,AI自增1 OUT DX,AL ;READ FIFO RAM COMMAND
:
MOV DX,004BH //8255初始化,是16位计数器,片选
MOV AL,0B6H //计数器2方式3先低后高二进制
OUT DX,AL
MOV DX,004AH //计数器2的端口地址
MOV AL,50H
OUT DX,AL
MOV AL,0C3H
:
OUT DX,AL //装载0C350H初值
MOV SI,DATA3 //源操作数放到源变址寄存器 CALL LEDDISP
MOV AX,0H
MOV DS,AX
CALL WRINTVER
$
MOV AL,13H //8253初始化,边沿触发单片用ICW4
MOV DX,INTPORT1 //命令寄存器地址
OUT DX,AL
MOV AL,08H //00001000B选中第3个,11为IRQ3 MOV DX,INTPORT2 //IRQ3,写ICW2
OUT DX,AL
MOV AL,0BH //缓冲主片非自动处理器8086
@
OUT DX,AL //写基本工作方式ICW4
MOV AL,77H //操作命令字OCW1,中断屏蔽
OUT DX,AL //01110111B,0为中断1为屏蔽
MOV AL,80H //8255初始化,写控制字 MOV DX,IOCONPT
OUT DX,AL //A方式0,ABC口为输出 MOV DX,IOCPT //C口
】
MOV AL,0FFH //高电平,灯全亮
OUT DX,AL
WAITING: STI //开中断,整点报时IOLED0: MOV AL,0FFH //方式2,ABC为输入
MOV DX,IOCPT
OUT DX,AL
CALL T1
]
MOV CX,2
MOV AL,0FFH
IOLED1: MOV DX,IOCPT
OUT DX,AL
AND AL,00H
PUSH CX
MOV CX,8FFFH
{
DELAY0: LOOP DELAY0
POP CX
LOOP IOLED1
CALL T2
JMP IOLED0
T1: CMP BYTE PTR DS:[DATA8],1H //>=1min灯亮
JNB T1
T2: CMP BYTE PTR DS:[DATA8],0H //<=0min灯闪蜂鸣;
JB T2
WRINTVER: MOV AX,0H
MOV ES,AX
MOV DI,002CH //002CH=44D=4*11,11为中断类型$
LEA AX,INTQ3 //取中断向量表IRQ3偏移地址到AX
STOSW //再把AX内容放到ES:DI所指002CH MOV AX,CS //取中断向量表IRQ3段地址
STOSW
MOV DI,003CH //003CH=60D=4*15,15为IRQ7中断 LEA AX,INTQ7 //类型号
STOSW
MOV AX,CS
¥
STOSW
RET
INTERUPT3: CLI //关中断,CPU 开始执行
MOV AL,DS:[DATA6]
INC AL //AL自增
MOV DS:[DATA6],AL //记录中断次数
~
CMP AL,14H //满20次,往下执行
JC PLAY //有借位跳PLAY
MOV BYTE PTR DS:[DATA6],00H
MOV SI,DATA4 //显示把DATA4地址给SI CALL LEDDISP
CALL NEWTIME
CALL CONVERSALL
!
PLAY: MOV AL,20H //再读一次中断
MOV DX,INTPORT1 //OCW2
OUT DX,AL
STI
IRET
INTERUPT7: CLI //当电平不符,自动跳Err MOV SI,DATA1
"
CALL LEDDISP
MOV AL,20H
MOV DX,INTPORT1
OUT DX,AL
IRET
LEDDISP: MOV AL,90H //显示RAM
MOV DX,CONTPORT
^
OUT DX,AL
MOV CX,08H //与LOOP共用,循环8次
MOV BYTE PTR DS:[DATA5],07H //刷新数码管
LED1:
MOV BL,DS:[DATA5]
MOV BH,0H
MOV AL,CS:[BX+SI] //051FH为段地址
MOV DX,DATAPORT
^
OUT DX,AL
SUB BYTE PTR DS:[DATA5],01H //从051FH每次减1
LOOP LED1 //直到0518H跳出循环LED2: RET
FORMAT: MOV BX,0 //DATA1,显示CSU--CSU MOV WORD PTR DS:[BX+DATA1],6D3EH
ADD BX,2
!
MOV WORD PTR DS:[BX+DATA1],4039H
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3E40H
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],396DH
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],063FH //DATA2
`
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],4F5BH
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],6D66H
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],077DH
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],6F7FH
、
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],7C77H
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],5E39H
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],7179H
ADD BX,2
^
MOV WORD PTR DS:[BX+DATA1],3F3FH //DATA3
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F40H
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],403FH
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F3FH
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F3FH //DATA4
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F40H
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],403FH
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F3FH
MOV BYTE PTR DS:[DATA6],00D //DATA6-10
MOV BYTE PTR DS:[DATA7],11H
MOV BYTE PTR DS:[DATA8],59H
MOV BYTE PTR DS:[DATA9],40H
MOV WORD PTR DS:[DATA10],DATA4
RET //远返回
CONVERS1: MOV BH,0H //只要个位
AND AL,0FH //主函数每次加1
MOV BL,AL //给低8位到BL
MOV AL,CS:[BX+DATA2] //从DATA2找到BX对应数RET
CONVERS2: PUSH AX //保护原来AX寄存器存放的内容
CALL CONVERS1
MOV BX,WORD PTR DS:[DATA10]
MOV DS:[BX],AL
ADD WORD PTR DS:[DATA10],01H //地址0520H+1
POP AX //AL重置为DATA9或8或7
PUSH CX //保护CX
MOV CL,4H
SHR AL,CL //右移两个数码管,先移个位后十
POP CX
CALL CONVERS1
MOV BX,WORD PTR DS:[DATA10]
MOV DS:[BX],AL
RET
CONVERSALL: MOV AL,BYTE PTR DS:[DATA9] //秒
CALL CONVERS2
ADD WORD PTR DS:[DATA10],02H
MOV AL,BYTE PTR DS:[DATA8] //分
CALL CONVERS2
ADD WORD PTR DS:[DATA10],02H
MOV AL,BYTE PTR DS:[DATA7] //时
CALL CONVERS2
MOV WORD PTR DS:[DATA10],DATA4
RET
NEWTIME: CMP BYTE PTR DS:[DATA9],59H //判断秒到59
JC ADD1
MOV BYTE PTR DS:[DATA9],0D
CMP BYTE PTR DS:[DATA8],59H //判断分=59
JC ADD2
MOV BYTE PTR DS:[DATA8],0D
CMP BYTE PTR DS:[DATA7],23H //判断时=23
JC ADD3
MOV BYTE PTR DS:[DATA7],0D
JMP OK
ADD1: MOV AL,BYTE PTR DS:[DATA9] //秒步进1
ADD AL,1D
DAA //十六进制调整消ABCDEF… MOV BYTE PTR DS:[DATA9],AL
JMP OK
ADD2: MOV AL,BYTE PTR DS:[DATA8] //分步进1
ADD AL,1D
DAA
MOV BYTE PTR DS:[DATA8],AL
JMP OK
ADD3: MOV AL,BYTE PTR DS:[DATA7] //时步进1
ADD AL,1D
DAA
MOV BYTE PTR DS:[DATA7],AL
JMP OK
OK: RET
CODE ENDS END START。