当前位置:   article > 正文

08常用接口技术

接口技术

一、定时控制接口

定时控制具有极为重要的作用
微机控制系统中常需要定时中断、定时检测、定时扫描等
实时操作系统和多任务操作系统中要定时进行进程调度
PC机的日时钟计时、DRAM刷新定时和扬声器音调控制都采用了定时控制技术

可编程定时器芯片
软硬件相结合、方便灵活的定时电路

软件延时方法
处理器执行延时子程序

1.8253/8254定时器

定时器(计数器):由数字电路中的计数电路构成,记录输入脉冲的个数
脉冲信号具有一定随机性,通过脉冲的个数可以获知外设的状态变化次数(计数)
脉冲信号的周期固定(使用高精度晶振产生脉冲信号),个数乘以周期就是时间间隔(定时)

Intel 8253/8254可编程间隔定时器
3个独立的16位计数器通道
每个计数器有6种工作方式

在这里插入图片描述

1.1 8253的内部结构和引脚

内部结构和引脚
3个相互独立的计数器通道,结构完全相同:
计数器0
计数器1
计数器2

每个计数器通道:
16位减法计数器
16位预置寄存器
输出锁存器
在这里插入图片描述

定时器外设引脚
CLK时钟输入信号:
在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1
GATE门控输入信号:
控制计数器工作,可分成电平控制和上升沿控制两种类型
OUT计数器输出信号:
当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号

连接处理器引脚
D0~D7数据线 A0~A1地址线
RD读信号 WR写信号
CS*片选信号
在这里插入图片描述

1.2 工作方式

8253有6种工作方式,由方式控制字确定
每种工作方式的过程类似:
① 设定工作方式
② 设定计数初值
③ 硬件启动
④ 计数初值进入减1计数器
⑤ 每输入一个时钟计数器减1的计数过程
⑥ 计数过程结束

定时器方式0:计数结束中断
定时器方式1:可编程单稳脉冲
定时器方式2:频率发生器(分频器)
定时器方式3:方波发生器
定时器方式4:软件触发选通信号
定时器方式5:硬件触发选通信号

1.3 编程:

写入方式控制字
在这里插入图片描述
方式控制字编程示例

; 8253的计数器012端口和控制端口地址:40H~43H
	;设置其中计数器0为方式0
	;采用二进制计数,先低后高写入计数值
	mov al,30h
	;方式控制字:30H=00 11 000 0B
	out 43h,al
	;写入控制端口:43H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

写入计数值
选择二进制时
计数值范围:0000H~FFFFH
0000H是最大值,代表65536

选择十进制(BCD码)
计数值范围:0000~9999
0000代表最大值10000

计数值写入计数器各自的I/O地址
按方式控制字规定的读写格式进行

计数值编程示例:

; 8253的计数器012端口和控制端口地址:40H~43H
	;设置计数器0采用二进制计数
	;写入计数初值:1024(=400H)
	mov ax,1024	;计数初值:1024(=400H)
		;写入计数器0地址:40H
	out 40h,al	;写入低字节计数初值
	mov al,ah
	out 40h,al	;写入高字节计数初值

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.定时器的应用

在这里插入图片描述
1.定时中断

mov al,36h	; 计数器0为方式3,二进制计数
		; 先低后高写入计数值
	out 43h,al	; 写入方式控制字
	mov al,0	; 计数值为0
	out 40h,al	; 写入低字节计数值
	out 40h,al	; 写入高字节计数值
计数器0:方式3,计数值:65536,输出方波
	频率:1.19318MHz÷6553618.206Hz,不断产生
OUT0端接8259A的IRQ0,每秒产生18.206次中断请求,或说每隔55ms(54.925493ms)申请一次中断
DOS系统利用计数器0的这个特点,通过08号中断服务程序实现了日时钟计时功能

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.定时刷新

需要重复不断提出刷新请求
 门控总为高,选择方式23
2ms内刷新128次,即15.6s刷新一次
 计数初值为18
	mov al,54h	;计数器1为方式2
	;采用二进制计数,只写低8位计数值
	out 43h,al	;写入方式控制字
	mov al,18	;计数初值为18
	out 41h,al	;写入计数值

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.扬声器控制

