接口实验知识交流.docx
《接口实验知识交流.docx》由会员分享,可在线阅读,更多相关《接口实验知识交流.docx(16页珍藏版)》请在冰豆网上搜索。
![接口实验知识交流.docx](https://file1.bdocx.com/fileroot1/2022-10/20/ed7b257f-46a4-46f4-95ee-184fcb61454d/ed7b257f-46a4-46f4-95ee-184fcb61454d1.gif)
接口实验知识交流
接口实验:
实验一:
可编程并行接口
(一)(8255方式0)
一、实验目的
掌握8255方式0的工作原理及使用方法。
二、实验内容
1、实验电路如原理图,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2、编程从8255C口输入数据,再从A口输出。
三、编程提示
1、8255控制寄存器端口地址28BH
A口的地址288H
C口的地址28AH
参考源程序
;*******************************;
;*8255方式0的C口输入,A口输出*;
;*******************************;
io8255aequ288h
io8255bequ28bh
io8255cequ28ah
codesegment
assumecs:
code
start:
movdx,io8255b;设8255为C口输入,A口输出
moval,8bh
outdx,al
inout:
movdx,io8255c;从C口输入一数据
inal,dx
movdx,io8255a;从A口输出刚才自C口
outdx,al;所输入的数据
movdl,0ffh;判断是否有按键
movah,06h
int21h
jzinout;若无,则继续自C口输入,A口输出
movah,4ch;否则返回
int21h
codeends
endstart
原理图
流程图
实验二“
竞赛抢答器
一、实验目的
1、了解微机化竞赛抢答器的基本原理。
2、进一步学习使用并行接口。
二、实验内容
逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。
在七段数码管上将其组号(0~7)显示出来,并使微机扬声器响一下。
三、编程提示
设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。
根据读取数据可判断其组号。
从键盘上按空格键开始下一轮抢答,按其它键程序退出。
参考源程序:
;********************************
;*本程序为模拟抢答器*
;********************************
datasegment
io8255aequ28ah
io8255bequ28bh
io8255cequ288h
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h;数码表
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8255b;设8255为A口输出,C口输入
movax,89h
outdx,al
movbx,offsetled;使BX指向段码管首址
sss:
movdx,io8255a
inal,dx;从8255的C口输入数据
oral,al;比较是否为0
jesss;若为0,则表明无键按下,转sss
movcl,0ffh;cl作计数器,初值为-1
rr:
shral,1
inccl
jncrr
moval,cl
xlat
movdx,io8255c
outdx,al
movdl,7;响铃ASCII码为07
movah,2
int21h
wai:
movah,1
int21h
cmpal,20h;是否为空格
jneeee;不是,转eee
moval,0;是,关灭灯
movdx,io8255c
outdx,al
jmpsss
eee:
movah,4ch;返回
int21h
codeends
endstart
实验二流程图
实验二原理图
实验四:
可编程定时器/计数器(8254)
一、实验目的
掌握8254的基本工作原理和编程方法。
二、实验内容
1、按原理图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。
三、编程提示
1、8254控制寄存器地址283H
计数器0地址280H
计数器1地址281H
CLK0连接时钟1MHZ
参考源程序
;*******************
;*8254分频*
;*******************
io8253aequ280h
io8253bequ281h
io8253cequ283h
codesegment
assumecs:
code
start:
movdx,io8253c;向8254写控制字
moval,36h;使0通道为工作方式3
outdx,al
movax,1000;写入循环计数初值1000
movdx,io8253a
outdx,al;先写入低字节
moval,ah
outdx,al;后写入高字节
movdx,io8253c
moval,76h;设8254通道1工作方式2
outdx,al
movax,1000;写入循环计数初值1000
movdx,io8253b
outdx,al;先写低字节
moval,ah
outdx,al;后写高字节
movah,4ch;程序退出
int21h
codeends
endstart
实验四流程图
实验四原理图
实验五:
中断
一、实验目的
1、掌握PC机中断处理系统的基本原理。
2、学会编写中断服务程序。
3、掌握扩展中断控制器8259。
二、实验原理与内容
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保留
USB实验板上,固定的接到了3号中断IRQ3上,即进行中断实验时,所用中断类型号为0BH。
2、实验内容
直接用手动产单脉冲作为中断请求信号。
每按一次开关产生一次中断,在屏幕上显示相应的中断号信息:
中断0(IN0):
mess1db'Hello!
Thisisinterrupt*0*!
',0dh,0ah,'$'
中断1(IN1):
mess2db'Hello!
Thisisinterrupt*1*!
',0dh,0ah,'$'
中断2(IN2):
mess3db'Hello!
Thisisinterrupt*2*!
',0dh,0ah,'$'
中断3(IN3):
mess4db'Hello!
Thisisinterrupt*3*!
',0dh,0ah,'$'
中断4(IN4):
mess5db'Hello!
Thisisinterrupt*4*!
',0dh,0ah,'$'
中断5(IN5):
mess6db'Hello!
Thisisinterrupt*5*!
',0dh,0ah,'$'
中断6(IN6):
mess7db'Hello!
Thisisinterrupt*6*!
',0dh,0ah,'$'
中断7(IN7):
mess8db'Hello!
Thisisinterrupt*7*!
',0dh,0ah,'$'
接线:
8259片选接IO地址译码Y6
8259的INTA接VCC
8259的请求(IN0~IN7)分别接单脉冲信号
实验五:
参考源程序
;*****************************************************************
;8259中断查询
;*****************************************************************
I8259_1EQU2B0H;8259的ICW1端口地址
I8259_2EQU2B1H;8259的ICW2端口地址
I8259_3EQU2B1H;8259的ICW3端口地址
I8259_4EQU2B1H;8259的ICW4端口地址
O8259_1EQU2B1H;8259的OCW1端口地址
O8259_2EQU2B0H;8259的OCW2端口地址
O8259_3EQU2B0H;8259的OCW3端口地址
datasegment
mes1db'youcanplayakeyonthekeyboard!
',0dh,0ah,24h
mes2ddmes1
mess1db'Hello!
Thisisinterrupt*0*!
',0dh,0ah,'$'
mess2db'Hello!
Thisisinterrupt*1*!
',0dh,0ah,'$'
mess3db'Hello!
Thisisinterrupt*2*!
',0dh,0ah,'$'
mess4db'Hello!
Thisisinterrupt*3*!
',0dh,0ah,'$'
mess5db'Hello!
Thisisinterrupt*4*!
',0dh,0ah,'$'
mess6db'Hello!
Thisisinterrupt*5*!
',0dh,0ah,'$'
mess7db'Hello!
Thisisinterrupt*6*!
',0dh,0ah,'$'
mess8db'Hello!
Thisisinterrupt*7*!
',0dh,0ah,'$'
dataends
stackssegment
db100dup(?
)
stacksends
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
stacks,ES:
DATA
.386
START:
movax,data
movds,ax
moves,ax
movax,stacks