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

时间:2024.4.20

                                                     

河南农业大学

         

题    目:            电子时钟设计

课    程:            微型计算机原理

专    业:            电子信息工程

班    级:            10级电信2

学生姓名:            夏哨兵

学    号:            1004101052

指导教师:            朱娟花

完成日期:          20##年12月31日 

机电工程学院

目  录

前言……………………………………………………………………………………………………….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  segment                                       

 mess1   DB  '   ↖  ^ ( && && )  ^       ↖     (^o^)                   ',0ah,0dh

         DB  '           && &&                         Happy     ^  New ~*   Year               ',0ah,0dh

         DB  '  ****      ****      **    ****                                                  ',0ah,0dh

         DB  ' **  **    **  **   ****   **  **   ************ ASM     ASSIGNMENT ***********   ',0ah,0dh

         DB  '      **  **    **    **        **  *******  ELECTRONIC  CLOCK   **************   ',0ah,0dh

         DB  '     **   **    **    **       **   **Designed by Xia Shao bing*   ',0ah,0dh

         DB  '    **    **    **    **      **    ** Press C or c  to correct the time ******   ',0ah,0dh

         DB  '   **     **    **    **     **     *** Press ESC button  to  exit ************   ',0ah,0dh

         DB  '  **      **    **    **   **         ',0ah,0dh

         DB  ' ** ****   **  **     **  ********    ',0ah,0dh

         DB  ' *******    ****      **  ********    ',0ah,0dh,'$'

     TS  DB  ?,0ah,0dh

         DB  ?,0ah,0dh

         DB  ' ====**======@@======**=====',0ah,0dh

         DB  ' 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 segment

      db 100 dup(?)      ;定义100个字节的堆栈段

stack ends 

;--------------------------------代码段定义阶段------------------------------------------

code  segment

      assume cs:code,ss:stack,ds:data ;确定各个逻辑段的类型

start:

      call clear         ;调用清屏子程序

display: ;时间显示部分

      mov ax, data            ;将DATA的段基地址送到寄存器AX

      mov ds,ax               ;将AX寄存器的内容存到DS中

      mov bx,offset HCQ      ;送HCQ的偏移地址到BX

      mov 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-10

      inc bx

  ;-------------------------------------------------------------------------

      mov al,':'               ;显示分隔符号

      mov [bx],al               ;将寄存器内容存入BX中

      inc bx                     ;寄存器指向的地址+1

  ;---------------------秒的设计---------------------------------

      

      mov ah,2ch                ;秒设定

      int 21h

      mov al,dh                

      mov ah,0                  ;将该位置零

      call C16-10

      inc bx

  ;----------------------------------------------------------------------

      mov al,'$'      ;将字符串的结束位送至显示缓冲区的最后一位

      mov [bx],al

   ;------------------------------------------------------------------------

      push bx         ;修改时间显示的地方

                    

      mov ah,2       ;置光标位置 ,调用功能号AH=2

      mov bh,0        ;置显示模式

      mov dh,17       ; DH跟DL分别为行号与列号,并入栈保护BX

      mov dl,50       ;显示输出在第17行

      int 10h         ;显示输出在51列

      pop bx

      lea dx,HCQ      ;送HCQ偏移地址到DX,并调用DOS显示功能,功能号为9

      mov ah,9        ;调用DOS 9号功能,显示字符串

      int 21h

      push  bx    

      mov ah,2      ;置光标位置调用DOS的功能 ,AH=2

      mov bh,0      ;置显示以下模式

      mov dh,1       ;修改前面附加的内容的显示位置

      mov dl,0

      int 10h

    

      lea dx,mess1      ;取mess1的有效地址赋给DX

      mov ah,9         ;调用DOS 9号功能,显示字符串

      int 21h

      pop bx           ;BX寄存器出栈

      push  bx         ;PUSH BX

      mov ah,2         ;置光标位置

      mov bh,0         ;置显示模式

      mov dh,17        ;定位在17行

      mov dl,35        ;定位在35列

      int 10h

      pop bx

      lea dx,mess2        ;取mess1的有效地址赋给DX

      mov ah,9

      int 21h

       

 ;-----------------------------

      mov  ah,1              ;调用键盘I/O中断功能号1,获取键值到AL

      int  16h 

     

      cmp  al,'c'            ;是c键,转到时间修改程序

      je   Cor

      cmp  al,'C'            ;是C键,转到时间修改程序

      je   Cor

      cmp  al,1bh

      jz   quit            ;是ESC键,退出程序

      jmp  display     