;发音频率设置子程序
;入口参数:AX=1.19318×106÷发音频率
speaker	proc
	push ax	;暂存入口参数
	mov al,0b6h	;定时器2为方式3,先低后高
	out 43h,al	;写入方式控制字
	pop ax	;恢复入口参数
	out 42h,al	;写入低8位计数值
	mov al,ah
	out 42h,al	;写入高8位计数值
	ret
speaker	endp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
speakon	proc	;扬声器开子程序
	push ax
	in al,61h	;读取61H端口的原控制信息
	or al,03h	;D1D0=PB1PB0=11,其他不变
	out 61h,al	;直接控制发声
	pop ax
	ret
speakon	endp

;扬声器关子程序
and al,0fch
;D1D0=PB1PB0=00,其他不变

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
〔例8-1〕控制扬声器程序
;数据段
freq	dw 1193180/600	;给一个600Hz的频率
	;代码段
	mov ax,freq
	call speaker	;设置扬声器的音调
	call speakon	;打开扬声器声音
	call readc	;等待按键
	call speakoff	;关闭扬声器声音
	;子程序
	……
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、并行接口

并行数据传输:以计算机字长,通常是8、16或32位为传输单位,利用8、16或32个数据信号线一次传送一个字长的数据。
适合于外部设备与微机之间进行近距离、大量和快速的信息交换,如微机与并行接口打印机、磁盘驱动器等;
微机系统中最基本的信息交换方法,例如系统板上各部件之间的数据交换

并行数据传输需要并行接口的支持

1.并行接口电路8255

具有多种功能的可编程并行接口电路芯片
最基本的接口电路:三态缓冲器和锁存器
与CPU间、与外设间的接口电路:状态寄存器和控制寄存器
还有端口的译码和控制电路、中断控制电路

分3个端口,共24个外设引脚

共3种输入输出工作方式
方式0:基本输入输出方式
方式1:选通输入输出方式
方式2:双向选通传送方式

  • 内部结构和引脚

在这里插入图片描述

  • 8255外设数据端口:

端口A:PA0~PA7
A组,支持工作方式0、1、2
常作数据端口,功能最强大

端口B:PB0~PB7
B组,支持工作方式0、1
常作数据端口

端口C:PC0~PC7
仅支持工作方式0,分两个4位,每位可独立操作
A组控制高4位PC4~PC7,B组控制低4位PC0~PC3
可作数据、状态和控制端口
控制最灵活,最难掌握

  • 工作方式0:基本输入输出方式

方式0输入
执行输入IN指令,输入外设数据

在这里插入图片描述
方式0输出
执行输出OUT指令,将数据送给外设
在这里插入图片描述

  • 工作方式1:选通输入输出方式

借助于选通(应答)联络信号进行输入或输出
只有端口A和端口B可以采用方式1
作为输入或输出的数据端口
利用端口C的3个引脚作为应答联络信号
还提供有中断请求逻辑和中断允许触发器
对输入和输出的数据都进行锁存
适用于查询和中断方式的接口电路

8255工作方式1输入引脚

A组引脚:
在这里插入图片描述
选通输入工作时序:

异步时序:没有时钟,由引脚控制信号定时
STB*和IBF是外设和8255间应答联络信号
在这里插入图片描述
B组引脚:

在这里插入图片描述
8255工作方式1输出引脚

A组引脚
在这里插入图片描述
选通输出工作时序
异步时序:没有时钟,由引脚控制信号定时
OBF和ACK是外设和8255间应答联络信号
在这里插入图片描述
B组引脚
在这里插入图片描述

  • 8255的编程:

写入方式控制字
控制字写入控制字I/O地址:A1A0=11
在这里插入图片描述
写入方式控制字示例

要求:
A端口:方式1输入
C端口上半部:输出,C口下半部:输入
B端口:方式0输出
方式控制字:10110001B或B1H
初始化的程序段:
	mov dx,0ffefh	;假设控制端口为FFEFH
	mov al,0b1h	;方式控制字
	out dx,al	;送到控制端口

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

