微机原理与接口技术-第八章常用接口技术

news2024/9/23 21:18:52

文章目录

  • 定时控制接口
    • 8253/8254定时器
    • 定时器的应用
  • 并行接口
    • 并行接口电路8255
      • 内部引脚
      • 工作方式
        • 工作方式0:基本输入输出方式
        • 工作方式1:选通输入输出方式
      • 编程
    • 并行接口的应用
      • 用8255方式0与打印机接口
    • 数码管及其接口
      • 数码管的工作原理
      • 单个数码管的显示
      • 多个数码管的显示
  • 异步串行通讯接口
  • 模拟接口
    • 模拟输入输出系统
    • D/A转换器
      • D/A转换原理
      • DAC0832的数字接口
      • 模拟输出
      • DAC芯片与主机的连接
    • A/D转换器
      • A/D转换原理简介
      • ADC0809的模拟输入
      • ADC0809的数字输出
      • ADC芯片和主机连接
      • ADC芯片的应用:中断方式
      • ADC芯片的应用:查询方式

定时控制接口

8253/8254定时器

定时器的应用

并行接口

并行接口电路8255

内部引脚

image

  • 8225具有24条可编程输入输出引脚,分成3个端口:ABC端口每个端口都是8位
  • A、B、C、3个端口分成两组进行控制,A组控制端口A和端口C的高部(PC7PC4),`B组`控制B端口和C端口的低半部(PC3PC0)
  • 端口A和端口B作为输入和输出的数据端口,端口C作为控制或状态端口

工作方式

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

工作方式0是一种基本的输入输出方式,不需要应答式的联络信号

  • D0~D7:8255与处理器间的数据引脚
  • 端口:是指8255与外设间的数据引脚PA0~PA7PB0~PB7、和PC0~PC7

当处理器执行IN指令时,产生读信号~RD,控制8255从端口读取外设的输入数据,然后从D0~D7输入处理器

当处理器执行输出OUT指令时,产生写信号~WR,将处理器的数据从D0~D7提供给8255,然后控制8255将该数据从端口提供给外设

8255的三个端口都可以工作在基本输入输出方式,

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

借助于选通(应答)联络信号进行输入或输出的工作方式。8225只有端口A和端口B可以采用方式1,但是每个数据端口要利用端口C的3个数据引脚作为应答联络信号。
当8225的端口A端口B都工作于方式1,此时端口C剩下的两个引脚还可作为基本输入输出引脚
image

  • (~STB)选通信号:这是由外设提供的输入信号,有效时,将输入设备送来的数据锁存至8255的输入锁存器
  • IBF:输入缓冲满信号,8255的联络信号,当此信号有效时,表示数据已锁存至输出锁存器
  • INTR:中断请求信号,用于向处理器发出中断请求,要求处理器读取外设数据

image

选通输出方式
image

编程

8225是通用并行接口,在具体应用时,要根据实际情况选择工作方式,也就是需要进行输出设置。
8255的初始化编程只需要一个方式控制字就可以把三个端口设置完成

  1. 写入方式控制字
    image

例如我们要把A端口指定为方式1输出,C端口上半部分指定为输出,B端口指定为方式0输出,C端口下半部分指定为输入,方式控制字:0B1H,或10110001B

mov dx, 0fffeh		;假设控制端口的地址为FFFEH
mov ak,0b1h			;方式控制字
out ax,al			;送到控制端口
  1. 读写数据端口
    经过了步骤1对读写方式的初始化之后,处理器执行IN指令、OUT指令,对3个数据端口进行读写就可以实现处理器与外设之间的数据交换
    如何实现对数据端口的置位:
