【汇编语言与微机原理】 期末半开卷复习整理(下)

输入输出

8086采用I/O端口独立编址
in AL/AX,imm8/DX
out imm8/DX,AL/AX
大于0FFH的端口只能存在DX
读外设(查询)

status:in al,dx
	test al,80H;//测标志位
	jz status
	mov dx,100h
	in al,dx

写外设(查询)

status:mov dx,102H
	in al,dx
	test al,80H
	jnz status;//D7=1,忙,继续查
	mov dx,100h
	mov al,char
	out dx,al

74LS273:锁存。输出锁存寄存器。
74LS244:缓冲。输入缓冲,输出锁存。
A 0 A_0 A0=0, R D ‾ = 1 \overline{RD}=1 RD=1,读IRR、ISR、查询自
A 0 A_0 A0=1, R D ‾ = 0 \overline{RD}=0 RD=0,读IMR
输入时序
在这里插入图片描述
输出时序
在这里插入图片描述

选通信号Ready将置1,状态口连在 D 7 D_7 D7上,选通信号置Ready

中断与8259

传送指令装入中断向量。

mov ax,0
mov es,ax
mov bx,N*4;//N为中断类型号
mov ax,offset intproc
mov es:[bx],ax
mov ax,seg intporc
mov es:[bx+2],ax
sti

内部中断:除法错误、溢出、指令单步、断点。
外部中断:NMI、INTR(高电平有效)。NMI类型号为2,边沿触发。
关中断情况:系统复位、中断被响应、CLI。

一条指令的结束是相应NMI的必要条件
普通屏蔽:IMR的 D i D_i Di为1,对应 I R i IR_i IRi屏蔽。
特殊屏蔽: I R i IR_i IRi被屏蔽时, I S R i ISR_i ISRi为0
中断结束: I S R ISR ISR某位为0
EOI:非自动中断结束,全嵌套清楚优先级最高位。
特殊:配合循环优先权,发EOI清楚ISR对应位。
缓冲:多片级联。非缓冲:单片。
IRR中断请求寄存器,1表示对应位有请求,响应后复位。
IMR中断屏蔽寄存器,0表示允许中断
ISR中断服务寄存器,1表示在被服务
PR优先级判别。
优先级固定方式:从高到低为 I R 0 IR_0 IR0, I R 1 IR_1 IR1,… I R 7 IR_7 IR7,完全嵌套
自动循环:初始 I R 0 , . . . , I R 7 IR_0,...,IR_7 IR0,...,IR7, I R i IR_i IRi被服务后, I R i IR_i IRi最低, I R i + 1 m o d    8 IR_{i+1\mod 8} IRi+1mod8最高
特殊循环:可设置初始最低优先级
普通全嵌套:禁止同级/低级优先权中断
特殊全嵌套:禁止低级中断,在主片。
S P ‾ / E N ‾ \overline{SP}/\overline{EN} SP/EN级联方式:主片 S P ‾ = 1 \overline {SP}=1 SP=1,从片 S P ‾ = 0 \overline{SP}=0 SP=0
I R 0 . . . I R 7 IR_0...IR_7 IR0...IR7中断请求。
C A S 0 . . . C A S 7 CAS_0...CAS_7 CAS0...CAS7级联引脚双相
C A S 2 . . . C A S 0 CAS_2...CAS_0 CAS2...CAS0:主片输出、从片输入、级联信号
例如
A 0 = 0 , W R ‾ = 0 A_0=0,\overline{WR}=0 A0=0,WR=0,写 I C W 1 , O C W 2 , O C W 3 ICW_1,OCW_2,OCW_3 ICW1,OCW2,OCW3.
A 0 = 1 , W R ‾ = 0 A_0=1,\overline{WR}=0 A0=1,WR=0,写 I C W 2 − I C W 4 , O C W 1 ICW_2-ICW_4,OCW_1 ICW2ICW4,OCW1
O C W 1 OCW_1 OCW1:中断屏蔽字寄存器,写

in al,81H
and al,11111101B;IR1开放中断
out 81H,al

O C W 2 OCW_2 OCW2:优先级循环方式和发中断结束命令
EOI=1发中断结束,清除相应位
O C W 3 OCW_3 OCW3:查询字

