《微机接口技术课程设计》

设计报告

题目:实时钟显示与定时控制设计

专业:

班级:

学号:

姓名:

指导老师:

设计时间:2013 年 6 月19日到 20xx年 6月 25 号

1.设计任务说明

通过本课程设计,综合应用接口技术各汇编语言程序设计技术,在PC

机上实现时钟显示、定时和响铃,以提高接口、汇编技术的应用能力。

2. 总体设计

(1). 利用BIOS 和DOS 的系统功能调用,能将计算机系统的日期和时间读

出并显示出来。

(2). 用“时:分:秒” (都是两位)的形式连续显示系统时间。

(3).利用定时接口芯片每秒钟响一次铃。

(4). 提示输入定时时间(即定时秒数),每经历指定的秒数,则演奏乐

曲。

3. 详细设计

模块描述:

⑴.利用定时中断实现时钟显示。

当产生定时中断时(由8259A的IRQ0引起),CPU转入BIOS的08H

号中断处理程序,在该中断处理程序中是一条软中断指令“INT 1CH”,而在该软中断程序中只有一条IRET指令,这样系统每秒钟产生18.2次定时中断,调用18.2次INT 1CH,这为开发者提供了一个编写与时间有关的程序的软中断接口,上例的定时响铃就是借用这个软接口实现的。其具体操作如下:

①在时钟显示程序,截获1CH号中断,在新的1CH中断处理程序安

排一个计数器,记录调用的次数,每18次(约一秒钟)显示一次当前时间。

②利用BOIS的1AH号中断的0号功能,读取当前计时器的数值:

入口参数:AH=02H

执行: INT 1AH

出口参数:AL=午夜信号,CH=时的BCD码,CL=分的BCD码,DH=秒的BCD码

③利用BIOS的10H号中断的13H号功能,实现在屏幕的右上角显示时间。

④在主程序中要保存原1CH号中断的中断向量,并设置新的时钟显示中断程序的中断向量,然后作其它工作,如调用BIOS的键盘中断INT 16H的0号功能,等待用户按键盘,也就是等待中断的发生,并在屏幕右上角显示时间??,当用户按键后,主程序工作完成后,恢复原1CH中断向量。 ⑵.在定时中断发生时同时调用发声程序实现响铃。

发声程序用定时器驱动扬声器方式,这是直接利用8253/8254定时器产生声音的一种方法。

定时器2的GATE2与8255A的端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3(方波)下工作。定时器2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连,如下图所示。当PB1=1时,允许OUT2输出的频率信号到达扬声器电路。

微机原理与接口技术课程设计报告

定时器驱动扬声器方式发声原理

定时器2输出的方波频率取决与初始化定时器时提供的计数初值,即对CLK2端的计数脉信号的分频系数。加在CLK2端上的频率为1193100赫之=12348CH赫之,送入定时器2的计数初值为:12348CH÷发声频率。

流程图:

主程序流程图:

微机原理与接口技术课程设计报告

中断程序:

微机原理与接口技术课程设计报告
微机原理与接口技术课程设计报告

4.程序及说明

count_val=18 ;间隔数(约为一秒)

dpage=0 ;显示页码数

row=0 ;显示行号

column=70-buff_len ;显示开始列号

column1=70-buff_len1 ;显示日期的开始列号

color=07h ;字体颜色

.286

.model small

.code ;为方便程序驻留内存,把中断处理程序放在主程序之前 ;下面是1CH中断处理程序使用的变量

count dw count_val ;“滴答”间隔计数器

hhhh db ?,?,”:” ;小时的定义

mmmm db ?,?,”:” ;分的定义

ssss db ?,? ;秒的定义

buff_len=$-offset hhhh ;显示时间字长

xxxx db ?,? ;年高两位的定义

yyyy db ?,?,”\” ;年低两位的定义

zzzz db ?,?,”\” ;月定义

rrrr db ?,? ;日定义

buff_len1=$-offset xxxx ;显示日期字长

cursor dw ? ;保存当前光标位置

;1CH号中断处理程序代码

new1ch:

cmp cs:count,0 ;是否到显示时候

jz next ;判断是否转到next

dec cs:count ;否则间隔计数器减1

iret ;中断返回

next: ;显示系统时间日期子程序

mov cs:count,count_val ;间隔计数器重置初值18

sti ;开中断

pusha ;保护现场

push ds

push es

push cs ;填写DS和ES

pop ds

push ds

pop es

call get_t ;调用读取系统时间子程序 mov bh,dpage ;BX<-页号

mov ah,3 ;取原光标位置

int 10h

mov cursor,dx ;保存原光标位置

mov bp,offset hhhh ;bp<-时间信息串首地址 mov bh,dpage

mov dh,row

mov dl,column

mov bl,color

mov cx,buff_len

mov al,0 ;al<-显示模式,移动光标 mov ah,13h

