微机原理课程设计报告
微机原理课程设计报告彩灯控制器

专业班级:计算机1301姓名:学号:指导老师:2016年 1 月15 日彩灯控制器一、实验要求、设计目的及功能实现实验要求:现在有8盏彩灯,4个开关作为输入,控制4种闪烁方式。
当没有开关闭合时,4种花型依次轮流闪烁,每种花型闪烁时间持续2分钟,每盏灯点亮的时间为1秒。
只有某一个开关闭合时,对应的花型连续不断的闪烁。
设计实现该功能的电路,并编写完整的代码。
设计目的:(1)巩固和加深微机原理所学知识;(2)学习掌握一般的软硬件的设计方法和查阅、运用资料的能力。
所实现的功能:本课程设计所设计的彩灯控制器的主要功能有:向外发散显示、向中递推显示、0-7依次显示、奇数灯显示,偶数灯显示等功能。
输出采用8个二极管显示,每个灯亮1秒。
二、实验原理在这次课程设计中主要用到了8255A可编程并行接口芯片可用程序来设置芯片的工作方式,通用性强,使用灵活,可为CPU与外设之间提供并行输入/输出的通道。
8254给1S的信号送到8259,再送到8255A控制灯亮的时间。
三、硬件原理图0 0000000000000000000000000008255工作原理及内部结构1.8255A内部结构8255A的内部结构如图2所示,它由4部分组成:(1) 数据总线缓冲器它是一个双向三态8位缓冲器,用作与系统总线连接是的缓冲部件.CPU与8255A之间所有的数据的发送与接收以及CPU向8255A发送的控制信息和8255A向CPU回送的状态信息都是通过它传送的(2)三个8位端口PA、PB、PC端口A(PA口):有一个8位数据输入锁存器和一个8位数据输入锁存/缓冲器;端口B(PB口):有一个8位数据输入缓冲器和一个8位数据输入/输出,锁存/缓冲存储器器;端口C(PC口):有一个8位数据输入缓冲存储器器和一个8位数据输出锁存/缓冲器。
通常PA口与PB口用作输入/输出的数据端口,PC口用作控制和状态信息端口。
PC口可以分为两个四位的端口,每个端口包含一个四位锁存器,可分别同PA 口和PB口配合使用,用作控制信号(输出)或作为状态信号(输入)。
微机原理课程设计报告文库

微机原理课程设计报告文库一、课程目标知识目标:1. 理解微机原理的基本概念,掌握微机硬件结构及其功能;2. 学会分析微机工作原理,了解指令系统及编程方法;3. 掌握微机接口技术,了解常见接口芯片的功能和应用。
技能目标:1. 能够运用所学知识进行微机系统的简单设计和调试;2. 培养学生具备一定的微机编程能力,能够编写简单的汇编语言程序;3. 提高学生动手实践能力,能够进行基本的硬件焊接和电路搭建。
情感态度价值观目标:1. 培养学生对微机原理课程的兴趣,激发学生学习热情;2. 培养学生具备良好的团队合作意识,学会与他人共同解决问题;3. 增强学生的创新意识,鼓励学生勇于探索新知识,提高自主学习能力。
课程性质:本课程为理论与实践相结合的课程,强调培养学生的动手实践能力和创新能力。
学生特点:学生已具备一定的电子技术和计算机基础,具有较强的学习能力和好奇心。
教学要求:教师应注重理论与实践相结合,引导学生主动参与课堂讨论,鼓励学生动手实践,培养学生解决问题的能力。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
通过本课程的学习,使学生能够掌握微机原理的基本知识,具备实际应用能力,为后续相关课程和未来职业发展打下坚实基础。
二、教学内容本课程教学内容主要包括以下几部分:1. 微机硬件结构:介绍微处理器、存储器、输入输出接口等硬件组件的工作原理和功能;教材章节:第一章 微机系统概述内容列举:CPU结构、存储器分类、I/O接口基础等。
2. 指令系统与编程:讲解汇编语言的基本指令、寻址方式、程序设计方法等;教材章节:第二章 指令系统与汇编语言内容列举:基本指令、汇编语言程序结构、循环、分支等编程技巧。
3. 微机接口技术:分析常见接口芯片的原理与应用,如并行接口、串行接口、定时器/计数器等;教材章节:第三章 微机接口技术内容列举:并行接口、串行接口、定时器/计数器接口芯片等。
4. 微机系统设计与实践:培养学生动手实践能力,进行简单的微机系统设计与调试;教材章节:第四章 微机系统设计与实践内容列举:硬件焊接、电路搭建、程序下载与调试等。
微机原理课程设计报告

