单片机接口技术

8.1单片机的系统总线

51单片机与外部设备的连接既可以采用 I/O 口方式(非总线结构),也可以采用总线结构。51单片机由于总线受引脚数量的限制,数据总线与地址总线采用复用P0口方案。

三总线结构

输出锁存,输入/输出隔离,P0口无上拉电阻

单片机连接java 单片机连接方式_单片机连接java


地址总线(AB)、数据总线(DB)、控制总线(CB)

单片机连接java 单片机连接方式_引脚_02


由图可知;8 位数据总线由P0口组成,16位地址总线由 P0 和 P2 口组成,控制总线则由 P3 口及相关引脚组成。

总线结构特点:节省 I/O 口 便于外设扩展

地址锁存原理及实现

由图,地址 P0 口即做数据总线,有做 低八位地址总线,若不做隔离两者就会发生冲突。因此采用地址锁存器接口芯片将地址信息与数据信息隔离开,如下图,接口芯片型号为74HC373

单片机连接java 单片机连接方式_引脚_03


接线关系:/OE→地(仅作为输出),LE→正脉冲源,D0~D7→P0,Q0~Q7→外设地址端 P0口此时无需上拉电阻(总线方式)

单片机连接java 单片机连接方式_引脚_04


/OE 低点平 三态门导通,高电平三态门为高阻状态,/Q端与输出端 Q 断开。

LE为高电平时,D端与Q接通 LE负跳变时,锁存 LE为低电平时,隔离

图示是从单片机中分时地输出地址信息和输入/输出数据信息;/OE接地是为了满足无缓冲直通输出要求;LE 接单片机ALE引脚(地址锁存允许信号输出引脚/编程脉冲输入引脚)是要利用其提供的触发信号。

ALE引脚

MOVX 指令(用于片外数据存储器中的数据传递指令) 的时序图,可以看出在机器周期 S1P2~S2P2 期间 ALE 有一个正脉冲,S2P1S3P1有一段地址信息出现,(A0A7),在这期间 高电平 D 端与 Q 端接通,下降沿/Q端锁存地址信息。后来的ALE低电平右使 /Q端与 P0隔离,此后P0引脚出现的是数据信息(D0D7),在S4P2S6P2期间,A端输出地址信息;P0口为 8 位数据信息.这样在锁存芯片、ALE引脚的配合下,P0口便实现了输出低八位地址和输入/输出8位数据的功能。

单片机连接java 单片机连接方式_引脚_05


8.2简单并行 I/O 口扩展

I/O口·扩展的方法

1.采用锁存或者缓冲功能的简单并行扩展。

2.采用串口方式0的串并转换扩展。(第七章已经讲过)

3.采用可编程控制功能芯片的并行扩展。

**访问扩展端口的软件方法 **

单片机连接java 单片机连接方式_引脚_06


MOVX 指令的写端口时序(/WR)

单片机连接java 单片机连接方式_单片机连接java_07


MOVX 指令的读端口时序(/RD)

C51 语言 可以使用多种方法对 进行片外 RAM 绝对地址的访问。

1.采用宏定义文件absacc.h 定义绝对地址变量

#include <absacc.h>
#define 端口变量名 XBYTE [地址常数]

2.采用数据指针访问片外RAM绝对地址

void main(){
    unsigned char xdata *xdp;    // 定义一个指向xdata存储空间的指针
    xdp = 0x1000;				// xdata 指针赋值,指向 xdata 存储器地址 0x1000
    * xdp = 0x5a;				// 将数据0x5a送到xdata的0x1000单元
    ......
}

3.采用 _at_ 关键字访问片外RAM绝对地址。使用_at_ 定义变量只能为全局变量。

unsigned  char xdata xram[0x80] at 0x1000

简单并行口的输出接口的扩展 (电路口线少 利用率高)

单片机接TTL、CMOS锁存器、缓存器实现简单的扩展接口,根据接口芯片的功能可以实现输出扩展输入扩展两种类型,选择芯片的原则是“输入三态(三态门的功能),输出锁存”,以使信号可控选通,扩展输出的芯片要具有锁存功能 ,以实输出端可与前级信号隔离。一般用于输出端扩展的芯片有 74273 …

74273内部逻辑结构

单片机连接java 单片机连接方式_数据_08


74273的内部具有八个带有清零和负跳变沿触发功能的D触发器,其中时钟端CLK与D触发器的CP相连,出现负跳变沿可是D0D7的输入数据锁存到Q0Q7端输出,清零端/MR与D触发器的清零端CD相连,出现低电平可使Q0~Q7同时清零。74273引脚排列