quit:

     mov ah,4ch              ;程序终止功能号

     int 21h

     ret

Cor: call correct           ;调用时间修改子程序

;-------------------------------

C16-10  PROC NEAR

        PUSH CX

        MOV AH,0               ;16位二进制数转换为ASCII码

        MOV CX,10D            ;基数10

        DIV CL                ;用除10取余的方法转换为BCD码(二进制码)

        ADD AX,3030H          ;BCD码转换为ASCII码的代码

        MOV [BX],AL           ;此时将低八位的AL加载到BX中,[BX]指的是寄存器BX指向的内存单元

        INC BX                ;BX指向的存储单元加一

        MOV [BX],AH

        POP CX

        RET

      C16-10  ENDP

;-------------------------------------------

clear proc near

      push  ax     ;入栈保护现场

      push  bx

      push  cx

      push  dx

      mov ax,0600h  ;ah=06(滚动)al=00(全屏空白)

      mov bh,2eh    ;设置背景颜色(2)和前景颜色(e)

      sub cx,cx     ;将寄存器清零

      mov dx,5f5fh  ;设备重定向 子功能号功能描述

      int 10h

      pop dx        ;出栈恢复现场

      pop cx

      pop bx

      pop ax

      ret

clear endp

;----------------------------

correct proc  NEAR   ;时间修改子程序

  call input          ;调用键盘输入子程序输入数据

  mov ch,hor

  mov cl,min

  mov dh,sec

  and dl,0h

  mov ah,2dh          ;调用DOS功能调用系统时间并修改系统时间

  int 21h

  jmp start

  ret

  correct endp

;-------------------------------------------

input proc  NEAR    ;键盘输入子程序

 push ax            ;入栈保护数据

 push bx

 push cx

 push dx

 pushf

mov dx,offset TS   ;显示修改时间的格式提示

mov ah,09h          ;显示字符串,提示的内容

int 21h             ;调用DOS功能

mov dx,OFFSET HCQ  ;数据缓冲区的数据输入

mov ah,0ah          ;带缓存的键盘输入(字符串)

int 21h

and dx,0h          ;将寄存器置零

lea bx,HCQ         ;向BX装入有效地址

inc bx             ;地址+1

inc bx             ;跳过‘:’

mov dh,[bx]        ;将[BX]的内容储存到寄存器DH中

sub dh,30h         ;将得到的ASCII码转化为16进制的数据

inc bx             ;地址加1

mov 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 bx

inc bx

mov dh,[bx]       ;将ASCII码转换为二进制数

sub dh,30h

inc bx

mov dl,[bx]

sub dl,30h

mov cl,10

mov al,dh

mul cl              ;乘以10

add al,dl

mov cl,al           

mov min,al         

inc bx

inc bx

mov dh,[bx]    ;将ASCII码转换为二进制数

sub dh,30h

inc bx

mov dl,[bx]

sub dl,30h

mov cl,10

mov al,dh

mul cl

add al,dl

mov dh,al

mov sec,al

popf                    ;出栈恢复数据

pop dx 

pop cx

pop bx

pop ax

ret

input endp

;----------------------------

code  ends

      end start

二、 实验结果

     点击运行后,出现运行的结果如下:

当按下‘c’或‘C’时显示提示符“please input the new time(hh:mm:ss):”

总结

“纸上得来终觉浅,绝知此事要躬行”,这是本次课程设计我最大的体会。刚开始时,看着老师给的参考材料,心里想“这个课程设计不是很难的事情嘛,把这几个子程序堆一块不就完了”,可是真正做起来时,才发现事情远非想的那么简单。从上机软件的选取,到课程设计报告的最终完成,我们经历了很多曲折,也收获了很多,下面具体阐述一下。

一、软件的选取

古语云:工欲善其事必先利其器。汇编语言上机软件和流程图绘制软件的选取对此次课程设计非常重要。经过对比我们最终选取了EMU8086 最终也能熟练操作这款软件。这是此次设计较大的收获。

二、图案的设计  

    为了能得到一个比较漂亮的界面显示,我们在图案设计上花了不少功夫。很多次设计的图案很漂亮,可是搬到程序里面运行时却是一堆乱码,让我们很沮丧...还有要把秒表的显示正好调到图案正中央,我们也经过了多次调试。在这个过程中,我们学会了耐心,去除浮躁,平心静气的把程序一遍遍的修改、调试,臻于完美。