mov dx,0fffah		;B端口地址假设位FFFAH
in al,dx			;读出B端口原输出内容
or al, 80h			;使D7=PB7=1
out dx,al			;输出新的内容
  1. 读写端口C
  • C端口主要被分为两个4位端口,两个端口只能以0方式工作,但可分别选择输入和输出(但情况必须合法比如用火选择PC0为输入、PC1为输出将无法办到,因为他们两个都是属于C端口的下半部分的只能同输入输出)
  • 当端口A和B工作在方式1下,C端口的部分引脚将被征用,其余引脚可设定工作在方式0
  • 对端口C的数据输出有两种办法
    • 通过端口C的I/O地址,向C端口直接写入字节数据。
    • 通过控制端口,向C端口写入位控制字,使C端口的某个引脚输出0或1,或置位、复位内部的中断允许触发器
      image
  • 读取的C端口数据有两种情况
    • 对未被A端口和B端口征用的引脚,将从定义为输入的端口读到引脚输入信息,将从定义为输出的端口读到输出锁存器的信息。
    • 对被A、B端口征用作为联络线的引脚,将读到反映8255状态的状态字
      image

并行接口的应用

例子:
image

mov al,10011001b		;8255的方式控制字我9H
out 63h,al				;设置端口A和端口C为方式0输入,端口B为方式0输出

用8255方式0与打印机接口

image

采用端口C的PC7引脚产生负脉冲选通信号,PC2引脚连接打印机的忙信号查询其状态,处理器利用擦查询方式输出数据。

;初始化程序段
mov dx,0fffeh		;控制端口地址为FFFEH
mov al,10000001B	;方式控制字
out dx,al			;A端口方式0输出C端口上半部分输出、下半部分输入(端口B任意)
mov al,00001111B	;端口C的复位/置位控制字
out dx,al			;使PC7=1,即置~STORBE=1

;输出打印数据子程序,入口参数AH=打印数据
printc	prc
		push ax
		push dx
prn:	mov dx,0fffch	;读取端口C
		in al,dx		;查询打印机的状态
		and al,04h		;打印机忙否
		jnz prn			;PC2=1打印机忙,则循环等待
		mov dx,0fff8h	;PC2=0打印机不忙,则输出数据
		mov al,ah
		out dx,al		;将打印数据从端口A输出
		mov dx, 0fffeh	;从端口C的PC7送出控制低脉冲
		mov al,00001110B;使PC7=0,即置~STORBE=0
		out dx,al
		nop				;适当延时,产生一定宽度的低电平
		nop
		mov al,00001111B;使PC7=1,置~STROBE=1
		out dx,al
		pop dx
		pop ax
		ret
printc	endp

数码管及其接口

数码管的工作原理

LED数码管的主要部分是7段发光管,这七段发光管顺时针分别被称为a、b、c、d、e、f、g,有的还有一个小数点h。通过7个发光段的不同组合,数码管可以显示09和AF共16个字母数字,从而实现十六进制数的显示。
image
LED数码管有共阳极和共阴极两种结构。如果共阳极结构。
共阳极的话就是低电平有效
共阴极的话就是高电平有效

单个数码管的显示

为了将一位十六进制数在一个LED数码管上显示出来,就需要将一位十六进制数译为LED的7位显示代码,一种方法是硬件方法,另一种方法是软件方法,软件方法就是将0~F这16个数字对应的显示代码组成一个表,通过查表进行译码

ledtb byte 3f,06h,5bh,...,显示数码表
mov bx,1	;要显示的数字
mov al,ledtb[bx];
mov dx,port	;假设port表似乎与数码管相接的端口地址
out dx,al	;输出显示

多个数码管的显示

多个数码管进行显示的话我们需要考虑两个问题,就是选中那个数码管,然后让这个数码管显示什么数字,首先我们已经把第二个问题(显示什么数字)解决了(单个数码管的显示),然后选中那个数码管可以用一个位控制端口

  • 位控制端口:控制哪个数码管显示
  • 段控制端口:决定具体显示什么数码

image

	;数据段
ledt	byte 8 dup(0)
	;主程序
	mov si,offset ledt	;指向数码缓冲区
	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位数码管都显示一遍,返回
ledtb	byte	0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
		byte	80h,90h,88h,83h,0c6h,0c1h,86h,8eh
displed	endp
timer	=10				;延时常量(需要根据实际情况确定具体数值)
delay	pro
...
delay	endp

异步串行通讯接口

模拟接口

在现实中许多信号并不是数字信号,而是计算机无法处理的模拟信号,模拟接口就是为了处理这类信号。

模拟输入输出系统

