《微机接口技术课程设计》
设计报告
题目:实时钟显示与定时控制设计
专业:
班级:
学号:
姓名:
指导老师:
设计时间: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显示对应二进制的灯。
五、实验电路图:
六、流程图:
七、源程序:
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的工作方式一知半解,通过这次课程设计,看书,终于有了比较深刻地了解. 这次课程设计,虽然花费了很多时间,做得效果不是很优秀,但却加深对汇编程序结构,指令,中断,调用等基础知识的认识。在过程中,我深刻体会到汇编语言的难度是比较高的,要求非常严密的逻辑思维能力,中断运用是整个汇编语言的核心,离开了中断,整个汇编大厦将会墙倒楫倾。同时明白在程序的设计时,互相交流学习和讨论,将会开拓视野,启迪灵感。当然还要有坚持不懈的精神!
在此,感谢老师的细心指导,也同样谢谢本组及其他各组同学的无私帮助!