读写数据端口

利用数据端口I/O地址:A1A0=00(A) 01(B) 10(C)
作输入接口,执行输入IN指令获取外设数据
作输出接口,执行输出OUT指令将数据送出
8255具有锁存输出数据的能力
对输出方式的端口同样可以输入
不是读取外设数据,而是上次给外设的数据
可实现按位输出控制 
对输出端口B的PB7位置位的程序段
	mov dx,0fff9h	;B端口假设为FFF9H
	in al,dx	;读出B端口原输出内容
	or al,80h	;使PB7=D7=1
	out dx,al	;输出新的内容

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

端口C的特点
C端口被分成两个4位端口
只能以方式0工作,可分别选择输入或输出
上半部和A端口编为A组
下半部和B端口编为B组
A和B端口在方式1或方式2时
C端口的部分或全部引脚将被征用
其余引脚工作在方式0

端口C的输出
通过端口C的I/O地址:
向C端口直接写入字节数据
写进C端口的输出锁存器,并从输出引脚输出
对设置为输入的引脚无效
通过控制端口的I/O地址:
向C端口写入位控字
使C端口的某个引脚输出1或0
或置位复位内部的中断允许触发器

端口C位控制字
在这里插入图片描述
端口C的输入

未被A和B端口征用的引脚:
定义为输入的端口读到引脚输入的信息
定义为输出的端口读到输出锁存器的信息
被A和B端口征用作为联络线的引脚:
读到反映8255状态的状态字

端口C的读出内容
在这里插入图片描述

2.并行接口的应用

端口A,B,C和控制字地址
	60H,61H,62H和63H
	
工作在基本输入/输出方式0
端口A为方式0输入,用来读取键盘扫描码
端口B工作于方式0输出,例如控制扬声器等
端口C为方式0输入,读取系统状态和配置

系统的初始化编程:
	mov al,10011001b	;方式控制字99H
	out 63h,al

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.1用8255方式0与打印机接口

端口A为方式0输出打印数据
PC7引脚产生负脉冲选通信号
PC2引脚连接忙信号查询其状态
微处理器利用查询方式输出数据

打印机接口时序:
在这里插入图片描述
打印机时序:
在这里插入图片描述

方式0初始化程序段

mov dx,0fffeh	;控制端口地址为FFFEH
	mov al,10000001b	;方式控制字
	out dx,al
	;A端口方式0输出,端口B任意
	;C端口上半部输出、下半部输入
	mov al,00001111b	;端口C复位置位控制字
	out dx,al
	;使PC7=1,即置STORE*1 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
打印数据子程序-1
printc	proc	;AH=打印数据
	push ax
	push dx
prn: 	mov dx,0fffch	;读取端口C
	in al,dx	;查询打印机的状态
	and al,04h	;忙否(PC2=BUSY=0)?
	jnz prn	;PC2=1,打印机忙,等待
	mov dx,0fff8h
	;PC2=0,打印机不忙,输出
	mov al,ah
	out dx,al	;将打印数据从端口A输出

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
打印数据子程序-2
mov dx,0fffeh	;从PC7送出控制低脉冲
	mov al,00001110b	;使PC7=STROBE*0
	out dx,al
	nop	;产生一定宽度的低电平
	nop
	mov al,00001111b	;使PC7=STROBE*1
	out dx,al	;产生低脉冲STROBE*信号
	pop dx
	pop ax
	ret
printc	endp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

分别对8255A的控制端口写入80H和08H,它们的作用各是什么?
解答:

对8255A的控制端口写入80H是方式控制字,其作用是设置A端口为方式0输出,端口B为方式0输出,端口C为方式0输出。
对8255A的控制端口写入08H是端口C位控制字,其作用是设置PC4为0

设定8255芯片的端口A为方式1输入,端口B为方式1输出,写出此时读取端口C的数据各位的含义。
PC0:端口B的中断请求信号(INTRB)
PC1:端口B输出缓冲器满信号(OBFB)
PC2:端口B的中断允许控制信号(INTEB)
PC3:端口A的中断请求信号(INTRA)
PC4:端口A的中断允许控制信号(INTEA)
PC5:端口A输入缓冲器满信号(IBFA)
PC6/PC7:I/O信号

