微机原理实习报告---电子时钟(用汇编语言实现)

合集下载

数字电子时钟实习报告

数字电子时钟实习报告

一、实习目的本次实习旨在通过设计和制作数字电子时钟,加深对数字电路基本原理、电子元器件性能及电路设计方法的理解。

通过实际操作,掌握数字电子钟的设计、制作、调试和故障排除等技能,提高动手能力和创新意识。

二、实习内容1. 数字电子钟电路设计(1)电路组成:数字电子钟主要由振荡器、分频器、计数器、译码显示、报时电路和校时电路等部分组成。

(2)电路设计:采用555定时器构成振荡器产生1Hz的脉冲信号,通过分频器得到1Hz的秒脉冲信号。

计数器采用异步十进制计数器74LS90,实现秒、分、时的计数。

译码显示采用共阳极LED数码管,显示当前时间。

报时电路由门电路和蜂鸣器构成,实现整点报时功能。

校时电路由按键和计数器构成,实现手动校时功能。

2. 元器件选型(1)振荡器:选用555定时器,其频率稳定,易于调整。

(2)分频器:选用CD4060,具有分频功能,可方便地实现秒、分、时的计数。

(3)计数器:选用74LS90,具有异步计数功能,可方便地实现秒、分、时的计数。

(4)译码显示:选用共阳极LED数码管,显示清晰,功耗低。

(5)报时电路:选用门电路和蜂鸣器,实现整点报时功能。

(6)校时电路:选用按键和计数器,实现手动校时功能。

3. 电路制作与调试(1)电路制作:根据电路原理图,焊接电路板,连接元器件。

(2)电路调试:首先检查电路连接是否正确,然后逐个模块进行调试。

调试过程中,注意观察数码管显示是否正常,报时是否准确,校时是否方便。

三、实习过程1. 设计电路原理图:根据数字电子钟的功能和性能要求,设计电路原理图。

2. 选择元器件:根据电路原理图,选择合适的元器件。

3. 制作电路板:根据电路原理图,制作电路板。

4. 焊接元器件:将元器件焊接在电路板上。

5. 电路调试:逐个模块进行调试,确保电路功能正常。

6. 故障排除:在调试过程中,若出现故障,分析原因,进行修复。

四、实习结果1. 成功设计并制作了数字电子钟,实现了秒、分、时的计数,整点报时和手动校时等功能。

电子时钟实验报告

电子时钟实验报告

电⼦时钟实验报告综合实验报告(电⼦钟)⼀、实验⽬的主要⽬的是回顾《微机原理与应⽤》以及其他课程所学知识,并能灵活运⽤到实验当中。

掌握8253A、7段数码管,8259A、8255A的应⽤。

⼆、实验设备STAR 系列实验仪⼀套、PC 机⼀台。

三、实验内容利⽤STAR ES598PCI实验仪设计⼀个具有时、分、秒显⽰功能的电⼦时钟,并定义⼀个启动键,当按下该键时时钟从当前设定值开始⾛时,时间数据可⽤数码管显⽰。

(1) 利⽤8253计数器对标准时钟信号计数,分别实现时、分、秒计时(2) 键盘设定⼀个按键,当按键按下则从已设定的时间开始计时(已设定的时间值可在显⽰缓冲区中预置)(3) 时、分、秒的数值均显⽰在数码管上四、实验步骤1、主机连线说明:E5 区:CLK —— B2 区:2ME5 区:CS、A0 —— A3 区:CS5、A0E5 区:A、B、C、D —— G5 区:A、B、C、DB3 区:CS、A0 —— A3 区:CS1、A0B3 区:INT、INTA —— ES8088:INTR、INTAB3 区:IR0 —— C5 区:OUT0C5 区:CS(8253)、A0、A1 —— A3 区:CS2、A0、A1C5 区:GATE0 —— C1 区:VCCC5 区:CLK0 —— B2 区:62.5K2、运⾏程序,按G5 区的F 键,设置时钟初值;3、观察G5 区数码管上显⽰的时间是否正确。

