微机接口实验一并行接口实验
实验报告
课程名称微机原理与接口技术第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开始执行中断服务程序。