单片机连接java 单片机连接方式_数据_09


接线关系:D0D7与单片机的P0口相连,Q0Q7与外设输入端相连,CLK接可以产生负脉冲信号的控制端,/MR接 Vcc(无需输出端清零控制时)。

实例1:使两片74273锁存输出不同的数据。

单片机连接java 单片机连接方式_引脚_10


其中 :U3、U4为或门(若两个输入端其中有一个输入为0,则相当于或门“开锁” 其输出值取决于另一输出端)。使用P2.7、P2.6做地址线。

P2.7 = 0、P2.6 = 1 时或门 U4:A “ 开锁 ”,U2 的 CLK端可出现 /WR 的负脉冲,U2可所存 P0 口数据,相反,U3的 CLK 却因为P2.6 = 1 照成或门 U4:B “上锁 ”,得不到负脉冲。无法锁存 P0 口数据。

地址位计算 本例中仅有 P2.6、P2.7两位地址线起作用,其余地址线未起作用(可取任意值,一般取为1)因此

U2选通,U3不选通的地址: 01xx xxxxxxxxxxxx(0x7fff)

U2不选通,U3选通的地址: 10xx xxxxxxxxxxxx(0xbfff)

#include <reg51.h> 
#include <absacc. h>
#define U2 XBYTE [Ox7fff]     // 定义 U2 为 0x7fff 的端口变量
#define U3 XBYTE [Oxbfff]     // 定义 U3 为 0xbfff 的端口变量
void main(void){
U2=0xaa;	//U2送1010 1010b
U3=0x0f;	//U3送0000 1111b
while(l);
}

注:

1.头文件 # include<absacc.h>不可缺少;

2.定义端口的格式一定不可出错:#define 端口变量名 XBYTE [ 端口地址 ]

简单并行输入接口的扩展

单片机的输入接口扩展,一般选用具有 三态缓冲功能的芯片实现。如74244等

单片机连接java 单片机连接方式_单片机_11


74244引脚及其内部结构

内部分为两组,内部由一个选通信号1/G或2/G控制4只三态门,为低电平时三态门导通,数据从A→Y,选通信号为高电平时三态门截至,输入输出呈现高阻态。因此74244仅有换从输入功能,没有信号锁存功能。

接线关系1/G或2/G接在可提供低电平的元件端,输入A接在外部输入设备端,输出端Y接在单片机I/O口端。

实例2 将按键的值显示

单片机连接java 单片机连接方式_单片机连接java_12


由图:P0口通过接口芯片被扩展为8路输出和八路输入,其中74273的时钟信号由P2.0与/WR组成,地址为 xxxx xxx0 xxxx xxxx (如 0xfeff )。74244的选通信号由P2.0与/RD 组成,地址同样为 xxxx xxx0 xxxx xxxx (如 0xfeff )。使用同样的地址线是因为谴责的选通是/WR的负脉冲所致,后者是因 /RD 的低电平所致。

include <reg51. h>
unsigned char xdata *PORT; 			//定义端口指针变量 void main () {
unsigned char trap;
*P0RT=0xff;						   //启动后置黑屏
while(1) {
trap = *P0RT;					   //从74244端口读取数据
if (tmp! =0xff)*P0RT=tmp;			//若有键动作,键值送74273
}

8.3 可编程并行 I/O 口扩展

可编程接口芯片是指其功能可由微处理器的指令来加以改变的接口芯片,六哦那个编程的方法,可以使一个接口芯片执行许多不同的功能。

/*


*/

8.4 D/A转换与DAC0832应用

D/A转换器是一种能把数字量转换为模拟量的电子器件(简称 DAC )A/D转化器则刚好相反。

单片机中ADC/DAC的应用

单片机连接java 单片机连接方式_数据_13

DAC0832的工作原理

D/A 转换的基本功能就是将一个用二进制数表示的数字量转换为相应的模拟电量。DAC0832实现这种转换的基本方法就是是二进制的每一位咱生一个正比于其权值大小的支路电流。支路电流的和即为电流形式的D/A转换结果。

单片机连接java 单片机连接方式_引脚_14


DAC0832的电压转换原理

DAC的性能指标:

1.分辨率:将DAC转换为二进制的位数称为分辨率,位数越多分辨率越高。DAC0832的分辨率为8位。

假设满量程电压为5V,DAC0832能够输出的可分辨的最小电压为 5/2^8.

2.转换时间:将数字量转换为稳定的模拟信号所需的时间,一般为几十纳秒到几微妙,DAC0832转换时间为 1 微妙

DAC0832与单片机接口及其编程