微机原理课程设计报告课程设计是每一个大学生在大学生涯中都不可或缺的,它使我们在实践中了巩固了所学的知识、在实践中锻炼自己的动手能力,本文就来分享一篇微机原理课程设计报告,希望对大家能有所帮助!微机原理课程设计报告(一) 以前从没有学过关于汇编语言的知识,起初学起来感觉很有难度。
当知道要做课程设计的时候心里面感觉有些害怕和担心,担心自己不会或者做不好。
但是当真的要做的时候也只好进自己作大的努力去做,做到自己最好的。
我们在这个过程中有很多自己的感受,我想很多同学都会和我有一样的感受,那就是感觉汇编语言真的是很神奇,很有意思。
我们从开始的担心和害怕渐渐变成了享受,享受着汇编带给我们的快乐。
看着自己做出来的东西,心里面的感觉真的很好。
虽然我们做的东西都还很简单,但是毕竟是我们自己亲手,呵呵,应该是自己亲闹做出来的。
很有成就感。
我想微机原理课程设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。
但是我想他也有它的独特指出,那就是让我们进入一个神奇的世界,那就是编程。
对于很多学过汇编或者其他的类似程序的同学来说,这不算新奇,但是对于我来说真的新奇,很有趣,也是我有更多的兴趣学习微机原理和其他的汇编。
微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。
讨论某一部分原理时又要涉及到其它部分的工作原理。
这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。
所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。
学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。
微机原理课程设计报告

微机应用系统设计与综合应用实验——(微机原理)课程设计报告专业班级学生姓名学生学号指导老师完成时间目录第一章设计课题概述 (3)1.1课程设计目的 (3)1.2课程设计要求 (4)1.3课程设计用途 (4)1.4实现技术指标 (4)第二章设计思想和实施方案 (5)2.1功能分析 (5)2.1.1波形产生 (5)2.1.2波形切换 (5)2.1.3 屏幕显示 (5)2.1.4小键盘控制 (5)2.1.5无极调频 (6)2.1.6无极调幅 (6)2.2所需芯片功能简介 (6)2.2.1 8088功能简介 (6)2.2.2 8255A功能简介 (7)2.2.3 A/D0832功能简介 (8)2.2.4 D/A0809功能简介 (9)2.3实施方案 (10)2.3.1 系统总体设计方案 (10)2.3.2系统设计方框图 (10)第三章典型程序模块及编程技巧分析 (12)3.1键盘扫描及逻辑判断模块 (12)3.2键盘编码模块 (13)3.3波形产生模块 (14)3.3.1方波 (14)3.3.2 锯齿波 (16)3.3.3 三角波 (18)3.3.4 正弦波 (20)3.4波形切换及基本控制模块 (21)3.5无级调频调幅判断及控制模块 (23)第四章遇到的问题及解决方法 (26)第五章程序清单和程序注释 (28)5.1汇编源程序 (28)5.2C语言源程序 (49)第六章课程设计收获与体会 (63)6.1实验收获 (63)6.2心得体会 (63)第七章参考文献 (65)第八章附录 (66)8.18088最小模式的连接图 (66)微机应用系统设计与综合应用课程设计报告第一章设计课题概述1.1 课程设计目的《微机应用系统设计与综合实验(实践)》课程设计是自动化专业本科生必修的一门技术基础课。
通过本课程设计,让学生对微机系统有一个较全面的理解,对典型数字接口电路的应用技术有一个较深入的掌握,并对应用系统进行硬件原理和软件编程进行分析、设计和调试,达到基本掌握简单微型计算机应用系统软硬件的设计方法,提高项目开发能力的目的。
微机原理课程设计

