当前位置:文档之家› 微机原理实习报告---电子时钟(用汇编语言实现)

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

河南农业大学课程设计报告题目:电子时钟显示设计课程:微型计算机原理专业:电子信息工程班级:学生姓名:学号:指导教师:完成日期:机电工程学院目录前言 (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):”总结“纸上得来终觉浅,绝知此事要躬行”,这是本次课程设计我最大的体会。

相关主题