微机接口实验一并行接口实验

微机接口实验一并行接口实验
微机接口实验一并行接口实验

实验报告

课程名称微机原理与接口技术第7 次实验

一、实验内容:并行接口实验

1.简单接口:以245作为输入接口,273作为输出接口,分别接拨动开关,和发光二极管。编程序序实现发光二

极管显示开关状态,1亮,0灭。

2.改用8255A口代替245,B口代替273。8255A、B口均工作于方式0,编程序实现上述功能。

3.8255A改工作方式1,8255PC4接单脉冲按键开关,PC3接8259INT0。编制程序实现:INT0中断服务程序实

现2功能。

(修改拨动开关后,发光二极管显示不变,按单脉冲开

关后,显示新开关状态)

4.在上次设计电路图上增加8255芯片,要求地址:A000H 起

二、实验报告:程序清单,程序说明;电路原理图。

三、程序代码

1、程序如下:

CS273 equ 09000h 初始化芯片的地址

CS245 equ 08000h

code segment

assume cs:code

start proc near

Again1:

mov dx, CS245 从cs245读入数据

in al, dx

mov dx, CS273 从cs273输出数据

out dx,al

jmp Again1

code ends

end start

程序比较简单,只要初始化芯片的地址,然后在实验板上按照程序写的地址正确连线就可以了。

2、程序如下:

mode equ 082h ; 方式0,PA,PC输出,PB输入

PortA equ 8000h ; Port A

PortB equ 8001h ; Port B

PortC equ 8002h ; Port C

CAddr equ 8003h ; 控制字地址

code segment

assume cs:code

start proc near

Start:

mov al, mode

mov dx, CAddr

out dx, al ; 输出控制字

OUTB:

mov dx, PortB

in al, dx ; 读入PortB

mov dx, PortA

out dx, al ; 输出到PortA

JMP OUTB

mov ah, 200

call delay

jmp Start

endp

delay proc near

push ax

mov al,0

push cx

mov cx,ax

loop $

pop cx

pop ax

ret

delay endp

code ends

end start

与1有相同之处,步骤可概括为:初始化芯片地址——实验板上连线——从指定位置读入数据——从指定位置输出数据——不断重复。前两题的程序结构基本一致,不同的只是芯片的部分。

3、程序如下:

mode equ 10110100b ; 方式0,PA,PC输出,PB输入

PortA equ 8000h ; Port A

PortB equ 8001h ; Port B

PortC equ 8002h ; Port C

CAddr equ 8003h ; 控制字地址

ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4

ICW2 equ 00100000b ; 中断号为20H

ICW4 equ 00000001b ; 工作在8086/88 方式

OCW1 equ 11111110b ; 只响应INT0 中断,也响应INT1中断

CS8259A equ 0A000h ; 8259地址

CS8259B equ 0A001h

data segment

CNT dw 0

CNNT dw 0

sign db 0b

data ends

code segment

assume cs:code

IInit proc

mov dx, CS8259A

mov al, ICW1

out dx, al

mov dx, CS8259B

mov al, ICW2

out dx, al

mov al, ICW4

out dx, al

mov al, OCW1

out dx, al

ret

IInit endp

IEnter proc near

push ax

push dx

mov dx, PortA

in al, dx

mov dx, PortB

out dx, al

mov dx, CS8259A

mov al, 20h ; 中断服务程序结束指令

out dx, al

pop dx

pop ax

iret

IEnter endp

start proc near

Start:

mov al, mode

mov dx, CAddr

out dx, al ; 输出控制字

mov al,00001001b

out dx, al

cli

mov ax, 0

mov ds, ax

mov bx, 4*ICW2 ; 中断号

mov ax, code

shl ax, 4 ; x 16

add ax, offset IEnter ; 中断入口地址(段地址为0)

mov [bx], ax

mov ax, 0

inc bx

inc bx

mov [bx], ax ; 代码段地址为0

call IInit

mov ax, data

mov ds, ax

sti

OUTB:

JMP OUTB

jmp Start

endp

code ends

end start

这道题在使用8255的基础之上,使用到了中断程序。下面根据截到的时序图来分析:预先说明,实验中各个信号与实验台上芯片引脚的对应关系如下:

La3 STB

La2 INT0

La1 IBF

另,这里STB其实是STB反,因为竖线不太好画,就没画。

图表1未按单脉冲开关

如图表1中所示,在单脉冲开关没有按下的时候,程序处于等待中断的无限循环中,STB、IBF、INT0都处于初始化的状态没有变化。由于stb端口信号(LA3)为高电平,因此IBF 信号(LA1)一直为低电平,此时也没有中断请求,因此INT0(LA2)也是低电平。

图表2按下单脉冲开关

如图表2中,单脉冲开关按下以后,STB端口(LA3)先被置为低电平,IBF(LA1)随之被置为了高电平,这一过程由于逻辑分析仪扫描范围有限,没有观察到变化的过程,但是变化的结果可以从竖线图像中M1左端的部分观察到。

随后,单脉冲开关松开,STB端口(LA3)获得了上升沿信号,把数据存入锁存器,在后一个时刻,把INT0信号(LA2)置高,向CPU发出中断请求。

图表3中断结束

中断程序被响应以后,IN0(LA2)恢复低电平,此时由于STB恢复高电位,IBF在READ信号的上升沿被置为低电位,CPU开始执行中断服务程序。

相关主题
相关文档
最新文档