mov al,0AH;读IRR的OCW3
out 20H,al
in al,20H;读IRR到AL

中断服务子程序整体流程:保护现场、开中断、中断处理、关中断、恢复现场、中断返回。

intproc proc far
	push ax
	push ds
	sti
	mov ax,seg done
	mov ds,ax
	in al,0a0h;读开关状态
	out 0c0h,al;输出控制led
	cmp al,0ffh
	jnz exit
	int al,82h;中断屏蔽
	or al,00000100B
	out 82h,al
exit:
	cli
	mov al,20H;EOI
	out 80H,al
	pop ds
	pop ax
	iret
intproc endp

8255

D 0 − D 7 D_0-D_7 D0D7数据线, A 0 − A 1 A_0-A_1 A0A1地址, C S ‾ \overline{CS} CS片选, P A 0 − P A 7 PA_0-PA_7 PA0PA7, P B 0 − P B 7 PB_0-PB_7 PB0PB7, P C 0 − P C 7 PC_0-PC_7 PC0PC7
A组:A口、C口高4位。B组:B口、C口低4位。
方式0:无条件/查询。
方式1/2:查询、中断
输入时,8255为数据缓冲。输出时,8255为数据锁存。可知已准备好数据。
方式1输入: S T B ‾ \overline{STB} STB选通(外设准备好数据,将数据锁存、输入)
IBF:输入缓冲区满则,输出
I N T R A INTR_A INTRA:中断请求,输出。
方式1输出: O B F ‾ \overline{OBF} OBF输入缓冲器满,可取走。
A C K ‾ \overline{ACK} ACK:外设响应,输入,低有效。
I N T R INTR INTR:中断请求,输出。
方式1输出时 O B F ‾ \overline{OBF} OBF有效时输出,外设接受后回送 A C K ‾ \overline{ACK} ACK
方式2时外设提供 A C K ‾ \overline{ACK} ACK后输出数据

短口 P C i PC_i PCi 输入 输出
A端口 P C 7 PC_7 PC7 O B F ‾ \overline{OBF} OBF
A端口 P C 6 PC_6 PC6 A C K A ‾ / I N T E A \overline{ACK_A}/INTE_A ACKA/INTEA
A端口 P C 5 PC_5 PC5 I B F A IBF_A IBFA
A端口 P C 4 PC_4 PC4 S T B A ‾ / I N T E A \overline{STB_A}/INTE_A STBA/INTEA
A端口 P C 3 PC_3 PC3 I N T R A INTR_A INTRA I N T R A INTR_A INTRA
B端口 P C 2 PC_2 PC2 S T B B ‾ / I N T E B \overline{STB_B}/INTE_B STBB/INTEB A C K B ‾ / I N T E B \overline{ACK_B}/INTE_B ACKB/INTEB
B端口 P C 1 PC_1 PC1 I B F B IBF_B IBFB O B F B ‾ \overline{OBF_B} OBFB
B端口 P C 0 PC_0 PC0 I N T R B INTR_B INTRB I N T R B INTR_B INTRB

输入时序图

在这里插入图片描述
输出时序图
在这里插入图片描述
方式控制字

D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1 D 0 D_0 D0
1 A方式高位 A方式低位 A输入输出 P C 7 − P C 4 PC_7-PC_4 PC7PC4输入输出 B方式 B输入输出 P C 3 − P C 0 PC_3-PC_0 PC3PC0输入输出

其中,0表示输出,1表示输入。

C口位控制字

D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1 D 0 D_0 D0
0 无意义 无意义 无意义 选位 选位 选位 清零/置1

例:
在这里插入图片描述

mov dx,303H
mov al,81H
out dx,al
mov al,0FH
out dx,al;(PC7=1)
prn:
	mov dx,302H
	in al,dx
	test al,04h
	jz prn;//查询输入
mov dx,300H;A口
mov al,ah;//ah=打印数据
out dx,al
mov dx,303H
mov al,0eH;STB#=0
out dx,al
nop
nop
mov al,0FH;STB#=1
out dx,al

8254/8253奇数骑