image

  • 传感器:将各种现场的物理量测量出来并转换成电信号
  • 放大器: 把传感器输出的信号放大到ADC所需的量程范围
  • 低通滤波器:降低噪声、滤去高频干扰
  • 多路开关:把多个现场信号分时地接通到A/D转换器上转换
  • 采样保持器:对高速变化的信号进行A/D转换时,为了保持转换精度,需要使用采样保持器,周期性采样连续信号,并在A/D转换期间保持不变

D/A转换器

D/A转换器(DAC)将微机处理后的数字量转换为模拟量

D/A转换原理

将数字量转换为模拟量,先把每一位代码按其权值的大小转换成相应的模拟分量,然后将各模拟分量相加,总和就是与数字量相应的模拟量。例如1101B=13
Vref:基准电压,提供给转换电路的稳定的电压源,也称参考电压Vref

DAC0832的数字接口

image
DAC0832内部具有输入寄存器和DAC寄存器两级数字量缓冲寄存器
DI0~DI7是8为数字量输入引脚
ILE~CS~WR1控制输入寄存器锁存信号LE1
~XFERWR2:控制DAC寄存器的锁存信号LE2
三种工作方式

  • 直通方式:LE1和LE2一直为高,数据可以直接进入D/A转换器
  • 单缓冲方式:LE1或LE2一直为高,只控制一级缓冲
  • 双缓冲方式:不让LE1和LE2一直为高,控制两级寄存器

模拟输出

DAC0832的模拟输出有Iout1Iout2Rfb

  • Iout1:模拟输出电流1,是逻辑电平为1的各位输出电流之和,输出全为1的时候值最大,输出全为0的时候值最小
  • Iout2:模拟输出电流2,是逻辑电平为0的各位输出电流之和,Iout1 + Iout2 = 常量
  • Rfb:反馈电阻引出端,用作外接运算放大器的反馈电阻
  • VREF:参考电压输出端
  • Vcc:电源电压
  • AGND:模拟地
  • DGND:数字地
    image

DAC芯片与主机的连接

DAC芯片作为一个输出设备接口电路,与主机相连时中间需要有锁存器

mov al,buf	;取数字量
mov dx,portd	;PORTD为DAC端口地址
out dx,al		;输出,进行D/A转换

A/D转换器

A/D转换器将模拟量转换为数字两输入微机处理

A/D转换原理简介

ADC主要有两种实现技术,一种是计数器式,一种是逐次逼近式。
计数式的原理:就是从0开始加,产生数字量,然后用D/A转换器,将数字量转换成模拟量,和输入进来的模拟量进行比较,看是否相同,不相同的话继续累加,遇到相同的则说明此时寄存器里面存储的就是该模拟信号要转换的数字量
逐次逼近式:是从最大的数开始减,类似计数式

ADC0809的模拟输入

image
ADC8089提供8通道的多路开关和寻址逻辑

  • IN0~IN7:8个模拟电压输入端
  • ADDA、ADDB、ADDC:3个地址输入线,经过译码器后选择一个模拟输入端进行A/D转换

ADC0809的数字输出

ADC0809内部对转换后的数字量具有锁存能力,数字量输出端D0D7具有三态功能,只有在OE为高电平有效时,才将三态锁存器的梭子两从D0D7输出
8为A/D转换器,从输入模拟量Vin转换为数字模拟量N的公式:
image

ADC芯片和主机连接

ADC芯片是一个向主机输出的设备。
ADC开始转换时需要一个启动信号。
ADC转换结束时,ADC输出一个转换结束信号,通知主机读取结果,主机检查判断A/D转换结束的方式主要有两种一种是查询方式、一种是中断方式

  • 查询方式:ADC开始转换后,主机不断查询数据总线上的某一位(这一位是ADC在转换结束后发送到数据总线上的),发现结束信号有效时,才读取数据
  • 中断方式:把结束信号作为中断请求信号接到主机的中断请求线上。ADC转换结束后,主动向处理器申请中断。处理器响应中断后,在中断服务程序中读取数据。

ADC芯片的应用:中断方式

image

;.data设置缓冲区
adtemp byte 0
;.code
...		;设置中断向量表等工作
sti		;开中断
mov dx,220h
out ad,al		;启动A/D转换
... ;其他工作