int 10h

mov bh,dpage

mov dx,cursor

mov ah,2

int 10h

call get_m

mov bh,dpage

mov ah,3

int 10h

mov cursor,dx

mov bp,offset xxxx

mov bh,dpage

mov dh,row+1

mov dl,column1

mov bl,color

mov cx,buff_len1

mov al,0

mov ah,13h

int 10h

mov bh,dpage

mov dx,cursor

mov ah,2

int 10h

pop es

pop ds

popa

iret

get_t proc

mov ah,2

int 1ah

mov al,ch

call ttasc

xchg ah,al ;显示时钟 ;恢复光标原位置 ;调用读取系统日期中断程序 ;bp<-日期信息串首地址 ;恢复现场 ;中断返回 ;取当前系统时间过程 al<-ch中的小时数 ;调用转换压缩BCD码为ASCLL码子程序;高低位ASCLL码互换 ;取时间信息;

mov word ptr hhhh,ax ;保存小时数

mov al,cl ;al<-cl中的分钟数 call ttasc

xchg ah,al

mov word ptr mmmm,ax ;保存分钟数

mov al,dh ;al<-dh中的秒数 call ttasc

xchg ah,al

mov word ptr ssss,ax ;保存秒数

ret

get_t endp

get_m proc ;取当前系统日期过程 pusha ;保护现场

mov ah,2ah ;取系统日期

int 21h

mov ax,cx

mov cl,10d

div cl

mov bh,ah

xor ah,ah

div cl

mov bl,ah

add bx,3030h

mov word ptr yyyy,bx ;保存年的低两位数 xor ah,ah

div cl

mov bh,ah

xor ah,ah

div cl

mov bl,ah

add bx,3030h

mov word ptr xxxx,bx ;保存年的高两位数 xor ax,ax

xor bx,bx

mov al,dh

cbw

call charge

mov word ptr zzzz,ax ;保存月数

xor ax,ax

mov al,dl

cbw

call charge

mov word ptr rrrr,ax ;保存日数

popa

ret

get_m endp

charge proc ;二进制转化为十进制过程

push cx

push dx

mov cl,10d

div cl

add al,30h

add ah,30h ;转化为十进制

pop dx

pop cx

ret

charge endp

ttasc proc ;压缩BCD码为ASCLL码子程序 push cx

mov ah,al

and al,0fh

mov cl,4

shr ah,cl ;高四位移到低位四位

add ax,3030h ;转为ASCLL码

pop cx

ret

ttasc endp

;初始化代码和变量

old1ch dd ?

start:

push cs

pop ds ;填写DS

mov ax,351ch ;取1CH号中断向量

int 21h

mov word ptr old1ch,bx ;保存向量偏移地址

mov word ptr old1ch+2,es ;保存向量段地址

mov dx,offset new1ch ;dx<-新时钟中断入口偏移地址 mov ax,251ch ;新中断段地址已在DS中 int 21h ;设置新的1CH号中断向量 mov ah,0 ;等待按键

int 16h

lds dx,old1ch

mov ax,251ch ;恢复原中断向量

int 21h

mov ah,4ch

int 21h

end start

5.系统测试

1.测试方法

首先在命令提示符下编译运行源程序,显示出时间和日期,然后在

.asm文件里面修改显示位置,显示顺序部分程序,调整秒数显示的频率,然后编译运行,观察更改过后的运行结果。

2.测试结果

微机原理与接口技术课程设计报告

图 1

微机原理与接口技术课程设计报告

图2

图1为初始程序运行结果

图2表示经过部分修改过后的运行结果

运行结果如上图所示,第二个图是在第一个图的源程序上经过改变列号,改变时间和日期的首地址和增加了一个秒的变量,保存了两个秒数的变化,使其结果变成图2

6.总结与体会

通过这次的综合设计性实验,让我更加清楚的了解了8259A在PC机中的工作情况,基本掌握了软中断服务程序的结构及编写方法。同时学习并深刻了结了PC机发声的原理和方式,掌握了PC机发声程序和延时程序的编写方法,进一步了结了8255A和8253在PC机中的应用。在本课程设计中,学会了应用接口技术各汇编语言程序设计技术,在PC机上实现时钟显示、定时和响铃,以提高接口、汇编技术的应用能力。

在编程方面,通过这次实验,让我加深了对DOS和BIOS系统功能指令的理解,把以前没记住的指令都加深了印象,巩固了汇编语言编程的基础知识。

在独立完成实验过程还有写困难,本次试验在同学的帮助下完成了实验编程,希望以后在这方面有更大的进步;还有部分指令在使用过程中理解有困难,在学习过程多我会再多花些时间去理解。

第二篇:微机原理与接口技术课程设计 报告1 2400字

微机原理与接口技术

课程设计报告书

设计题目:LCD与LED对应显示(进制转换) 专业班级:计科091,092 成员姓名、学号:申蓉蓉 2009010312