主程序:获取原来的中断向量,设置新的中断向量,修改屏蔽字
   mov dx,283h;设定端口A为选通输出方式
	 mov al,0a0h
	 out dx,al
	 mov al,0dh;使INTEA(PC6)为1,允许中断
	 out dx,al
   mov counter,0
   mov al,0  ;输出一个数据(才能引起中断)
   mov dx,288h
   out dx,al
   sti
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.2 键盘及其接口

键盘是微机系统最常使用的输入设备
小键盘:适用于单板机或以处理器为基础的仪器,实现数据、地址、命令及指令等输入
独立键盘:通过5芯电缆与PC微机主机连接

识别按键的扫描方法
先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合(通过检查列线电位实现);
再将第1行接地,检测列线是否有变为低电位的线;
如此往下一行一行地扫描,直到最后一行;
扫描过程中,发现某一行有键闭合时(列线输入中有一位为0),便在扫描中途退出;
通过组合行线和列线识别此刻按下哪一键

键盘扫描程序第1段:判断是否有键按下
key1:	mov al,00		
	mov dx,rowport	; rowport=行线端口地址
	out dx,al	; 使所有行线为低电平
  	mov dx,colport	; colport=列线端口地址
 	in al,dx	; 读取列值
	cmp al,0ffh	; 判定列线是否为低电平
	jz key1	; 没有,无闭合键
	; 则循环等待(或转向其他程序片断)
	call delay	; 有,延迟20ms消除抖动

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
键盘扫描程序第2段:识别按键
mov cx,8	; 行数送CX
	mov ah,0feh	; 扫描初值送AH
key2:	mov al,ah
	mov dx,rowport
	out dx,al	; 输出行值(扫描值)
	mov dx,colport
	in al,dx	; 读进列值
	cmp al,0ffh	; 判断有无低电平的列线
	jnz key3	; 有,则转下一步处理
	rol ah,1	; 无,则移位扫描值
	loop key2	; 准备下一行扫描
	jmp key1	; 所有行都没有按键
key3:	……	; AL=列值,AH=行值

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
查找键代码
key3:	mov si,offset table	; SI指向键行列值表
	mov di,offset char	; DI指向键代码表
	mov cx,64	; CX=键的个数
key4:	cmp ax,[si] 	; 与按键的行列值比较
   	jz key5	; 相同,说明查到
	inc si	; 不相同,继续比较
	inc si
	inc di
	loop key4
	jmp key1	; 全部不相同
	; 返回继续检测(或转向其他程序片断)

key5:	mov al,[di]	; 获取键代码送AL
	……	; 判断按键释放,没有则等待
	call delay	; 按键释放,延时消除抖动
	……	; 后续处理
; 键盘的行列值表:低字节是列值、高字节是行值
table	word 0fefeh	;0的行列值
	word 0fefdh	;1的行列值
	……	; 其他键的行列值
	; 键盘的键代码表
char	byte ……	;0的代码值
	byte ……	;1的代码值
	……	; 其他键的代码值

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2.3 数码管及其接口

发光二极管LED是最简单的显示设备
由7段LED就可以组成的LED数码管
LED数码管广泛用于单板微型机、微型机控制系统及数字化仪器中
LED数码管可以显示内存地址和数据等

  • LED数码管的工作原理
    在这里插入图片描述
    在这里插入图片描述
  • 单个数码管的显示
    LED数码管显示一位十六进制数(4位二进制数)
    硬件方法:专用的带驱动器的LED段译码器
    软件方法:组成显示代码表,通过查表进行译码
ledtb	byte 3fh,06h,5bh,……	;显示代码表
	; 实现1个LED数码管显示
	mov bx,1	; BX←要显示的数字
	mov al,ledtb[bx]
	; 换码为显示代码:AL←LEBTB[BX]
	mov dx,port	; port=数码管端口地址
	out dx,al	; 输出显示

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

  • 多个数码管的显示