中断服务程序

adint	proc		;中断服务程序
		sti			;开中断
		push ax		;保护寄存器
		push dx
		push ds
		mov ax,@data	设置数据段DS的段地址
		mov ds,ax
		mov dx,220h
		in al,dx	;读取A/D转换后的数字量
		mov adtemp,al	;送入缓冲区
		mov al, 20h	;给中断控制器发送EOI命令
		out 20h,al
		pop ds
		pop dx
		pop ax
		iret		;中断返回
adint	endp

ADC芯片的应用:查询方式

image

	;.data
counter	equ 8
buf		byte	counter dup(0)
	;.code
	mov bx, offset buf;数据缓冲区偏移地址
	mov cx, counter;检测的数据个数
	mov dx,220h	;从IN0开始转换
start1:	
	out dx,al	;启动A/D转换
	push dx
	mov dx, 238h	;循环查询是否转换结束
start2:
	in al, dx	;读入状态信息
	test al, 80h	;D7=1转换结束
	jz start2	;没有结束继续查询
	pop dx		;转换结束
	in al,dx	;读取数据
	mov [bx],al	;存入缓存区
	inc cx
	inc dx		;转向下一个模拟通道进行检测
loop start1
...	数据处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1143613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目录和文件操作

在自己电脑任一盘符中新建以OS_Test命名的文件夹&#xff0c;并在该文件夹中新建新建3个以.txt&#xff0c;3个 .xlsx为扩展名的文件&#xff08;文件名由代码随机生成&#xff0c;长度为8&#xff0c;由字母数字组成&#xff09;。&#xff0c;请写一个程序&#xff0c;删除掉…

Unity的unity_ObjectToWorld里的每一列分别代表什么意思?换个方向反向理解-更简单

官方关键UnityObjectToWorldNormal&#xff08;&#xff09; 代码 从乐乐姐的书中得知&#xff0c;当我们在shader想获得法线&#xff0c;大概会这么些 o.wordDir UnityObjectToWorldNormal(i.normal) &#xff08;这行代码就包含了官方对“unity_ObjectToWorld”的终极理解…

视频批量剪辑技巧:如何实现震撼的嵌套合并效果

随着视频制作需求的不断增长&#xff0c;视频批量剪辑技巧在提高制作效率和质量方面显得尤为重要。本文将介绍云炫AI智剪实现震撼嵌套合并效果的方法&#xff0c;帮助您在视频制作过程中更高效地完成任务。 视频批量剪辑技巧是一种利用计算机技术实现自动化视频剪辑的方法。通…

串口占用检测工具

串口占用检测工具 平时需要检测哪个程序占用了串口&#xff0c;下面介绍一款非常方便的工具&#xff0c;它的工具箱里包含一个串口占用检测工具&#xff0c;可以非常方便的检测出来哪个程序占用了串口&#xff0c;并给出程序名和PID。 官网下载地址&#xff1a;http://www.red…

2023枣庄麒瑞音乐嘉年华济南新闻发布会

2023枣庄麒瑞音乐嘉年华新闻发布会今日在济南市西元大厦隆重举行&#xff0c;演唱会主办方枣庄恒立城市发展投资有限公司副经理刘畅先生、枣庄麒瑞文化董事长孙振敏女士&#xff0c;演唱会冠名方滕州爱啤士精酿啤酒有限公司总经理周静女士等和国内及山东省近30家主流新闻媒体到…

命令模式——让程序舒畅执行

● 命令模式介绍 命令模式&#xff08;Command Pattern&#xff09;&#xff0c;是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多条条框框&#xff0c;其实并不是一个很“规矩”的模式&#xff0c;不过&#xff0c;就是基于一点&#xff0c;命令模式相对于…

局域网内两台电脑共享文件夹(通过网线直连共享数据)

文章目录 2.设置共享文件夹3.访问共享文件夹 1.将两台电脑置于同一局域网下 用网线将两台电脑连接关闭两台电脑防火墙将两台电脑IP地址设置在同一局域网下 测试是否在同一局域网下&#xff0c;使用ping命令 ping 192.168.0.122.设置共享文件夹 选择想要共享的文件夹&#xff…