微机原理课程设计第一篇:微机原理课程设计一、设计题目单片机综合试验仪——计数/中断模块二、功能及性能指标显示计数,记到15就重新开始计数三、设计目的了解单片机综合实验仪基本构成和分模块设计方法。
掌握PROTEUS下单片机综合实验仪的设计、绘制方法。
通过本次实验,达到熟练掌握PROTEUS下单片机综合实验仪原理图绘制和模块划分调整的目的。
2通过单片机综合实验仪原理图转换为板图、制作出各模块实验板和下载程序和在实验板上调试、运行个实验项目,熟练掌握单片机综合实验仪线路板的设计制作过程;达到实现单片机综合实验仪各实验项目实际运行效果的目的。
3了解单片机综合实验仪各模块程序设计方法。
掌握KEIL C51下单片机综合实验仪各模块程序设计和调式及PROTEUS下的系统仿真方法。
通过本次课程设计,达到熟练掌握KEIL C51下和PROTEUS下单片机综合实验仪各模块程序设计、调试和仿真的目的。
四、意义该实验通过单片机的最小系统的制作,设计简单系统,拥有控制其他模块的功能,在现实生活中应用广泛,具有现实意义。
五、本人所做工作计数/中断模块部分①原理图仿真:②PCB版图设计(元件封装)与制作:部分器件封装:中断、定时计数、串行通信电路部分器件封装:SW1(TRIGGER)(3)——SW-PUSH-AUTO-LOCK(按实物设计)D9(POWER_SHOW)(3)——LED 需要设计封装器件外形图如下:中断、定时计数PCB电路图六、设计内容依据单片机综合实验仪原理图各模块及其元器件的实物结构。
在PROTEUS下设计制作单片机综合实验仪的设计、绘制方法。
通过本次实验,达到熟练掌握PROTEUS下单片机综合实验仪原理图绘制和模块划分调整的目的。
1、在PROTEUS的智能原理图输入系统ISIS下,按本本课程设计课件要求,每位同学主攻单片机综合实验仪一个模块原理图设计和绘制。
为后续实验本模块的板图设计做好准备。
2、自己制作的电路板图上焊接元件,完成实验板的制作。
微机原理课程设计报告(电子时钟)

微机原理课程设计报告(电子时钟)微机原理课程设计报告1.设计目的培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。
通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。
掌握8255、8259、8253等芯片的使用方法和编程方法。
通过本课程设计,学习应用所学知识,进一步了解相关芯片的原理、内部结构和使用方法,学习相关芯片的实际应用和编程。
系统采用8086微处理器完成电子秒表系统的独立设计。
同时,要了解综合性问题的程序设计,掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后的逻辑更加清晰。
2.设计内容设计一款可以随意启动/停止的电子秒表。
要求使用6位LED数字显示屏,计时单位为1/100秒。
使用功能键进行启动/停止控制。
其功能是通电后将计时器清除为0,并在第一次(或奇数次)按下启动/停止键时开始计数。
第二次(或偶数次)按此键可停止计时。
再次按开始/停止键可重置和重新开始计时。
它可以通过开关或钥匙控制。
(开关控制☆) (按键控制)★)3.设计要求一、基本要求1)设计可以显示1~60秒的无存储功能的秒表,最小单位为毫秒。
2)通过键盘键控制秒表的重置、暂停、继续和退出。
数字0控件被清除,数字1控件继续并退出二.提高要求:1)秒表可分组存储、批量显示、倒计时等2)采用图像显示、界面美观、设置报警声等4.设计原理与硬件电路一、总体设计思路使用8253工作在方式0计数,对1/100s计数,并讲计数值写入bl中并与100比较若不相等,则将计数值装换为10进制后送8255控制端显示,如相等则1s计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则1min计数程序加1之后并与59相比,如果不相等,则将计数值更改为十六进制,并发送至8255控制终端进行显示。
如果相等,计数程序将在加1后溢出,跳转到清零程序以清除计数,同时清除数码管。
微机原理课程设计报告---红绿灯