硬件上用公用的驱动电路来驱动各数码管
软件上用扫描方法实现数码显示

8个数码管:用2个8位输出端口控制:
位控制端口:控制哪个(位)数码管显示
段控制端口:控制哪个段显示,决定具体显示什么数码

稳定数字显示:依次显示,不断重复
重复频率越高,数字显示越稳定
延时显示时间越长,显示亮度就越高

各种显示效果:控制重复频率和延时时间
在这里插入图片描述
在这里插入图片描述

依次显示8位数码管程序
; 数据段
leddt	byte  8 dup(0)	; 数码缓冲区
	; 主程序
	mov si,offset leddt	; 指向数码缓冲区
	call displed	; 调用显示子程序
	; 子程序:显示一次数码缓冲区的8个数码
	; 入口参数:DS:SI=缓冲区首地址
displed	proc
	push ax
	push bx
	push dx
	xor bx,bx 
	mov ah,0feh	; 指向最左边数码管
led1: 	mov bl,[si]	; 取出要显示的数字
	inc si
	mov al,ledtb[bx]
	; 得到显示代码:AL←LEDTB[BX]
	mov dx,segport	; segport为段控制端口
	out dx,al	; 送出段码
	mov al,ah	; 取出位显示代码
 	mov dx,bitport	; bitport为位控制端口
	out dx,al	; 送出位码
	call delay	; 实现数码管延时显示
	rol ah,1	; 指向下一个数码管
 	cmp ah,0feh	; 是否指向最右边数码管
        	jnz led1	; 没有,显示下一个数字
	pop dx
	pop bx
	pop ax
	ret	; 8位数码管都显示一遍
	; 显示代码表,按照09、A~F的顺序
ledtb	byte 0c0h,0f9h,0a4h,……,86h,8eh
displed	endp

timer	= 10	; 延时常量
delay	proc	; 软件延时子程序
	push bx
	push cx
	mov bx,timer	; 外循环:timer次数
delay1:	xor cx,cx
delay2:	loop delay2	; 内循环:216次循环
	dec bx
	jnz delay1
	pop cx
	pop bx
	ret
delay	endp

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

三、模拟接口

在这里插入图片描述

1.模拟输入输出系统

在这里插入图片描述

2.D/A转换器

D/A转换器(DAC)
将数字量转换成为模拟量(电压或电流)

DAC芯片有多种类型
按DAC的性能:通用、高速和高精度等转换器
按内部结构:不包含、包含数据寄存器
按位数:8位、12位、16位等
按输出模拟信号:电流输出型和电压输出型

2.1 D/A转换原理

把每位代码按其权的大小转换成相应的模拟分量,将各模拟分量相加
1101B=1×23+1×22+0×21+1×20=13

D/A转换器:
主要由电阻网络、电子开关和基准电压组成
DAC集成电路多采用R-2R梯形解码网络
输入数字量控制电子开关
使电阻网络中的不同电阻和基准电压接通
输出端产生成比例的模拟电流或电压
基准电压(参考电压VREF):稳定的电压源

DAC0832的内部结构
典型的8位、电流输出型、通用DAC芯片

在这里插入图片描述
DAC0832的数字接口
8位数字输入端
DI0~DI7(DI0为最低位)
输入寄存器(第1级)控制端
ILE、CS*、WR1*
DAC寄存器(第2级)控制端
XFER*、WR2*
在这里插入图片描述
直通锁存器的工作方式
两级缓冲寄存器都是直通锁存器
LE=1,直通(输出等于输入)
LE=0,锁存(输出保持不变)
在这里插入图片描述
DAC0832的工作方式:直通方式
LE1=LE2=1
输入的数字数据直接进入D/A转换器
在这里插入图片描述

DAC0832的工作方式:单缓冲方式
在这里插入图片描述
在这里插入图片描述
DAC0832的工作方式:双缓冲方式
两个寄存器都处于受控(缓冲)状态
能够对一个数据进行D/A转换的同时;输入另一个数据

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/725256
推荐阅读
相关标签
  

闽ICP备14008679号