五、实验流程图设置时间⼦程序:8253⼦程序:六、实验程序.MODEL TINYEXTRN Display8:NEAR, GetKeyA:NEAR, GetKeyB:NEAR IO8259_0 EQU 0F000HIO8259_1 EQU 0F001HCon_8253 EQU 0E003HT0_8253 EQU 0E000H.STACK 200.DATAhalfsec DB 0 ;0.5秒计数Sec DB 0 ;秒Min DB 0 ;分hour DB 0 ;时buffer DB 8 DUP(0) ;显⽰缓冲区,8个字节buffer1 DB 8 DUP(0) ;显⽰缓冲区,8个字节bNeedDisplay DB 0 ;需要刷新显⽰number DB 0 ;设置哪⼀位时间bFlash DB 0 ;设置时是否需要刷新.CODESTART: MOV AX,@DATAMOV DS,AXMOV ES,AXNOPmov sec,0 ;时分秒赋为00:00:00mov min,0mov hour,0MOV bNeedDisplay,1 ;显⽰初始值CALL Init8253CALL Init8259CALL WriIntverSTIMAIN: CALL GetKeyA ;按键扫描JNB Main1CMP AL,0FH ;设置时间JNZ Main1CALL SetTimeMain1: CMP bNeedDisplay,0JZ MAINCALL Display_LED ;显⽰时分秒MOV bNeedDisplay,0 ;1s定时到刷新转速Main2: JMP MAIN ;循环进⾏实验内容介绍与测速功能测试SetTime PROC NEAR LEA SI,buffer1CALL TimeToBufferMOV Number,0Key: CMP bFlash,0JZ Key2LEA SI,buffer1LEA DI,bufferMOV CX,8REP MOVSBCMP halfsec,0JNZ FLASHMOV BL,numberNOT BLAND BX,07HLEA SI,bufferMOV BYTE PTR [SI+BX],10H ;当前设置位置产⽣闪烁效果FLASH: LEA SI,buffer CALL Display8MOV bFlash,0Key2: CALL GetKeyAJNB KeyCMP AL,0EH ;放弃设置JNZ Key1JMP ExitKey1: CMP AL,0FHJZ SetTime8SetTime1: CMP AL,10JNB Key ;⽆效按键CMP number,0JNZ SetTime2CMP AL,3 ;调整时的⼗位数JNB KeyMOV buffer1 + 7,ALJMP SetTime7SetTime2: CMP number,1JNZ SetTime3CMP buffer1 + 7,2JB SetTime2_1 ;修改后可以在设置时间时,设置时钟为04到09之间的数值 CMP AL,4 JNB KeySetTime2_1: MOV buffer1 + 6,ALINC numberJMP SetTime7SetTime3: CMP number,3JNZ SetTime4CMP AL,6 ;调整分的⼗位数JNB KeyMOV buffer1 + 4,ALJMP SetTime7SetTime4: CMP number,4JNZ SetTime5MOV buffer1 + 3,AL ;调整分的个位数INC numberJMP SetTime7SetTime5: CMP number,6JNZ SetTime6CMP AL,6 ;调整秒的⼗位数JB SetTime5_1JMP KeySetTime5_1: MOV buffer1 + 1,ALJMP SetTime7SetTime6: MOV buffer1,AL ;调整秒的个位数SetTime7: INC numberCMP number,8JNB SetTime8MOV bFlash,1 ;需要刷新JMP KeySetTime8: MOV AL,buffer1 + 1 ;确认MOV BL,10MUL BLADD AL,buffer1MOV sec,AL ;秒MOV AL,buffer1 + 4MUL BLADD AL,buffer1 + 3MOV min,AL ;分MOV AL,buffer1 + 7MUL BLADD AL,buffer1 + 6CMP al,18h ;修改后可以解决时间设置时,时钟设置为24以上的数值 JNB exit MOV hour,AL ;时JMP ExitExit: RETSetTime ENDP;hour min sec转化成可显⽰格式TimeToBuffer PROC NEARMOV AL,secXOR AH,AHMOV BL,10DIV BLMOV [SI],AHMOV [SI + 1],AL ;秒MOV BYTE PTR [SI + 2],10H ;这位不显⽰MOV AL,minXOR AH,AHDIV BLMOV [SI + 3],AHMOV [SI + 4],AL ;分MOV BYTE PTR [SI + 5],10H ;这位不显⽰MOV AL,hourXOR AH,AHDIV BLMOV [SI + 6],AHMOV [SI + 7],AL ;时RETTimeToBuffer ENDP;显⽰时分秒Display_LED PROC NEAR LEA SI,bufferCALL TimeToBufferLEA SI,bufferCALL Display8 ;显⽰RETDisplay_LED ENDP;0.5s产⽣⼀次中断Timer0Int: PUSH AXPUSH DXMOV bFlash,1INC halfsecCMP halfsec,2JNZ Timer0Int1MOV bNeedDisplay,1MOV halfsec,0INC secCMP sec,60JNZ Timer0Int1MOV sec,0INC minCMP min,60JNZ Timer0Int1MOV min,0INC hourCMP hour,24JNZ Timer0Int1MOV hour,0Timer0Int1: MOV DX,IO8259_0 MOV AL,20HOUT DX,ALPOP DXPOP AXIRETInit8253 PROC NEARMOV DX,Con_8253MOV AL,34HOUT DX,AL ;计数器T0设置在模式2状态,HEX计数 MOV DX,T0_8253 MOV AL,12HOUT DX,ALMOV AL,7AHOUT DX,AL ;CLK0=62.5kHz,0.5s定时RETInit8253 ENDPInit8259 PROC NEARMOV DX,IO8259_0MOV AL,13HOUT DX,ALMOV DX,IO8259_1MOV AL,08HOUT DX,ALMOV AL,09HOUT DX,ALMOV AL,0FEHOUT DX,ALRETInit8259 ENDPWriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA AX,Timer0IntSTOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPEND START七、实验结果⼋、实验⼼得通过这两天的实习使我对微机原理有了更深⼊的了解,原来只是停留在想象中的,就像⼀些编写的程序也只是通过⾃我检查来看程序是否错误,有些问题很难发现,但是通过这两天的实习,使原本空洞的知识进⼊了实际的操作中,特别是对对电⼦钟的实验发现微机原理可以实验很多东西,我们现实中的很多东西都是通过微机原理的编程实现的,⽐如⼗字路⼝的红绿灯、数字式温度计、语⾳模块、光照强度的测试……,切实体验到了微机原理的功能强⼤以及它的重要性。