一、设计要求(1)南北路口的绿灯、东西路口的红灯同时亮5秒。
(2)南北路口的黄灯闪烁若干次,维持3秒,同时东西路口的红灯。
(3)南北路口的红灯、东西路口的绿灯同时亮5秒。
(4)南北路口的红灯、同时东西路口的黄灯亮烁若干次,维持3秒。
(5)转(1)重复。
(6)紧急情况可以手动控制红绿灯的变换。
一个开关控制南北绿,东西红,另一个按钮南北红,东西绿。
(7)黄灯闪烁时扬声器发声,提醒。
二、设计目的(1)了解红绿灯电路的基本工作原理;(2)了解8086微型计算机的工作过程;(3)学习8086CPU与外围设备的接口技术。
(4)运用微机原理与接口技术、数字电路、汇编语言程序设计等课程学到的知识,掌握微型计算机接口的方法和原理,具备一定的微机应用开发的实践能力,加深对理论课程的理解。
三、设计的具体实现原理框图3.1系统概述本次设计是模拟交通灯实时控制系统,以8086CPU为核心加以并行接口芯片8255、可编程计数器/定时器8253、LED灯、开关等组成的系统。
以LED灯模拟十字路口的红绿灯。
对交通灯控制的实现主要是通过编写汇编语言程序对8255的I/O及8253进行控制,从而实现对灯的亮与灭进行控制。
PC口做输入,读取定时,及应急开关状态。
用8253对扬声器的发声进行控制,利用软件编程给定8253芯片某一频率的方波信号,并且设定8255芯片的门控信号PB0 =1,则可控制扬声器发声。
利用8253的计数器1方式3、计数器0方式0实现对扬声器的控制,以及对于交通灯亮灭时间的精确延时。
3.2 8086CPU介绍8086由执行部件和总线接口部件组成(内部结构图如下图)外部设备8086内部结构图1. 执行部件EU由算术逻辑单元(ALU)、标志寄存器、通用寄存器组和EU控制器等部件组成。
主要功能是执行指令:一般顺序执行,EU不断地从指令队列中取指令连续执行,而省去访问存储器取指令的时间。
需要访问存储器取操作数时,EU将访问地址送给BIU后,将要等待操作数到来后才能继续操作;遇到转移类指令时,要将指令队列中的后续指令作废,等待BIU重新从存储器取出目标地址中的指令代码进入指令队列后,EU才能继续执行指令。
微机原理课程设报告