刷题学习记录

sql注入&#xff08;bugkuctf&#xff09; 打开显示一个登录框 照常用admin用户名登录&#xff0c;密码随便填一个&#xff0c;显示密码错误 接着用admin为用户名登录&#xff0c;密码照样随便填,结果显示用户名不存在 题目提示基于布尔的SQL盲注&#xff0c;猜测后端是判断用…

【torch高级】一种新型的概率学语言pyro(02/2)

前文链接&#xff1a;【torch高级】一种新型的概率学语言pyro&#xff08;01/2&#xff09; 七、Pyro 中的推理 7.1 背景&#xff1a;变分推理 引言中的每项计算&#xff08;后验分布、边际似然和后验预测分布&#xff09;都需要执行积分&#xff0c;而这通常是不可能的或计算…

静力触探数据智能预处理(4)

静力触探数据智能预处理&#xff08;4&#xff09; 前言 数据处理方式已由手工1.0、计算机辅助2.0向人工智能3.0的趋势发展。机器学习是人工智能的基础&#xff0c;本文尝试应用机器学习中K均值聚类算法对孔压静力触探数据进行土的分类&#xff0c;分类结果不理想&#xff0c…

buuctf_练[安洵杯 2019]easy_web

[安洵杯 2019]easy_web 文章目录 [安洵杯 2019]easy_web掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 url地址和源代码的信息捕捉&#xff1b;图片和base64之间转换&#xff1b;base64和十六进制编码的了解&#xff1b;代码审计&#xff0c;绕过正则匹配对关键字的…

简易但很实用的javaswing/gui音乐播放器

视频浏览地址 很实用的一个javaswing音乐播放器。可以展示歌名&#xff0c;上一曲下一曲。 源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制

Java八股文 ----Redis篇

问题大纲 缓存穿透 原因:入侵者大量查询不存在的数据 使得Redis不断去访问数据库 然而Redis也无法缓存,就导致每次都会查询数据库...数据库的并发度不高 就会宕机 解决办法 布隆过滤器:作用:拦截不存在的数据 布隆过滤器 原理:把数据的id通过多次哈希计算标记数组,新来个数…

Easex样式样式

eg1&#xff1a;线形样式和描边 #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #define PI 3.14 // 1PI 180度 2PI 360度int main() {initgraph(800, 600);setorigin(400, 300);setaspectratio(1, -1);/*void setl…

基于Ubuntu20.04安装ROS系统

文章目录 一、ROS简介二、ROS安装三、ROS安装测试四、安装问题解决1. sudo rosdepc init&#xff1a;找不到命令2. ERROR: cannot download default sources list from...3. Command roscore not found...4. Resource not found: roslaunch... 一、ROS简介 ROS是用于编写机器人…

行业追踪,2023-10-27

自动复盘 2023-10-27 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

前后端分离不可忽视的陷阱,深入剖析挑战,分享解决方案,助你顺利实施分离开发。

不管你设计的系统架构是怎么样&#xff0c;最后都是你的组织内的沟通结构胜出。这个观点一直在组织内不断地被证明&#xff0c;但也不断地被忽略。 前后端分离的利与弊 近几年&#xff0c;随着微服务架构风格的引入、前后端生态的快速发展、多端产品化的出现&#xff0c;前后…

DevChat:VSCode中的AI黑马

前言 编程对于很多人来说&#xff0c;可能是一件复杂且耗时的事情。在结合当下各类AI产品层出不穷的情况下&#xff0c;我是有在认真的去拥抱AI来结合我们的工作&#xff0c;帮助我们的工作提升效率&#xff0c;尝试过我们的官方G P T&#xff0c;以及各类国产AI产品&#xff…

【Java基础】集合容器

集合容器 文章目录 集合容器1. 集合框架体系2. Collection子接口1&#xff1a;List3. Collection子接口2&#xff1a;Set3.1 Set主要实现类&#xff1a;HashSet3.1.1 HashSet概述3.1.2 HashSet中添加元素的过程&#xff1a;3.1.3 重写 hashCode() 方法的基本原则3.1.4 重写equa…

【Unity数据交互】JsonUtility的“爱恨情仇“

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…