三、 程序调试

    程序调试前,我们检查了好几遍。可是调试时还是错误百出。尤其是“;”的使用,一定要区分英文输入的分号和中文分号的区别,还有字符串结束时一定要加‘$’,否则会出现乱码。这些都是调试中发现的问题,只有注意细节,细心,才能顺利完成任务。

通过本次课程设计,我加深了对课汇编语言的理解,同时熟练掌握了汇编语言的编辑、调试软件。在以后的学习生活中还要继续保持严谨认真的科学态度,保持不断尝试和探索的耐心,保持勇于解决问题的决心。不断地向老师、同学们学习、交流,分享吸取他们的经验,更好的提高自己。

参考文献

《微型计算机原理》P150~158、P166~171 张荣祥  中国电力出版社

《微型计算机原理与接口技术(第二版)》 冯博琴 吴宁主编 清华大学出版社

更多相关推荐:
微电子学-实习报告

实习报告一、实习目的、要求:1、实习目的:培养应用型人才基地,要培养德才兼备的大学生,不仅需要通识教育和专业教育,更要理论和实践相结合的正规化培训。实习是大学生必须参与的一项实践教学环节。是学生熟悉多晶硅、单晶…

微电子制造工程实习报告(20xx)

生产实习报告学院专业学生姓名学号20xx12生产实习报告生产实习报告今年夏天我们20xx级微电子制造工程专业开展了生产实习生产实习是微电子制造工程专业学生必修的综合性实践课程是实践教学的主要环节我和大部分同学一...

微电子制造工程专业生产实习报告

编号暑期生产实习报告学院机电工程学院专业微电子制造工程学生姓名李炳伟学号080015021420xx年08月26日生产实习报告20xx年大三暑期的7月正值夏日高温炎热的季节我们专业根据学校的安排组织了学生进行了...

微电子认知实训报告

实训报告一培养应用型人才的目标培养德智体全面发展的人才学生应具有强烈的事业心高度的社会责任感辨证唯物主义的世界观必须保持心理健康心态平和乐观积极上进保持真诚的虚心执着的专心不懈的恒心成为有哲理有品位有高尚品格的...

微电子专业硕士牛人实习总结报告

微电子专业硕士牛人实习总结报告随着学期期末的到来我们三个月的实习也告一段落了这次实习着实应该感谢Karry给了我们这样一个难能可贵的机会在这三个月的时间里面我从实际的设计中学到了很多关于集成电路设计的东西其中很...

微电子实习报告

实习报告专业微电子学年级20xx级姓名xx学号xxxxxxxxxxxxx微电子学是研究在固体材料上构成的微小型化电路电路及系统的电子学分支微电子专业主要研究电子或粒子在固体材料中的运动规律及其应用并利用它来实现...

11级微电子实习报告

本科毕业实习报告学院物理学院专业微电子学学生姓名88888学号888888年级20xx教务处制表二一五年四月二日微电子实习报告在学院老师和辅导员的带领下我们在20xx年4月1日至4月2日到四川省乐山市进行了为期...

微电子学专业毕业实习大纲

重庆国际半导体学院微电子学本科专业毕业实习大纲重庆国际半导体学院微电子学本科专业的毕业实习安排在四年级下期毕业实习既是学生理论联系的一个重要实践环节也是培养学生实际工作能力动手能力分析和解决问题能力的重要环节一...

桂电机电微电子制造工程实习报告

暑期生产实习报告学院机电工程学院专业微电子制造工程学生姓名学号20xx年07月生产实习报告组别第二组姓名学号一实习目的与任务生产实习是微电子制造工程专业学生必修的综合性实践课程是实践教学的主要环节之一通过生产实...

微电子见习报告

学院电子电气工程学院专业姓名学号级微电子制造工程10XXXXXXXXXXXXXXX一微电子专业概述微电子专业是以集成电路设计制造与应用为代表的微电子学是现代发展最迅速的高科技应用性学科之一该专业主要是培养掌握集...

微电子实习

微电子实习任务书一实习性质及目的通过微电子实习教学使学生对电工和电子的一些相关知识有感性认识加深电类有关课程的理论知识并在生产实践中激发学生动手动脑勇于创新的积极性培养学生严谨认真踏实勤奋的学习精神和工作作风为...

微电子制造工程生产实习报告格式

微电子制造工程生产实习报告指导老师陈小勇学生丁超学号1100150307桂林电子科技大学机电工程学院参考目录1实习目的及意义11实训目的12实训意义2实习内容3实习过程中遇到的问题及解决方法4实习收获总结5参考...

微电子实习报告(22篇)