微机原理闹钟实验报告

微机原理闹钟实验报告

微机原理闹钟实验报告实验名称:微机原理闹钟实验报告实验目的:1. 了解单片机的基本工作原理和编程方法;2. 学习如何使用单片机设计并实现闹钟功能;3. 掌握数字时钟显示技术。

实验器材:1. 单片机实验箱;2. AT89C52单片机;3. LED数码管;4. 4位开关;5. 电源线;6. 连线线缆。

实验原理:本次实验使用单片机AT89C52来设计和实现闹钟功能。

单片机是一种微型电子计算机系统,具有高度集成、功能强大等特点。

数码管是一种常见的数字显示装置,适用于时钟、计时器等场合。

实验步骤:1. 将AT89C52单片机与LED数码管通过连接线连接起来,保证电源线的正负极连接正常。

2. 编写C程序,实现显示当前时间的功能。

通过编程可以将当前时间在数码管上显示出来。

3. 设定闹钟时间和闹铃的功能,通过编程实现。

当闹钟时间到达时,数码管上会显示闹钟时间,并通过蜂鸣器发出声音。

4. 调试程序,确保闹钟功能正常运行。

5. 完成闹钟的相关操作,包括设置闹钟时间、启动闹钟、关闭闹钟等功能。

实验结果:经过编程和调试,我们成功实现了微机原理闹钟的功能。

我们能够通过设置闹钟时间并启动闹钟来实现报时的功能。

当闹钟时间到达时,数码管上会显示相应的时间,并通过蜂鸣器发出声音,起到提醒作用。

实验总结:通过这次实验,我深入了解了单片机的基本工作原理和编程方法。

同时,我学会了使用单片机设计和实现闹钟功能,并掌握了数字时钟显示技术。

这次实验让我对单片机的应用有了更深刻的认识,并提高了我对数字电路设计和编程的能力。

同时,我还发现了实验过程中可能存在的问题和改进的空间。

例如,我可以进一步完善闹钟功能,加入更多的定时和报时功能,提高闹钟的多样化和实用性。

此外,我还可以优化程序的运行效率,提高系统的稳定性和响应速度。

总之,本次实验对我的学习和提高具有重要意义。

通过实践操作,我深入理解了微机原理闹钟的设计与实现,拓宽了我的知识面和实践能力。

我将继续深入学习和掌握微机原理和相关技术,为以后的学习和研究打下坚实的基础。

微机原理与接口技术综合实验电子钟实验报告

微机原理与接口技术综合实验电子钟实验报告

微机原理综合实验:电子钟实验要求8253每1s产生中断请求给8259,中断服务程序利用8255控制数码管,构建一个电子钟。

一、实验原理(相关芯片大致介绍)1.82548254 是Intel 公司生产的可编程间隔定时器,是8253 的改进型,比8253 具有更优良的性能。

8254 具有以下基本功能:(1)有3 个独立的16 位计数器。