微机原理课程设计设计报告一、设计目的1、对微机原理课程中所学的理论知识进行进一步巩固和加深。
2、学会查阅相关手册与资料,培养独立分析与解决问题的能力。
3、学会使用屏幕编辑程序—MASM对汇编程序的编写,调试和运行。
4、了解对系统中DOS和BIOS的使用,弄懂汇编程序的上机过程以及如何运用DEBUG软件进行汇编程序的调试。
二、设计内容本次为期一周的课程设计,主要编写调试了5个程序,题目如下:1、字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法。
编写程序实现两个字符串比较。
如相同,则显示“MATCH”,否则,则显示“NO MATCH”。
2、从键盘上输出数据并显示为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。
编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。
3、字符和数据的显示设计为掌握字符和数据的显示方法,编写程序,先显示信息:INPUT STRING,THE END FLAG IS$,再接收字符。
如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不计数4、学生成绩名次表设计为进一步熟悉排序方法。
编写程序,将0-100之间的30个成绩存入首址为1000H的存储区中。
1000H+i表示学号为i的学生成绩。
编写程序使得在2000H 开始的区域排除名次表。
2000H+i为学号i的学生的名次。
三、具体设计程序设计一:字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法。
编写程序实现两个字符串比较。
如相同,则显示“MATCH”,否则,则显示“NO MATCH”。
流程图程序DATA SEGMENTDAT1 DB 'INPUT STRING1:','$' ;$保持当前地址DAT2 DB 'INPUT STRING2:','$'DAT3 DB 'MATCH!',0AH,0DH,'$' ;0DH为回车ASCII码,0AH为换行ASCII码DAT4 DB 'NOT MATCH!',0AH,0DH,'$'STRING1 DB 50 ;最长长度DB ? ;实际长度DB 50 DUP(?) ;存储空间STRING2 DB 50DB ?DB 50 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA ;数据段设置MOV DS,AXMOV ES,AXMOV AH,09H ;字符串显示,显示DAT1,显示DS:DX MOV DX,OFFSET DAT1INT 21HMOV AH,0AH ;字符串缓冲输入,接收输入字符串MOV DX,OFFSET STRING1INT 21HMOV DL,0AH ;输出换行MOV AH,02HINT 21HMOV AH,09HMOV DX,OFFSET DAT2 ;显示DAT2INT 21HMOV AH,0AHMOV DX,OFFSET STRING2INT 21HMOV DL,0AH ;输出换行MOV AH,02HINT 21HLEA SI,STRING1 ;比较LEA DI,STRING2ADD SI,2 ;串1首字符[SI+2]ADD DI,2 ;串2首字符[DI+2]CLD ;DF=0MOV CX,50REPZ CMPSB ;CX≠0或ZF=1时重复,DS:SI和ES:DI所指的两个字节相同则继续比较,如果比较相等,ZF=1,则继续比较下一个字节,DI和SI分别加1(DF=0时),CX-1JZ MATCHNMATCH:MOV AH,09HMOV DX,OFFSET DAT4 ;输出不匹配INT 21HJMP NEXTMATCH: MOV AH,09HMOV DX,OFFSET DAT3 ;输出匹配INT 21HNEXT: MOV AH,4CHINT 21HCODE ENDSEND START小结在设计过程中,我把程序分成了宏定义显示回车,数据段定义,初始化,开始比较,匹配时再比较,不匹配时SI指向串1首字符,DI指向新字符重新开始比较等模块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
—微机原理课程设计报告——电子表程序设计^。
(一)设计任务:用汇编语言设计一电子表程序,要求:!(1)实现秒、分、时的计时,并显示于屏幕中央(2)能够校时(3)能够半点、整点报时(二)设计原理该程序主要由三部分构成:时间设置、延时程序和时钟显示。
(1)时间设置…①输入初始时间先调用DOS操作系统模块2,在显示屏上显示‘:’,再调用DOS操作系统模块10,提示输入初始时间。
由键盘输入的时间以字符串形式存放在已定义的存储器缓冲区内,继而调用TRAN1转换子程序和MUL10乘10子程序,将存放在存储器缓冲区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放置在寄存器CH、DH、DL中。
②暂停计时按Pause Break键即可暂停计时,再按下任意键恢复计时③重新输入时间在程序运行时,可按下Esc键重新输入初始时间,此时程序检测到Esc(ASCII码为1BH)被按下,返回①步提示重新输入时间。
以上两步可实现校时的功能。
④半点、整点报时《程序运行时,分钟值每次改变都需要与30、60比较,若相等,则调用DOS操作系统模块7使计算机响铃并在时间后显示‘ ------’。
同时若分、秒值为60则需进位,时为24时进位,保证时钟程序的正确性。
(2)延时程序计算机在执行指令时,各种操作都按指令执行,但在像程序控制器那样由计算机发出指令控制外部设备是,由于外部设备所具有的机械惯性或其他原因,需要在计算机发出指令后有规律地延迟或等待一段时间。
这类延时,可以用硬件延时来完成,单用软件来实现也是一种方便和常用的方法。
计算机执行每一条指令,虽然很快,但还是需要一段时间的。
因此从理论上讲,可在程序中加一些与程序无关的指令去完成,要计算指令执行的时间,又不能过多的为了延时而增加编制程序的工作量。
因此,编制延时程序,应尽量采用较少的指令,节约存储器,并且不能对主程序造成影响。
每条指令执行时间的长短,是以计算机的时钟周期为基本单位的。
当CPU采用的时钟频率一定时,时钟周期也为定值。
因此可根据时钟周期的多少来计算执行指令所需的时间。
完成本设计任务使用的计算机采用Intel Pentium 4处理器,主频为,时钟周期约为。
通过时间约1s的长延时累加,并以时、分、秒的形式显示出来,就可以编写出一个时钟程序。
(3)时钟显示…①设置光标位置子程序IOSET一般的显示屏可显示25行、80列字符,屏幕左上角字符位置为0行0列,右下角字符位置为24行79列,对应于十六进制为:左上角为(0,0),右下角为(18,4F)。
设置光标,可调用BIOS系统,用汇编语句调用中断INT 10H,其入口信息为(AH)=2 要设置光标;(BH)=0 页号;(DH,DL)=( 0CD,24) 置光标于行、列数,本程序要求置光标于屏幕中央,即为12行36列(十进制)。
②清除屏幕子程序IOCLR当开始执行程序时,总希望有一个洁净的屏幕,此时可使显示屏幕作上滚动作,使屏幕留下一片空白,也可以清楚屏幕的一部分,是这部分空白留作它用。
要使屏幕上滚,可用汇编语句调用中断INT 10H,其入口信息为((AH)=6 是屏幕上滚;(AL)=00 上滚行数,若(AL)=0,则整屏为空白;(CH,CL)= 滚动区域的左上角行列号,本程序中(CX)=0;(DH,DL)= 滚动区域的右下角行列号,本程序中(DX)=184FH;(BG)= 空白行属性,当(BH)=7时,为正规属性(黑白)。
③屏幕显示程序DISPY显示屏幕作为常用的输出设备,可用来显示运算的中间结果或最终数据,也可用来显示表示正确完成或检验出的错误信息。
为了显示表示正确或显示错误的信息,必须在数据段中以字符串形式将提示信息加以定义,然后由显示器在屏幕上加以显示。
DOS系统中的显示功能模块号为2,每次调用仅能显示DL中的一个字符。
为显示字符串,可调用DOS系统另一功能,用汇编语句调用中断INT 21H,其入口信息为(AH)=9 显示字符串的功能模块号;^(DS:DX) 指向字符串的首地址,要求字符串以字符‘$’结尾。
(三)框图(四)程序清单DAT SEGMENTRING DB ' ------$'FLAG DB 0BUFFER DB 10DB`DB 10 DUP ()DAT ENDSSTA SEGMENT PARA STACK 'STACK'STAPN DB 100 DUP ()TOP EQU LENGTH STAPNSTA ENDSCOD SEGMENTSTART PROC FAR|ASSUME CS:COD,DS:DAT,SS:STAMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AX,OFFSET TOPMOV SP,AXMAIN: ;主程序`PUSH BXPUSH CXPUSH DXCALL IOCLR ;清除屏幕CALL IOSET ;设置光标位置POP DXPOP CXPOP BX:MOV DL,':'MOV AH,2 ;显示字符":",提示输入时间 INT 21HMOV DX,OFFSET BUFFERMOV AH,10INT 21HMOV BX,OFFSET BUFFER+2CALL TRAN1、INC BXINC BXINC BXINC BXCALL TRAN1MOV BX,OFFSET BUFFER+2MOV AL,[BX]。
CALL MUL10MOV CH,ALINC BXINC BXMOV AL,[BX]CALL MUL10MOV DH,ALINC BX—INC BXMOV AL,[BX]CALL MUL10MOV DL,ALAGAIN:MOV AL,0MOV FLAG,ALMOV AH,01H ;判断是否键盘有无输入,若有则重新置初值、INT 16HCMP AL,1BHJZ MAINCALL TIMEMOV AL,DLADD AL,1DAAMOV DL,AL{CMP AL,60HJNE DISPYMOV DL,0MOV AL,DHADD AL,1DAAMOV DH,ALCMP AL,30H ;与30比较—JNE NEXTMOV AL,1MOV FLAG,ALNEXT: CMP AL,60H ;与60比较JNE DISPYMOV AL,1MOV FLAG,AL:MOV DH,0MOV AL,CHADD AL,1DAAMOV CH,ALCMP AL,24HJNE DISPYMOV CH,0\DISPY:MOV BX,OFFSET BUFFERMOV AL,CHCALL TRAN2INC BXMOV AL,':'MOV [BX],ALINC BX,MOV AL,DHCALL TRAN2INC BXMOV AL,':'MOV [BX],ALINC BXMOV AL,DLCALL TRAN2【INC BXMOV AL,'$'MOV [BX],ALPUSH BXPUSH CXPUSH DXCALL IOCLRCALL IOSET《MOV DX,OFFSET BUFFERMOV AH,9INT 21HMOV AL,FLAG ;若标志位为1,则报时,并显示 ------CMP AL,1JNE NEXT1MOV DX,OFFSET RINGMOV AH,9;INT 21HMOV AH,02MOV DL ,07HINT 21HNEXT1:POP DXPOP CXPOP BX》JMP AGAINRETSTART ENDPTRAN1 PROC ;ASCII码转BCD码 MOV AL,[BX]AND AL,0FHMOV [BX],ALINC BX%MOV AL,[BX]AND AL,0FHMOV [BX],ALRETTRAN1 ENDPMUL10 PROC ;BCD码转压缩BCD码 ADD AL,ALDAA?MOV CL,ALADD AL,ALDAAADD AL,ALDAAADD AL,CLDAAMOV CL,AL]INC BXMOV AL,[BX]ADD AL,CLRETMUL10 ENDPTRAN2 PROC ;压缩BCD码转ASCII码 MOV CL,ALSHR AL,1《SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV [BX],ALINC BXMOV AL,CLAND AL,0FH'OR AL,30HMOV [BX],ALRETTRAN2 ENDPTIME PROC ;延时子程序PUSH CXPUSH AXMOV AX,04FFFH…GOON2: MOV CX,0FFFFHGOON: DEC CXJNZ GOONGOON1:DEC AXCMP AX,0JNE GOON2POP AX'POP CXRETTIME ENDPIOCLR PROC ;清除屏幕子程序MOV AX,0600HMOV CX,0000HMOV DX,184FHMOV BH,07…INT 10HRETIOCLR ENDPIOSET PROC ;设置光标位置MOV DX,0C24HMOV BH,00MOV AH,02INT 10HRETIOSET ENDPCOD ENDSEND START(五)程序调试(1)源代码输入后,无法顺利汇编成OBJ文件,首先检查程序,看是否存在字符输入错误或语法错误,并借助EMU8086 软件(版)检查,经过反复调试终于顺利汇编、连接成功。
(2)程序开始运行后,无法实现清屏幕,正确调用IOCLR清楚屏幕子程序后问题得以解决。
(3)走时不准确,由于本程序是利用计算机软件延时来实现计时的,时间快慢与计算机主频有关,计算机主频为,设置了两重循环,根据主频及延时程序大致计算延时的数值,并根据调试结果相应的更改数值大小。
(4)校时程序,自己编不出能校时的程序,引用网上查找到的一个中断代码,加入到程序中,可以实现时间调校。
(5)报时程序:一开始无从下手,通过分析产生报时的条件及时间,设置了一个FLAG 标志字,很好地解决了报时问题。
(六)运行结果(截图)(1)一般状态(2)半点报时(3)整点报时(七)体会首先,由于程序较长,寄存器运用时要注意不能重复,调用或中断程序时要注意使用PUSH和POP命令保存当前地址,运用堆栈来完成。
在调试过程中,我充分感受到了断点保护的重要性,有时不能想当然,犯经验主义的错误,要切实分析中断程序中是否使用了当前的寄存器,如果有一定要加以保护,否则很可能会出现程序的错误甚至导致系统崩溃。
在调试中就曾经出现过乱码现象,刚开始没有意识到是保护问题出现了差错,经过使用DEBUG程序才找到了问题的所在;还多次出现死机现象,大大影响了工作的效率。