刘利仁 2009010217

吕巧珍 2009010206

方涛业 2009010310

张行行 2009010322

王 纯 2009010314

周利亚 2009010227

指导教师:付俊辉 设计日期:2012/5/26

一、 实验目的:

1.学习并掌握8259,8255,8253各自的工作原理,工作方式及其应用编程。

2.掌握各芯片在系统中的典型接法。

二、实验设备: TDN-MD实验系统一台,排线,导线若干。

三、实验原理:

本实验用到三部分电路:电平开关控制电路、8255控制发光二极管电路和8255控制数码管电路。8253是计算机系统中经常使用的可编程定时器/计数器,其内部有三个相互独立的计数器,分别称为T0,T1,T2,8253有多种工作方式。本实验用T0,工作方式3为方波方式。当8253计数器设好初值后,计数器递减计数,当计数次数到时,触发8259A的IRQ0中断。中断类型码的高5位由8259寄存器ICW2决定,低3位由中断源IRx的编码自动填入。

不同中断类型码的中断向量在表内有对应的偏移地址,其计算方法是:中断类型码*4。中断类型由8259通过数据总线送给8086,8086内部电路会将该类型值自动乘4,而后赋给指令指针,从而转向中断向量表的相应单元取得中断入口地址,之后就进入中断服务程序。

四、实验内容及步骤:

1.实验内容:

8255A的A口做为输出口,与8个发光二极管相连,B口做为输出口,与数码管相连,C0口做为输入口,与逻辑电平开关K0相连。系统中,8253的计数器0输出线与8259A的IRQ0中断请求线相连,作为实时钟中断信号。编写程序,使得LCD屏幕上出现的数字“0~9”与 数码管

显示的数字一样,且使发光二极管LED显示对应的二进制数。

2.步骤: (1)按图连接。

(2)输入程序并检查无误,经汇编,连接后装入

系统。

(3)运行程序,并拨动开关键K0,观察每次拨动

时LCD屏幕上数字和数码管上显示的数字一样,且LED显示对应二进制的灯。

五、实验电路图:

微机原理与接口技术课程设计报告1
微机原理与接口技术课程设计报告1

六、流程图:

微机原理与接口技术课程设计报告1

七、源程序:

DATA SEGMENT

LED DB FFH,FEH,FDH,FCH,FBH,FAH,F9H,F8H,F7H,F6H TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DATA ENDS

STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV SI,LED

MOV DI,TAB MOV AX,3000H MOV [0020],AX

MOV AX,0000H MOV [0022],AX MOV AL,FEH

OUT 21H,AL MOV AL,15H OUT 43H,AL

MOV AL,FFH OUT 40H,AL MOV AL,81H

OUT 63H,AL MOV DL,30H A1: STI

JMP A1 IRQO: MOV AH,01H MOV AL,DL

CMP AL,3AH JNZ A2 MOV AL,30H

MOV SI,LED MOV DI,TAB A2: PUSH AX

MOV AX,0001H INT 10H POP AX

INT 10H PUSH AX MOV AL,[SI]

OUT 60H,AL MOV AL,[DI] OUT 61H,AL POP AX PUSH AX IN AL,62H MOV BL,AL POP AX CMP BL,00H JNZ A3 INC AX INC SI INC DI A3: MOV DL,AL CALL DALLY MOV AL,20H OUT 20H,AL IRET DALLY: PUSH AX MOV CX,0100H A4: MOV AX,0560H A5: DEC AX JNZ A5 LOOP A4 POP AX RET CODE ENDS END START

八、调试结果:

运行程序后,当LCD屏幕上依次出现数字“0~9”, 数

码管显示对应的数字,且LED亮的灯显示对应的二进制。如果拨动K0开关至1,则LED数字,数码管数字和LCD亮的灯都不变,若开关至0,则观察到LCD数字和数码管数字,LED亮的灯对应着变化。

九、心得体会:

短短的一周半就这么过去了,通过这次短暂的课程设计,不仅使我加深了对接口程序设计的认识,对接口各部件的工作原理也有了进一步的了解,也增强了分析故障的能力.上课的时候还对8255,8259,8253的工作方式一知半解,通过这次课程设计,看书,终于有了比较深刻地了解. 这次课程设计,虽然花费了很多时间,做得效果不是很优秀,但却加深对汇编程序结构,指令,中断,调用等基础知识的认识。在过程中,我深刻体会到汇编语言的难度是比较高的,要求非常严密的逻辑思维能力,中断运用是整个汇编语言的核心,离开了中断,整个汇编大厦将会墙倒楫倾。同时明白在程序的设计时,互相交流学习和讨论,将会开拓视野,启迪灵感。当然还要有坚持不懈的精神!

在此,感谢老师的细心指导,也同样谢谢本组及其他各组同学的无私帮助!

类似文章