(2)每个计数器可按二进制或十进制(BCD)计数。

(3)每个计数器可编程工作于6 种不同工作方式。

(4)8254 每个计数器允许的最高计数频率为10MHz(8253 为2MHz)。

(5)8254 有读回命令(8253 没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。

(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。

计数初值公式为:n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。

2.8259Intel公司专为控制优先级中断而设计开发的芯片,包括中断源优先级排队、辨别中断源以及提供中断矢量的电路,无需附加任何电路,用户只需对8259 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式。

同时,在不需增加其他电路的情况下,通过多片8259 的级连,能构成多达64 级的矢量中断系统。

管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU 传送中断类型号。

3.8255并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。

CPU 和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。

8255 可编程外围接口芯片是Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,用+5V 单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。

电子时钟的电子设计实习报告

电子时钟的电子设计实习报告

电子时钟的电子设计实习报告一、实习目的与要求本次电子设计实习的主要目的是让我们了解和掌握电子时钟的设计与制作过程,培养我们动手实践能力和团队协作精神。

要求我们能够根据给定的功能要求,设计并制作一个电子时钟,实现小时、分钟和秒的显示功能。

二、实习内容与过程1. 需求分析:根据实习任务,我们首先进行了需求分析,明确了电子时钟需要实现的功能,包括小时、分钟和秒的显示,以及时间的设定和调整等功能。

2. 方案设计:在需求分析的基础上,我们设计了电子时钟的总体方案。

采用了MCU(Micro Control Unit,微控制器)作为核心控制器,实现时间的计算和显示控制。

同时,选择了合适的时钟芯片和显示模块,完成了硬件选型。

3. 硬件制作:根据方案设计,我们进行了电路原理图的设计,并选择了合适的元器件进行硬件制作。

主要包括MCU、时钟芯片、显示模块、按键模块等。

4. 软件编程:我们编写了MCU的程序代码,实现了时间的计算、显示控制以及时间的设定和调整等功能。

同时,通过调试和优化代码,保证了时钟的准确性和稳定性。

5. 系统测试:完成了硬件和软件的集成后,我们对电子时钟进行了系统测试。

测试内容包括时间的准确性、显示功能的正常运行以及时间的设定和调整等功能。

三、实习成果与总结通过本次实习,我们成功设计并制作了一个电子时钟,实现了小时、分钟和秒的显示功能,以及时间的设定和调整等功能。

在实习过程中,我们不仅掌握了电子时钟的设计方法和制作流程,还培养了团队协作和动手实践能力。

通过本次实习,我们深刻认识到了电子设计的重要性和实践意义。

在今后的学习和工作中,我们将不断努力,不断提高自己的电子设计能力,为我国的电子产业做出贡献。

原创 8086微机原理实验报告

原创 8086微机原理实验报告
另外还有兰雨雨的《醉江山》
DATSEGMENT
YEAR1 DB ?
YEAR2 DB ?
MONTH DB ?
DAY DB ?
STAYDB 100 DUP (?)
DATE DB 'DATE:','$'
SA0DB 'BEGIN:','$'
SA1 DB 'Pressh m sto adjust time','$'
INC BX
MOVAL,MONTH
CALL TURN2
INC BX
MOVAL,'-'
MOV [BX],AL
INC BX
MOV AL,DAY
CALL TURN2
INC BX
MOV AL,20H
MOV [BX],AL
INC BX
MOVAL,0AH
MOV [BX],AL
MOVAL,'$'
MOV [BX],AL
在以上延时程序的基础上,通过时间约1s的长延时累加,并以时、分、秒的形式显示出来。同理,通过时间与日期的进制关系,还可以编写一个日期的程序。
在时、分、秒和年、月、日进制计算程序的基础上可以增加语句以实现时间和日期的校对功能,通过键盘输入不同字符可以选择对时、分、秒、年高位、年低位、月、日分别进行加一操作,以实现校对功能。
JNE DISPY
MOV DAY,0
MONT_: MOVAL,MONTH
ADDAL,1
DAA
MOV MONTH,AL
CMP AL,13H
JNE DISPY
MOV MONTH,0
SEC: MOVAL,DL

电子时钟实习报告

电子时钟实习报告

一、实习背景随着科技的不断发展,电子时钟因其精确、方便、美观等特点,已成为现代生活中不可或缺的电子产品。

为了更好地了解电子时钟的设计与制作过程,提高自己的实践能力,我参加了本次电子时钟实习。

二、实习目的1. 了解电子时钟的基本原理和电路组成。

2. 掌握电子时钟的设计与制作方法。

3. 提高自己的动手能力和团队协作能力。

三、实习内容1. 电子时钟基本原理电子时钟是一种利用电子技术实现计时功能的设备。

其主要原理是利用晶振产生稳定频率的信号,经过计数器进行计数,最终由显示器显示时间。

2. 电子时钟电路组成电子时钟电路主要由以下几个部分组成:(1)晶振:产生稳定频率的信号。

(2)计数器:对晶振信号进行计数。

(3)译码器:将计数器的输出转换为显示器可识别的信号。

(4)显示器:显示时间。

(5)复位电路:实现电子时钟的复位功能。

3. 电子时钟设计与制作(1)设计过程在设计电子时钟的过程中,首先要确定所需的功能,如显示时分秒、闹钟等。

然后根据功能需求,选择合适的电子元件和电路模块。

最后,根据电路原理图进行电路板的设计。

(2)制作过程在制作电子时钟的过程中,需要完成以下步骤:①元器件焊接:按照电路原理图,将元器件焊接在电路板上。

②电路板制作:根据电路原理图,制作电路板。

③电路调试:将电路板上的元器件进行调试,确保电路正常工作。

④组装:将电路板、显示器、电池等部件组装在一起。

⑤测试:对组装好的电子时钟进行测试,确保其功能正常。

四、实习成果通过本次电子时钟实习,我取得了以下成果:1. 掌握了电子时钟的基本原理和电路组成。

2. 学会了电子时钟的设计与制作方法。

3. 提高了动手能力和团队协作能力。

五、实习体会1. 理论与实践相结合:在实习过程中,我深刻体会到理论与实践相结合的重要性。

只有将所学知识运用到实际操作中,才能真正掌握电子时钟的设计与制作方法。

2. 注重细节:在制作电子时钟的过程中,细节决定成败。

我学会了如何注意电路板焊接、元器件安装等细节,确保电子时钟的正常工作。

微机原理实验报告电子钟

微机原理实验报告电子钟

微机原理与接口技术课程设计实验报告——电子时钟(附8251串口通讯部分实验报告)通过设置8251的数据位和方式字,通过示波器测量输出波形。

在实验中,8251选择异步通讯方式,修改自发自收程序,通过测量TXD引脚观察波形。

观察波形&分析:1.数据位:6AH,方式字:7EH(1个停止位,偶校验)可知:输出为00101011001,数据为可以推断出是加粗部分,则前一位为起始位,后两位01分别为偶校验位和停止位。

实验结果与结果相符。

2.数据位:0C4H,方式字:7EH(1个停止位,偶校验)可知:输出为00010001111,数据为可以推断出是加粗部分,则前一位为起始位,后两位11分别为偶校验位和停止位。

实验结果与结果相符。

一、课程设计目的和意义通过本次课程设计掌握多种芯片使用的方法,灵活地综合运用课本知识,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解。

了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程。

二、开发环境及设备PC机一台、实验箱、导线若干8254定时器:用于产生秒脉冲,其输出信号可作为中断请示信号8255并口:用做接口芯片,和数码管相连8259中断控制器:用于产生中断LED:六个LED用于显示时:分:秒值三、设计思想与原理1、设计思想本系统设计的电子时钟用8254做定时计数器产生时钟频率,8255做可编程并行接口显示时钟,8259做中断控制器产生中断。

在此系统中,8254的功能是定时,接入8254的CLK信号为周期性时钟信号。

8254采用计数器0,先读写低字节后读写高字节,方式2,二进制计数,以18.432kHz为输入时钟,4800H分频后为1Hz,即1s产生上升沿,此信号接8259的中断请求信号输入端,CPU即处理中断,使液晶显示器上的时间发生变化。

2.设计原理利用实验台上提供的定时器8254和扩展板上提供的8259和数码显示电路,设计一个电子时钟,由8254中断定时,电子时钟的显示格式由左到右分别为时、分、秒。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河南农业大学课程设计报告题目:电子时钟显示设计课程:微型计算机原理专业:电子信息工程班级:学生姓名:学号:指导教师:完成日期:机电工程学院目录前言 (1)第一章绪论 (2)一、实习目的 (2)二、实习要求 (2)三、设计所需设备 (2)第二章软件系统介绍 (3)一、中断技术(或其它相关技术) (3)(一)介绍中断的概念中断技术 (3)(二)DOS及BIOS中断 (3)二、汇编语言及汇编工具简介 (3)三、软件介绍 (3)第三章设计分析 (4)一、软件设计思路 (4)二、软件各模块内容 (4)(一)光标定位子程序原理 (4)(二)清屏原理 (4)(三)字符及字符串显示原理 (4)(四)压缩BCD转为ASCII码原理 (5)(五)动态扫描键盘原理 (5)三、程序流程图设计 (5)第四章系统实现 (7)一、程序原代码清单及详细注释 (7)二、实验结果 (15)总结 (16)一、软件的选取 (16)二、图案的设计 (16)三、程序调试 (16)参考文献 (16)前言软件设计题目电子时钟。

(在计算机屏幕上显示当前系统的时间,日期,或时间和日期,3人一组)设计目的:1.了解定时/计数器和中断(DOS/BIOS)的使用;2.掌握定时/计数器和中断的工作原理和编程方法。

编程要求:1.调用系统时间,在屏幕上显示出来;2.获取键盘的按键值,判断键值并退出系统。

程序设计参考步骤:第一部分:定义显示界面。

第二部分:调用系统时间(日期),并将调用的用二进制表示的时间数转换成ASCII码,并将时间数(日期数)存入内存区。

第三部分:将存在系统内存区的时间数(日期数)用显示字符串的形式显示出来。

第四部分:获取键盘的按键值,判断键值并退出系统。

第一章绪论一、实验目的1.理解掌握定时/计数器和中断的使用方法。

2.掌握微机常用的输入输出方式及接口技术。

3.掌握一定的汇编语言知识,培养自己的动手操作能力。

4.学习程序设计的基本思路和方法。

二、实习要求1.调用系统时间,在屏幕上显示出来;2.获取键盘的按键值,判断键值并退出系统。

三、设计所需设备:PC机第二章软件系统介绍一、中断技术(或其它相关技术)(一)介绍中断的概念中断技术在微机中,当CPU在执行过程中时,由于随机的事件(包括CPU内部的和CPU外部的事件)引起的CPU暂时停止正在执行的程序,而转去执行一个用于处理该事件的程序—称为中断式服务程序(或称中断处理程序),处理完后又返回被终止的程序断点处继续执行,这一过程成为中段(二)DOS及BIOS中断通过调用DOS系统的8号功能实现控制字符的输入,通过调用延时程序实现十分之一秒的定时,通过调用DOS系统的2号功能实现光标定位,调用DOS系统的2号功能实现字符的输出,通过调用DOS系统的9号功能实现字符串的输出。

二、汇编语言及汇编工具简介汇编语言(AssemblyLanguage)是面向机器的程序设计语言。

在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。

这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。

于是汇编语言亦称为符号语言。

使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。

汇编程序把汇编语言翻译成机器语言的过程称为汇编。

EMU8086是学习汇编必不可少的工具,它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。

Emu8086同主流汇编程序相比,语法简单得多,但是它能生成兼容8086的机器语言。

可以直接对通用寄存器,段寄存器,直接进行汇编编址操作,而且便于直接生成exe文件进行操作。

三、软件介绍这个电子时钟可以通过DOS命令实现对系统时间进行调用,并且直接显示出来,按‘C’或‘c’直接修改时间,然后按‘ESC’退出此时的程序第三章设计分析一、软件设计思路先在数据段开一段显示缓冲区,用来存储系统时间,调用子程序的清屏部分。

调用DOS中断,得到系统当前时间,并将其二进制转换成ASCII码。

再分别将小时数、分钟数、秒数存入显示缓冲区,在修改时间的时候调用键盘输入输出程序实现时钟的修改功能,然后存入结束字符‘$’。

调用DOS字符串显示功能将时间显示在显示器上,调用屏幕的I/O中断,定位光标的开始位置,将时间显示在预先定义好的位置。

把程序设计成用刷新的方式来不断获取系统的时间,这样就有了会一秒一秒走动的电子时钟。

二、软件各模块内容(一)光标定位子程序原理DOS显示屏为25行、80列,左上角为(0,0),右下角(18,4F)设置光标,可调用BIOS系统,用汇编语句调用中断INT10H。

入口信息为(AH)=2 要设置光标;(BH)=0 页号;(DH,DL)=光标的行号、列号(二)清屏原理开始执行程序时为保证有一个洁净的屏幕,可使显示屏做上滚动作,使屏幕留下一片空白。

要使屏幕上滚,可用汇编语句INT 10H ,入口信息为(AH )=6 使屏幕上滚(AL)=00上滚行数(CH,CL)=滚动区域左上角的行、列号(DH,DL)=滚动区域右下角的行、列号(BG)=00 颜色的设置(三)字符及字符串显示原理通过调用DOS系统模块2只能是西安DL中的一个字符的显示。

为了实现字符串的显示,调用其9号模块功能,其入口信息为(AH)=9 显示字符串的功能模块(DS:DX)指向字符串的首地址,要求字符串以字符‘$’结尾。

(四)压缩BCD转为ASCII码原理(1.)两位的:先将压缩BCD码的高4位取出,右移四位后,与30H相或,存到相应内存单元;然后将低4位取出,与30H相或,存到下一内存单元。

(2.)一位的:原数字加30H(五)动态扫描键盘原理运用INT 21H的8号功能来实现动态扫描键盘。

如果有键按下,则相应的键值的ASCII码被存到AL中。

判断AL中的数值,若不是控制字符,则继续循环,从而实现动态扫描键盘。

三、程序流程图设计第四章系统实现一、程序原代码清单及详细注释;--------------------------------数据段定义阶段-------------------------------------------------------data segmentmess1 DB ' ↖^ ( && && ) ^ ↖(^o^) ',0ah,0dh DB ' && && Happy ^ New ~* Year ',0ah,0dhDB ' **** **** ** **** ',0ah,0dhDB ' ** ** ** ** **** ** ** ************ ASM ASSIGNMENT *********** ',0ah,0dhDB ' ** ** ** ** ** ******* ELECTRONIC CLOCK ************** ',0ah,0dhDB ' ** ** ** ** ** **Designed by ZhangLei ChengQin and WuXiao* ',0ah,0dhDB ' ** ** ** ** ** ** Press C or c to correct the time ****** ',0ah,0dhDB ' ** ** ** ** ** *** Press ESC button to exit ************ ',0ah,0dhDB ' ** ** ** ** ** ',0ah,0dhDB ' ** **** ** ** ** ******** ',0ah,0dhDB ' ******* **** ** ******** ',0ah,0dh,'$'TS DB ?,0ah,0dhDB ?,0ah,0dhDB ' ====**======@@======**=====',0ah,0dhDB ' Please input the new time (hh:mm:ss):',0dh,0ah,'$' ;提示输入时间的格式mess2 db ' The Time is:',0ah,0dh,'$'HCQ db 40 ;在数据段开一段时间显示缓冲区,大小为40个字节hor db ? ;为变量分配一个字节的空间,初值为任意字符min db ? ;为变量分配一个字节的空间,初值为任意字符sec db ? ;为变量分配一个字节的空间,初值为任意字符data ends;--------------------------------堆栈段定义阶段-------------------------------------------------stack segmentdb 100 dup(?) ;定义100个字节的堆栈段stack ends;--------------------------------代码段定义阶段------------------------------------------code segmentassume cs:code,ss:stack,ds:data ;确定各个逻辑段的类型start:call clear ;调用清屏子程序display: ;时间显示部分mov ax, data ;将DATA的段基地址送到寄存器AXmov ds,ax ;将AX寄存器的内容存到DS中mov bx,offset HCQ ;送HCQ的偏移地址到BXmov ah,2ch ;调用DOS时间调用功能,功能号:2cH,小时,分钟,秒数int 21h ;分别保存在CH,CL,DH中mov al,ch ;小时数设定mov ah,0 ;此处置零是为了call C16-10 ;调用进制转换子程序inc bx;----------------------------------------------------------mov al,':' ;显示分隔符号mov [bx],al ;将寄存器内容存入BX中inc bx ;寄存器指向的地址+1;-------------------------------------------------------mov ah,2ch ;调用DOS时间调用功能,功能号:2cH,小时,分钟,秒数int 21h ;分别保存在CH,CL,DH中mov al,cl ;分钟数设定mov ah,0 ;将该位置零call C16-10inc bx;------------------------------------------------------------------------- mov al,':' ;显示分隔符号mov [bx],al ;将寄存器内容存入BX中inc bx ;寄存器指向的地址+1;---------------------秒的设计---------------------------------mov ah,2ch ;秒设定int 21hmov al,dhmov ah,0 ;将该位置零call C16-10inc bx;----------------------------------------------------------------------mov al,'$' ;将字符串的结束位送至显示缓冲区的最后一位mov [bx],al;------------------------------------------------------------------------ push bx ;修改时间显示的地方mov ah,2 ;置光标位置,调用功能号AH=2mov bh,0 ;置显示模式mov dh,17 ; DH跟DL分别为行号与列号,并入栈保护BX mov dl,50 ;显示输出在第17行int 10h ;显示输出在51列pop bxlea dx,HCQ ;送HCQ偏移地址到DX,并调用DOS显示功能,功能号为9 mov ah,9 ;调用DOS 9号功能,显示字符串int 21hpush bxmov ah,2 ;置光标位置调用DOS的功能,AH=2mov bh,0 ;置显示以下模式mov dh,1 ;修改前面附加的内容的显示位置mov dl,0int 10hlea dx,mess1 ;取m ess1的有效地址赋给DXmov ah,9 ;调用DOS 9号功能,显示字符串int 21hpop bx ;BX寄存器出栈push bx ;PUSH BXmov ah,2 ;置光标位置mov bh,0 ;置显示模式mov dh,17 ;定位在17行mov dl,35 ;定位在35列int 10hpop bxlea dx,mess2 ;取mess1的有效地址赋给DXmov ah,9int 21h;-----------------------------mov ah,1 ;调用键盘I/O中断功能号1,获取键值到ALint 16hcmp al,'c' ;是c键,转到时间修改程序je Corcmp al,'C' ;是C键,转到时间修改程序je Corcmp al,1bhjz quit ;是ESC键,退出程序jmp displayquit:mov ah,4ch ;程序终止功能号int 21hretCor: call correct ;调用时间修改子程序;-------------------------------C16-10 PROC NEARPUSH CXMOV AH,0 ;16位二进制数转换为ASCII码MOV CX,10D ;基数10DIV CL ;用除10取余的方法转换为BCD码(二进制码)ADD AX,3030H ;BCD码转换为ASCII码的代码MOV [BX],AL ;此时将低八位的AL加载到BX中,[BX]指的是寄存器BX 指向的内存单元INC BX ;BX指向的存储单元加一MOV [BX],AHPOP CXRETC16-10 ENDP;-------------------------------------------clear proc nearpush ax ;入栈保护现场push bxpush cxpush dxmov ax,0600h ;ah=06(滚动)al=00(全屏空白)mov bh,2eh ;设置背景颜色(2)和前景颜色(e)sub cx,cx ;将寄存器清零mov dx,5f5fh ;设备重定向子功能号功能描述int 10hpop dx ;出栈恢复现场pop cxpop bxpop axretclear endp;----------------------------correct proc NEAR ;时间修改子程序call input ;调用键盘输入子程序输入数据mov ch,hormov cl,minmov dh,secand dl,0hmov ah,2dh ;调用DOS功能调用系统时间并修改系统时间int 21hjmp startretcorrect endp;-------------------------------------------input proc NEAR ;键盘输入子程序push ax ;入栈保护数据push bxpush dxpushfmov dx,offset TS ;显示修改时间的格式提示mov ah,09h ;显示字符串,提示的内容int 21h ;调用DOS功能mov dx,OFFSET HCQ ;数据缓冲区的数据输入mov ah,0ah ;带缓存的键盘输入(字符串)int 21hand dx,0h ;将寄存器置零lea bx,HCQ ;向BX装入有效地址inc bx ;地址+1inc bx ;跳过‘:’mov dh,[bx] ;将[BX]的内容储存到寄存器DH中sub dh,30h ;将得到的ASCII码转化为16进制的数据inc bx ;地址加1mov dl,[bx] ;分sub dl,30h ;转化为16进制的数据mov cl,10 ;计数器计数十次mov al,dh ;将DH的内容送入寄存器mul cl ;通过减30h,再乘10的方法得到该二进制数add al,dl ;然后将两个数据相加mov ch,al ;存入时间mov hor,al ;将寄存器的内容存入HOR中inc bxinc bxmov dh,[bx] ;将ASCII码转换为二进制数sub dh,30hmov dl,[bx]sub dl,30hmov cl,10mov al,dhmul cl ;乘以10add al,dlmov cl,almov min,alinc bxinc bxmov dh,[bx] ;将ASCII码转换为二进制数sub dh,30hinc bxmov dl,[bx]sub dl,30hmov cl,10mov al,dhmul cladd al,dlmov dh,almov sec,alpopf ;出栈恢复数据pop dxpop cxpop bxpop axretinput endp;----------------------------code endsend start二、实验结果点击运行后,出现运行的结果如下:当按下‘c’或‘C’时显示提示符“please input the new time(hh:mm:ss):”总结“纸上得来终觉浅,绝知此事要躬行”,这是本次课程设计我最大的体会。

相关文档
最新文档