计算机原理与接口技术实验1.docx
《计算机原理与接口技术实验1.docx》由会员分享,可在线阅读,更多相关《计算机原理与接口技术实验1.docx(11页珍藏版)》请在冰豆网上搜索。
![计算机原理与接口技术实验1.docx](https://file1.bdocx.com/fileroot1/2022-12/30/978ea447-b99e-4d6a-91d5-9454ed5dae63/978ea447-b99e-4d6a-91d5-9454ed5dae631.gif)
计算机原理与接口技术实验1
本科实验报告
实验名称:
利用中断方式设计数字时钟
课程名称:
计算机原理与接口技术实验
实验时间:
2014.5.19
任课教师:
实验地点:
信息系统及安全
对抗实验中心
实验教师:
实验类型:
□原理验证
■综合设计
□自主创新
学生姓名:
学号/班级:
组号:
学院:
同组搭档:
专业:
成绩:
实验二利用中断方式设计数字时钟
一、实验目的
1.掌握PC机中断处理系统的基本原理。
2.熟悉定时/计数器8254工作原理及其编程方法。
3.利用实验板上的8254定时器为中断源发中断申请,中断请求用IRQ3(系统总线区的IRQ)。
4.熟悉数码管显示原理,掌握数码管显示接口技术。
5.学习数字时钟原理,实现数字时钟。
6.掌握中断控制器8259管理。
二、实验内容与步骤
1.接线:
三、实验原理
1.PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。
中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。
IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源:
中断源中断类型号中断功能
IRQ008H时钟
IRQ109H键盘
IRQ20AH保留
IRQ3OBH串行口2
IRQ40CH串行口1
IRQ50DH硬盘
IRQ60EH软盘
IRQ70FH并行打印机
8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。
对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:
中断源中断类型号中断功能
IRQ8070H实时时钟
IRQ9071H用户中断
IRQ10072H保留
IRQ11O73H保留
IRQ12074H保留
IRQ13075H协处理器
IRQ14076H硬盘
IRQ15077H保留
实验系统总线区的IRQ接到了3号中断IRQ3上,即进行中断实验时,所用中断类型号为0BH。
2、中断控制器8259可利用系统初始化设定,如不进行新的初始化,只需对8259中断控制器的屏蔽寄存器设定IRQ3为中断允许,其他原有中断允许保持不变。
3、将实验板上的8253的通道,设定为10ms周期信号发生器,该芯片的通道1设定为计数器,其输入来自定时器通道0的输出,利用通道1的计数器输出作为IRQ3中断请求信号。
4、8254定时器的CLK0由实验板上的1MHZ振荡器来提供。
见图1。
5、编写中断服务程序,进行数字钟显示:
XX:
XX
(分:
秒)
其中X为一位数码管。
6、数码管显示接口电路如图2所示。
实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
实验时用PB7~PB0/8255接dp~a/LED数码管,PC3~PC0/8255接S3~S0/LED数码管。
七段数码管的字型代码表如下表:
6.程序流程图如图3
四、实验心得与体会
本次实验主要是在掌握8255的基础上使用定时器8254进行操作,尤其是对应用终端请求方面。
由于计算机原理与接口技术的授课老师在实验之前对本次实验进行了比较详细的讲解,再加上课后我们对相关中断原理及代码的认识、对数码管数字时钟原理的掌握,另外在上课时老师对实验的代码进行了部分书写演示,大大降低了本次实验带给我们本身的难度。
整体上说,本次实验难度很大,流程也较为简单,实验做得速度也较快。
这也提示了我,只要在实验前对实验有充足的了解,做了充分的准备,可以顺利的快速的完成实验。
附:
实验代码
p8259equ20h
p8255equ288h
p8253equ280h;IOY1
datasegment
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;数码管0-9
sec1db0
sec2db0
min1db0
min2db0
mesdb42h
Old_0ADW0,0;原中断向量
Old_8259DB0
dataends
stackssegment
db64dup(0)
stacksends
codesegment
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
cli
moval,00110110b
movdx,p8253+3;计数器0,工作在模式3
outdx,al
movax,2710h
movdx,p8253
outdx,al
moval,ah;先赋高八位再赋低八位
outdx,al
moval,01110110b
movdx,p8253+3;计数器1,工作在模式3
outdx,al
movax,100
movdx,p8253+1
outdx,al
moval,ah;先赋高八位再赋低八位
outdx,al
;设置中断向量表
PUSHES
PUSHBX
MOVAl,0BH;保护原中断向量,0B中断类型号
movah,35h
INT21H;读中断向量表
MOVOld_0A+2,ES;ES为段地址,BX为段偏移地址
MOVOld_0A,BX
POPBX
POPES
pushds
moval,0bh;写新中断向量
movah,25h
movdx,segINT_0A
movds,dx
movdx,offsetINT_0A
int21h
popds
moval,10000000b;对8255进行设置,PB/PC输出
movdx,p8255+3
outdx,al
inal,p8259+1;8259奇地址?
中断向量屏蔽
movold_8259,al;字设置保护原屏蔽字
andal,11110111b;开IRQ3
outp8259,al
sti;开中断
play:
leabx,led;led段码
movdl,sec1;秒个位
movdh,0
movsi,dx
moval,[bx][si]
movdx,p8255+1;点亮led
outdx,al
movah,00000001b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
PUSHCX
MOVCX,00f00h;延时
delay1:
LOOPdelay1
POPCX
movah,00000000b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
movdl,sec2;秒十位
movdh,0
movsi,dx
moval,[bx][si]
movdx,p8255+1;点亮led
outdx,al
movah,00000010b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
PUSHCX
MOVCX,00f00h;延时
delay2:
LOOPdelay2
POPCX
movah,00000000b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
movdl,min1;分个位
movdh,0
movsi,dx
moval,[bx][si]
movdx,p8255+1;点亮led
outdx,al
movah,00000100b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
PUSHCX
MOVCX,00f00h;延时
delay3:
LOOPdelay3
POPCX
movah,00000000b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
movdl,min2;分十位
movdh,0
movsi,dx
moval,[bx][si]
movdx,p8255+1;点亮led
outdx,al
movah,00001000b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
PUSHCX
MOVCX,00f00h;延时
delay4:
LOOPdelay4
POPCX
movah,00000000b
moval,ah
movdx,p8255+2;pc输出选通信号
outdx,al
jmpplay
movah,4ch
int21h
INT_0Aprocnear;中断服务子程序
cmpsec1,9
jzint1
incsec1
jmpexit
int1:
movsec1,0
incsec2
cmpsec2,6
jnzexit
movsec2,0
incmin1
cmpmin1,10
jnzexit
movmin1,0
incmin2
cmpmin2,6
jnzexit
movmin2,0
exit:
moval,20h
out20h,al
iret
INT_0Aendp
codeends
endstart