8254每个奇数骑内都有个计数单元、初值寄存器、输出锁存器。GATE控制奇数骑工作。
工作过程:设定工作方式、计数初值、硬件启动,计数初值送入奇数骑、每个clk使得奇数骑-1、计数结束。
方式2/3连续计数,GATE高电平计数,上升沿重新计数。
方式0/4由软件启动(重写计数初值)。1/5硬件启动(GATE上升沿),0/4在高电平计数。
out初始值:方式0在写控制后变低,其余变高。
方式1输出N个CLK负脉冲,方式5输出1个CLK负脉冲(与2/4波形相同,N-1高,1低)。
方式3:若计数值为偶数,输出 N 2 \frac N2 2N个clk高电平和低电平。若计数值为奇数,输出 N + 1 2 \frac{N+1}2 2N+1个高电平和 N − 1 2 \frac{N-1}2 2N1个低电平。
方式0:计数结束中断。1:可编程硬件触发单稳负脉冲发生器
方式2:速率发生器。3:方波速率发生器。4:软件触发选通信号发生。5:硬件选通发生。
读出控制字:只有8254有,8253没有。

D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1 0
读出控制字 1 1 0:锁存计数值 0:锁存状态 1:2# 1:1# 1:0# 0
状态字 OUT isNULL 读写格式 读写格式 工作方式 工作方式 工作方式 进制

输入时钟信号频率 F c l k F_{clk} Fclk,周期 T c l k T_{clk} Tclk,输出频率 F o u t F_{out} Fout,周期 T o u t T_{out} Tout
T o u t = T c l k N T_{out}=T_{clk}N Tout=TclkN, N = F c l k F o u t N=\frac{F_{clk}}{F_{out}} N=FoutFclk,先写控制字,再写初值
某工厂计件系统,装一个零件产生一个脉冲接 C L K 0 CLK_0 CLK0,装100个后扬声器发声,则奇数骑0方式0,奇数骑1在方式3。

mov al,10H
mov dx,PORT_CTRL
out dx,al
mov al,100
mov dx,PORT_0
out dx,al
mov al,76H
mov dx,PORT_CTRL
out dx,al
mov ax,2000
mov dx,PORT_1
out dx,al
mov al,ah;写高8位
out dx,al

数字信号与模拟信号

单极性电压输出: V o u t = ( − D / ( 2 8 ) ) ∗ V R E F V_{out}=(-D/(2^8))*V_{REF} Vout=(D/(28))VREF
双极性电压输出: V o u t = D − 2 7 2 7 ∗ V R E F V_{out}=\frac{D-2^7}{2^7}*V_{REF} Vout=27D27VREF
正负范围-5~5
ILE:数据输入,锁存允许
C S ‾ \overline{CS} CS:片选
W R 1 ‾ \overline{WR_1} WR1:写数据
X F E R ‾ \overline {X_{FER}} XFER数据传送控制
W R 2 ‾ \overline{WR_2} WR2:第二级写。当 X F E R ‾ = W R 2 ‾ = 0 \overline{X_{FER}}=\overline{WR_2}=0 XFER=WR2=0,开始转换
L E 1 = L E 2 = 1 LE_1=LE_2=1 LE1=LE2=1直通,否则缓冲。 I o u t I_{out} Iout输出电压
双缓冲控制:

mov dx,portx
out dx,xdata
mov dx,porty
out dx,ydata
mov ax,portcon
out dx,al
call delay

读8路电压转换

lea di,buf
mov cx,8
mov dx,300
convert:
	out dx,al;启动转换
	push dx
	mov dx,310H
state:
	in al,dx;读EOC
	test al,20H;D5(EOC)为1?
	jz state
pop dx
in al,dx;读取结果
mov [di],al
add dx,2;下一模拟通道
add di,2
loop convert

0832锯齿波
N = V i n − V R E F − V R E F + − V R E F − ∗ 2 8 N=\frac{V_{in}-V^-_{REF}}{V^+_{REF}-V^-_{REF}}*2^8 N=VREF+VREFVinVREF28

mov dx,330H
mov al,00H
aga:
	out dx,al
	call delay
	inc al
	jmp aga
delay proc
	push cx
	mov cx,10
	loop $
	pop cx
	ret
delay endp

猜你喜欢

转载自blog.csdn.net/qq_46640863/article/details/128218876